Changeset 37381 in webkit for trunk/JavaScriptCore/kjs/StructureID.cpp
- Timestamp:
- Oct 7, 2008, 11:17:37 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/StructureID.cpp
r37370 r37381 45 45 , m_nameInPrevious(0) 46 46 , m_transitionCount(0) 47 , m_propertyStorageCapacity(JSObject::inlineStorageCapacity)48 47 , m_cachedTransistionOffset(WTF::notFound) 49 48 { … … 104 103 } 105 104 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) 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) 115 112 { 116 113 ASSERT(!structureID->m_isDictionary); … … 118 115 119 116 if (StructureID* existingTransition = structureID->m_transitionTable.get(make_pair(propertyName.ustring().rep(), attributes))) { 120 offset = existingTransition->cachedTransistionOffset(); 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(); 121 121 ASSERT(offset != WTF::notFound); 122 propertyStorage[offset] = value; 123 slot.setNewProperty(slotBase, offset); 124 122 125 return existingTransition; 123 126 } … … 125 128 if (structureID->m_transitionCount > s_maxTransitionLength) { 126 129 RefPtr<StructureID> transition = toDictionaryTransition(structureID); 127 offset = transition->m_propertyMap.put(propertyName, attributes); 128 if (transition->m_propertyMap.storageSize() > transition->propertyStorageCapacity()) 129 transition->growPropertyStorageCapacity(); 130 transition->m_propertyMap.put(propertyName, value, attributes, false, slotBase, slot, propertyStorage); 130 131 return transition.release(); 131 132 } … … 138 139 transition->m_transitionCount = structureID->m_transitionCount + 1; 139 140 transition->m_propertyMap = structureID->m_propertyMap; 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 141 142 size_t offset = transition->m_propertyMap.put(propertyName, value, attributes, false, slotBase, slot, propertyStorage); 146 143 transition->setCachedTransistionOffset(offset); 147 144 … … 157 154 transition->m_isDictionary = true; 158 155 transition->m_propertyMap = structureID->m_propertyMap; 159 transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity;160 156 return transition.release(); 161 157 } … … 177 173 transition->m_transitionCount = structureID->m_transitionCount + 1; 178 174 transition->m_propertyMap = structureID->m_propertyMap; 179 transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity;180 175 return transition.release(); 181 176 } … … 186 181 transition->m_transitionCount = structureID->m_transitionCount + 1; 187 182 transition->m_propertyMap = structureID->m_propertyMap; 188 transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity;189 183 return transition.release(); 190 184 }
Note:
See TracChangeset
for help on using the changeset viewer.