Changeset 39502 in webkit for trunk/JavaScriptCore/runtime/Structure.cpp
- Timestamp:
- Dec 29, 2008, 4:28:40 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/runtime/Structure.cpp
r39341 r39502 39 39 #endif 40 40 41 #define DUMP_STRUCTURE_ID_STATISTICS 041 #define DUMP_STRUCTURE_ID_STATISTICS 1 42 42 43 43 #ifndef NDEBUG … … 102 102 ++numberWithPropertyMaps; 103 103 totalPropertyMapsSize += PropertyMapHashTable::allocationSize(structure->m_propertyTable->size); 104 if (structure->m_propertyTable->deletedOffsets) 105 totalPropertyMapsSize += (structure->m_propertyTable->deletedOffsets->capacity() * sizeof(unsigned)); 104 106 } 105 107 } … … 379 381 ASSERT(!structure->m_isDictionary); 380 382 ASSERT(structure->typeInfo().type() == ObjectType); 381 ASSERT(structure->m_deletedOffsets.isEmpty());382 383 ASSERT(!Structure::addPropertyTransitionToExistingStructure(structure, propertyName, attributes, offset)); 383 384 … … 451 452 452 453 transition->m_transitionCount = structure->m_transitionCount + 1; 453 transition->m_deletedOffsets = structure->m_deletedOffsets;454 454 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 455 455 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; … … 468 468 RefPtr<Structure> transition = create(structure->storedPrototype(), structure->typeInfo()); 469 469 transition->m_transitionCount = structure->m_transitionCount + 1; 470 transition->m_deletedOffsets = structure->m_deletedOffsets;471 470 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 472 471 transition->m_hasGetterSetterProperties = transition->m_hasGetterSetterProperties; … … 487 486 RefPtr<Structure> transition = create(structure->m_prototype, structure->typeInfo()); 488 487 transition->m_isDictionary = true; 489 transition->m_deletedOffsets = structure->m_deletedOffsets;490 488 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 491 489 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; … … 508 506 // FIMXE: We can make this more efficient by canonicalizing the Structure (draining the 509 507 // deleted offsets vector) before transitioning from dictionary. 510 if ( structure->m_deletedOffsets.isEmpty())508 if (!structure->m_propertyTable || !structure->m_propertyTable->deletedOffsets || structure->m_propertyTable->deletedOffsets->isEmpty()) 511 509 structure->m_isDictionary = false; 512 510 … … 604 602 } 605 603 604 // Copy the deletedOffsets vector. 605 if (m_propertyTable->deletedOffsets) 606 newTable->deletedOffsets = new Vector<unsigned>(*m_propertyTable->deletedOffsets); 607 606 608 return newTable; 607 609 } … … 729 731 730 732 unsigned newOffset; 731 if ( !m_deletedOffsets.isEmpty()) {732 newOffset = m_ deletedOffsets.last();733 m_ deletedOffsets.removeLast();733 if (m_propertyTable->deletedOffsets && !m_propertyTable->deletedOffsets->isEmpty()) { 734 newOffset = m_propertyTable->deletedOffsets->last(); 735 m_propertyTable->deletedOffsets->removeLast(); 734 736 } else 735 737 newOffset = m_propertyTable->keyCount; … … 799 801 m_propertyTable->entries()[entryIndex - 1].attributes = 0; 800 802 m_propertyTable->entries()[entryIndex - 1].offset = 0; 801 m_deletedOffsets.append(offset); 803 804 if (!m_propertyTable->deletedOffsets) 805 m_propertyTable->deletedOffsets = new Vector<unsigned>; 806 m_propertyTable->deletedOffsets->append(offset); 802 807 803 808 ASSERT(m_propertyTable->keyCount >= 1); … … 904 909 } 905 910 m_propertyTable->lastIndexUsed = lastIndexUsed; 911 m_propertyTable->deletedOffsets = oldTable->deletedOffsets; 906 912 907 913 fastFree(oldTable);
Note:
See TracChangeset
for help on using the changeset viewer.