Ignore:
Timestamp:
Oct 7, 2008, 11:17:37 AM (17 years ago)
Author:
[email protected]
Message:

2008-10-07 Cameron Zwarich <[email protected]>

Rubber-stamped by Mark Rowe.

Roll out r37370.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/StructureID.cpp

    r37370 r37381  
    4545    , m_nameInPrevious(0)
    4646    , m_transitionCount(0)
    47     , m_propertyStorageCapacity(JSObject::inlineStorageCapacity)
    4847    , m_cachedTransistionOffset(WTF::notFound)
    4948{
     
    104103}
    105104
    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)
     105void 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
     111PassRefPtr<StructureID> StructureID::addPropertyTransition(StructureID* structureID, const Identifier& propertyName, JSValue* value, unsigned attributes, JSObject* slotBase, PutPropertySlot& slot, PropertyStorage& propertyStorage)
    115112{
    116113    ASSERT(!structureID->m_isDictionary);
     
    118115
    119116    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();
    121121        ASSERT(offset != WTF::notFound);
     122        propertyStorage[offset] = value;
     123        slot.setNewProperty(slotBase, offset);
     124
    122125        return existingTransition;
    123126    }
     
    125128    if (structureID->m_transitionCount > s_maxTransitionLength) {
    126129        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);
    130131        return transition.release();
    131132    }
     
    138139    transition->m_transitionCount = structureID->m_transitionCount + 1;
    139140    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);
    146143    transition->setCachedTransistionOffset(offset);
    147144
     
    157154    transition->m_isDictionary = true;
    158155    transition->m_propertyMap = structureID->m_propertyMap;
    159     transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity;
    160156    return transition.release();
    161157}
     
    177173    transition->m_transitionCount = structureID->m_transitionCount + 1;
    178174    transition->m_propertyMap = structureID->m_propertyMap;
    179     transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity;
    180175    return transition.release();
    181176}
     
    186181    transition->m_transitionCount = structureID->m_transitionCount + 1;
    187182    transition->m_propertyMap = structureID->m_propertyMap;
    188     transition->m_propertyStorageCapacity = structureID->m_propertyStorageCapacity;
    189183    return transition.release();
    190184}
Note: See TracChangeset for help on using the changeset viewer.