Changeset 50254 in webkit for trunk/JavaScriptCore/runtime
- Timestamp:
- Oct 28, 2009, 6:25:02 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/runtime
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/runtime/JSObject.h
r49721 r50254 203 203 bool isUsingInlineStorage() const { return m_structure->isUsingInlineStorage(); } 204 204 205 static const size_tinlineStorageCapacity = sizeof(EncodedJSValue) == 2 * sizeof(void*) ? 4 : 3;206 static const size_tnonInlineBaseStorageCapacity = 16;205 static const unsigned inlineStorageCapacity = sizeof(EncodedJSValue) == 2 * sizeof(void*) ? 4 : 3; 206 static const unsigned nonInlineBaseStorageCapacity = 16; 207 207 208 208 static PassRefPtr<Structure> createStructure(JSValue prototype) -
trunk/JavaScriptCore/runtime/JSPropertyNameIterator.cpp
r49734 r50254 44 44 PropertyNameArray propertyNames(exec); 45 45 o->getPropertyNames(exec, propertyNames); 46 JSPropertyNameIterator* jsPropertyNameIterator = new (exec) JSPropertyNameIterator(exec, propertyNames.data()); 46 size_t numCacheableSlots = 0; 47 if (!o->structure()->hasNonEnumerableProperties() && !o->structure()->hasAnonymousSlots() && 48 !o->structure()->isUncacheableDictionary() && !o->structure()->typeInfo().overridesGetPropertyNames()) 49 numCacheableSlots = o->structure()->propertyStorageSize(); 50 51 JSPropertyNameIterator* jsPropertyNameIterator = new (exec) JSPropertyNameIterator(exec, propertyNames.data(), numCacheableSlots); 47 52 48 53 if (o->structure()->isDictionary()) -
trunk/JavaScriptCore/runtime/JSPropertyNameIterator.h
r49955 r50254 55 55 virtual void markChildren(MarkStack&); 56 56 57 bool getOffset(size_t i, int& offset) 58 { 59 if (i >= m_numCacheableSlots) 60 return false; 61 offset = i; 62 return true; 63 } 64 57 65 JSValue get(ExecState*, JSObject*, size_t i); 58 66 size_t size() { return m_jsStringsSize; } … … 65 73 66 74 private: 67 JSPropertyNameIterator(ExecState*, PropertyNameArrayData* propertyNameArrayData );75 JSPropertyNameIterator(ExecState*, PropertyNameArrayData* propertyNameArrayData, size_t numCacheableSlot); 68 76 69 77 Structure* m_cachedStructure; 70 78 RefPtr<StructureChain> m_cachedPrototypeChain; 71 size_t m_jsStringsSize; 79 uint32_t m_numCacheableSlots; 80 uint32_t m_jsStringsSize; 72 81 OwnArrayPtr<JSValue> m_jsStrings; 73 82 }; 74 83 75 inline JSPropertyNameIterator::JSPropertyNameIterator(ExecState* exec, PropertyNameArrayData* propertyNameArrayData )84 inline JSPropertyNameIterator::JSPropertyNameIterator(ExecState* exec, PropertyNameArrayData* propertyNameArrayData, size_t numCacheableSlots) 76 85 : JSCell(exec->globalData().propertyNameIteratorStructure.get()) 77 86 , m_cachedStructure(0) 87 , m_numCacheableSlots(numCacheableSlots) 78 88 , m_jsStringsSize(propertyNameArrayData->propertyNameVector().size()) 79 89 , m_jsStrings(new JSValue[m_jsStringsSize]) -
trunk/JavaScriptCore/runtime/Structure.cpp
r49734 r50254 376 376 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 377 377 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; 378 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 378 379 379 380 if (structure->m_propertyTable) { … … 418 419 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 419 420 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; 421 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 420 422 421 423 // Don't set m_offset, as one can not transition to this. … … 434 436 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 435 437 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; 438 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 436 439 437 440 // Don't set m_offset, as one can not transition to this. … … 465 468 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 466 469 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; 470 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 467 471 468 472 if (structure->m_propertyTable) { … … 493 497 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 494 498 transition->m_hasGetterSetterProperties = transition->m_hasGetterSetterProperties; 499 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 495 500 496 501 // Don't set m_offset, as one can not transition to this. … … 511 516 transition->m_propertyStorageCapacity = structure->m_propertyStorageCapacity; 512 517 transition->m_hasGetterSetterProperties = structure->m_hasGetterSetterProperties; 518 transition->m_hasNonEnumerableProperties = structure->m_hasNonEnumerableProperties; 513 519 514 520 structure->materializePropertyMapIfNecessary(); … … 551 557 552 558 m_isPinnedPropertyTable = true; 559 if (attributes & DontEnum) 560 m_hasNonEnumerableProperties = true; 561 553 562 size_t offset = put(propertyName, attributes, specificValue); 554 563 if (propertyStorageSize() > propertyStorageCapacity()) -
trunk/JavaScriptCore/runtime/Structure.h
r49734 r50254 96 96 97 97 void growPropertyStorageCapacity(); 98 size_tpropertyStorageCapacity() const { return m_propertyStorageCapacity; }99 size_tpropertyStorageSize() const { return m_propertyTable ? m_propertyTable->keyCount + m_propertyTable->anonymousSlotCount + (m_propertyTable->deletedOffsets ? m_propertyTable->deletedOffsets->size() : 0) : m_offset + 1; }98 unsigned propertyStorageCapacity() const { return m_propertyStorageCapacity; } 99 unsigned propertyStorageSize() const { return m_propertyTable ? m_propertyTable->keyCount + m_propertyTable->anonymousSlotCount + (m_propertyTable->deletedOffsets ? m_propertyTable->deletedOffsets->size() : 0) : m_offset + 1; } 100 100 bool isUsingInlineStorage() const; 101 101 … … 120 120 void setHasGetterSetterProperties(bool hasGetterSetterProperties) { m_hasGetterSetterProperties = hasGetterSetterProperties; } 121 121 122 bool hasNonEnumerableProperties() const { return m_hasNonEnumerableProperties; } 123 124 bool hasAnonymousSlots() const { return m_propertyTable && m_propertyTable->anonymousSlotCount; } 125 122 126 bool isEmpty() const { return m_propertyTable ? !m_propertyTable->keyCount : m_offset == noOffset; } 123 127 … … 191 195 PropertyMapHashTable* m_propertyTable; 192 196 193 size_t m_propertyStorageCapacity;197 uint32_t m_propertyStorageCapacity; 194 198 signed char m_offset; 195 199 … … 197 201 bool m_isPinnedPropertyTable : 1; 198 202 bool m_hasGetterSetterProperties : 1; 203 bool m_hasNonEnumerableProperties : 1; 199 204 #if COMPILER(WINSCW) 200 205 // Workaround for Symbian WINSCW compiler that cannot resolve unsigned type of the declared
Note:
See TracChangeset
for help on using the changeset viewer.