Changeset 37370 in webkit for trunk/JavaScriptCore/kjs/StructureID.cpp
- Timestamp:
- Oct 6, 2008, 10:43:06 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/StructureID.cpp
r37321 r37370 45 45 , m_nameInPrevious(0) 46 46 , m_transitionCount(0) 47 , m_propertyStorageCapacity(JSObject::inlineStorageCapacity) 47 48 , m_cachedTransistionOffset(WTF::notFound) 48 49 { … … 103 104 } 104 105 105 void StructureID::transitionTo(StructureID* oldStructureID, StructureID* newStructureID, JSObject* slotBase) 106 { 107 if (!slotBase->usingInlineStorage() && oldStructureID->m_propertyMap.size() != newStructureID->m_propertyMap.size()) 108 slotBase->allocatePropertyStorage(oldStructureID->m_propertyMap.size(), newStructureID->m_propertyMap.size()); 109 } 110 111 PassRefPtr<StructureID> StructureID::addPropertyTransition(StructureID* structureID, const Identifier& propertyName, JSValue* value, unsigned attributes, JSObject* slotBase, PutPropertySlot& slot, PropertyStorage& propertyStorage) 106 void StructureID::growPropertyStorageCapacity() 107 { 108 if (m_propertyStorageCapacity == JSObject::inlineStorageCapacity) 109 m_propertyStorageCapacity = JSObject::nonInlineBaseStorageCapacity; 110 else 111 m_propertyStorageCapacity *= 2; 112 } 113 114 PassRefPtr<StructureID> StructureID::addPropertyTransition(StructureID* structureID, const Identifier& propertyName, unsigned attributes, size_t& offset) 112 115 { 113 116 ASSERT(!structureID->m_isDictionary); … … 115 118 116 119 if (StructureID* existingTransition = structureID->m_transitionTable.get(make_pair(propertyName.ustring().rep(), attributes))) { 117 if (!slotBase->usingInlineStorage() && structureID->m_propertyMap.size() != existingTransition->m_propertyMap.size()) 118 slotBase->allocatePropertyStorage(structureID->m_propertyMap.size(), existingTransition->m_propertyMap.size()); 119 120 size_t offset = existingTransition->cachedTransistionOffset(); 120 offset = existingTransition->cachedTransistionOffset(); 121 121 ASSERT(offset != WTF::notFound); 122 propertyStorage[offset] = value;123 slot.setNewProperty(slotBase, offset);124 125 122 return existingTransition; 126 123 } … … 128 125 if (structureID->m_transitionCount > s_maxTransitionLength) { 129 126 RefPtr<StructureID> transition = toDictionaryTransition(structureID); 130 transition->m_propertyMap.put(propertyName, value, attributes, false, slotBase, slot, propertyStorage); 127 offset = transition->m_propertyMap.put(propertyName, attributes); 128 if (transition->m_propertyMap.storageSize() > transition->propertyStorageCapacity()) 129 transition->growPropertyStorageCapacity(); 131 130 return transition.release(); 132 131 } … … 139 138 transition->m_transitionCount = structureID->m_transitionCount + 1; 140 139 transition->m_propertyMap = structureID->m_propertyMap; 141 142 size_t offset = transition->m_propertyMap.put(propertyName, value, attributes, false, slotBase, slot, propertyStorage); 140 transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity; 141 142 offset = transition->m_propertyMap.put(propertyName, attributes); 143 if (transition->m_propertyMap.storageSize() > transition->propertyStorageCapacity()) 144 transition->growPropertyStorageCapacity(); 145 143 146 transition->setCachedTransistionOffset(offset); 144 147 … … 154 157 transition->m_isDictionary = true; 155 158 transition->m_propertyMap = structureID->m_propertyMap; 159 transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity; 156 160 return transition.release(); 157 161 } … … 173 177 transition->m_transitionCount = structureID->m_transitionCount + 1; 174 178 transition->m_propertyMap = structureID->m_propertyMap; 179 transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity; 175 180 return transition.release(); 176 181 } … … 181 186 transition->m_transitionCount = structureID->m_transitionCount + 1; 182 187 transition->m_propertyMap = structureID->m_propertyMap; 188 transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity; 183 189 return transition.release(); 184 190 }
Note:
See TracChangeset
for help on using the changeset viewer.