Changeset 79132 in webkit for trunk/Source/JavaScriptCore/runtime/Structure.cpp
- Timestamp:
- Feb 19, 2011, 1:55:44 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/Structure.cpp
r78732 r79132 224 224 } 225 225 226 Structure::Structure(JSValue prototype, const TypeInfo& typeInfo, unsigned anonymousSlotCount )226 Structure::Structure(JSValue prototype, const TypeInfo& typeInfo, unsigned anonymousSlotCount, const ClassInfo* classInfo) 227 227 : m_typeInfo(typeInfo) 228 228 , m_prototype(prototype) 229 229 , m_specificValueInPrevious(0) 230 , m_classInfo(classInfo) 230 231 , m_propertyTable(0) 231 232 , m_propertyStorageCapacity(typeInfo.isFinal() ? JSFinalObject_inlineStorageCapacity : JSNonFinalObject_inlineStorageCapacity) … … 260 261 } 261 262 263 Structure::Structure(const Structure* previous) 264 : m_typeInfo(previous->typeInfo()) 265 , m_prototype(previous->storedPrototype()) 266 , m_specificValueInPrevious(0) 267 , m_classInfo(previous->m_classInfo) 268 , m_propertyTable(0) 269 , m_propertyStorageCapacity(previous->m_propertyStorageCapacity) 270 , m_offset(noOffset) 271 , m_dictionaryKind(NoneDictionaryKind) 272 , m_isPinnedPropertyTable(false) 273 , m_hasGetterSetterProperties(previous->m_hasGetterSetterProperties) 274 , m_hasNonEnumerableProperties(previous->m_hasNonEnumerableProperties) 275 , m_attributesInPrevious(0) 276 , m_specificFunctionThrashCount(previous->m_specificFunctionThrashCount) 277 , m_anonymousSlotCount(previous->anonymousSlotCount()) 278 , m_isUsingSingleSlot(true) 279 { 280 m_transitions.m_singleTransition = 0; 281 282 ASSERT(m_prototype); 283 ASSERT(m_prototype->isObject() || m_prototype->isNull()); 284 285 #ifndef NDEBUG 286 #if ENABLE(JSC_MULTIPLE_THREADS) 287 MutexLocker protect(ignoreSetMutex); 288 #endif 289 if (shouldIgnoreLeaks) 290 ignoreSet.add(this); 291 else 292 structureCounter.increment(); 293 #endif 294 295 #if DUMP_STRUCTURE_ID_STATISTICS 296 liveStructureSet.add(this); 297 #endif 298 } 299 262 300 Structure::~Structure() 263 301 { … … 476 514 } 477 515 478 RefPtr<Structure> transition = create(structure ->m_prototype.get(), structure->typeInfo(), structure->anonymousSlotCount());516 RefPtr<Structure> transition = create(structure); 479 517 480 518 transition->m_cachedPrototypeChain = structure->m_cachedPrototypeChain; … … 483 521 transition->m_attributesInPrevious = attributes; 484 522 transition->m_specificValueInPrevious = specificValue; 485 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity;486 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties;487 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties;488 transition->m_specificFunctionThrashCount = structure->m_specificFunctionThrashCount;489 523 490 524 if (structure->m_propertyTable) { … … 529 563 PassRefPtr<Structure> Structure::changePrototypeTransition(Structure* structure, JSValue prototype) 530 564 { 531 RefPtr<Structure> transition = create(prototype, structure->typeInfo(), structure->anonymousSlotCount()); 532 533 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 534 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; 535 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 536 transition->m_specificFunctionThrashCount = structure->m_specificFunctionThrashCount; 565 RefPtr<Structure> transition = create(structure); 566 567 transition->m_prototype = prototype; 537 568 538 569 // Don't set m_offset, as one can not transition to this. … … 549 580 { 550 581 ASSERT(structure->m_specificFunctionThrashCount < maxSpecificFunctionThrashCount); 551 RefPtr<Structure> transition = create(structure->storedPrototype(), structure->typeInfo(), structure->anonymousSlotCount()); 552 553 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 554 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; 555 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 556 transition->m_specificFunctionThrashCount = structure->m_specificFunctionThrashCount + 1; 582 RefPtr<Structure> transition = create(structure); 583 584 ++transition->m_specificFunctionThrashCount; 557 585 558 586 // Don't set m_offset, as one can not transition to this. … … 575 603 PassRefPtr<Structure> Structure::getterSetterTransition(Structure* structure) 576 604 { 577 RefPtr<Structure> transition = create(structure->storedPrototype(), structure->typeInfo(), structure->anonymousSlotCount()); 578 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 579 transition->m_hasGetterSetterProperties = transition->m_hasGetterSetterProperties; 580 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 581 transition->m_specificFunctionThrashCount = structure->m_specificFunctionThrashCount; 605 RefPtr<Structure> transition = create(structure); 582 606 583 607 // Don't set m_offset, as one can not transition to this. … … 595 619 ASSERT(!structure->isUncacheableDictionary()); 596 620 597 RefPtr<Structure> transition = create(structure->m_prototype.get(), structure->typeInfo(), structure->anonymousSlotCount()); 598 transition->m_dictionaryKind = kind; 599 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 600 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; 601 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 602 transition->m_specificFunctionThrashCount = structure->m_specificFunctionThrashCount; 603 621 RefPtr<Structure> transition = create(structure); 622 604 623 structure->materializePropertyMapIfNecessary(); 605 624 transition->m_propertyTable = structure->copyPropertyTable(); 606 625 transition->m_isPinnedPropertyTable = true; 626 transition->m_dictionaryKind = kind; 607 627 608 628 ASSERT(structure->anonymousSlotCount() == transition->anonymousSlotCount());
Note:
See TracChangeset
for help on using the changeset viewer.