Changeset 96883 in webkit for trunk/Source/JavaScriptCore/runtime


Ignore:
Timestamp:
Oct 6, 2011, 5:47:21 PM (14 years ago)
Author:
[email protected]
Message:

Structure does not reset m_previous when pinning the property map
https://bugs.webkit.org/show_bug.cgi?id=69583

Reviewed by Gavin Barraclough.

This is an 0.6% performance improvement in V8, and 0.2% overall.

  • runtime/Structure.cpp:

(JSC::Structure::changePrototypeTransition):
(JSC::Structure::despecifyFunctionTransition):
(JSC::Structure::getterSetterTransition):
(JSC::Structure::toDictionaryTransition):
(JSC::Structure::preventExtensionsTransition):
(JSC::Structure::addPropertyWithoutTransition):
(JSC::Structure::removePropertyWithoutTransition):
(JSC::Structure::pin):

  • runtime/Structure.h:
Location:
trunk/Source/JavaScriptCore/runtime
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/Structure.cpp

    r96354 r96883  
    370370    structure->materializePropertyMapIfNecessary(globalData);
    371371    transition->m_propertyTable = structure->copyPropertyTable(globalData, transition);
    372     transition->m_isPinnedPropertyTable = true;
     372    transition->pin();
    373373
    374374    return transition;
     
    386386    structure->materializePropertyMapIfNecessary(globalData);
    387387    transition->m_propertyTable = structure->copyPropertyTable(globalData, transition);
    388     transition->m_isPinnedPropertyTable = true;
     388    transition->pin();
    389389
    390390    if (transition->m_specificFunctionThrashCount == maxSpecificFunctionThrashCount)
     
    406406    structure->materializePropertyMapIfNecessary(globalData);
    407407    transition->m_propertyTable = structure->copyPropertyTable(globalData, transition);
    408     transition->m_isPinnedPropertyTable = true;
     408    transition->pin();
    409409
    410410    return transition;
     
    419419    structure->materializePropertyMapIfNecessary(globalData);
    420420    transition->m_propertyTable = structure->copyPropertyTable(globalData, transition);
    421     transition->m_isPinnedPropertyTable = true;
    422421    transition->m_dictionaryKind = kind;
     422    transition->pin();
    423423
    424424    return transition;
     
    472472    structure->materializePropertyMapIfNecessary(globalData);
    473473    transition->m_propertyTable = structure->copyPropertyTable(globalData, transition);
    474     transition->m_isPinnedPropertyTable = true;
    475474    transition->m_preventExtensions = true;
     475    transition->pin();
    476476
    477477    return transition;
     
    550550
    551551    materializePropertyMapIfNecessary(globalData);
    552 
    553     m_isPinnedPropertyTable = true;
     552   
     553    pin();
    554554
    555555    size_t offset = putSpecificValue(globalData, propertyName, attributes, specificValue);
     
    566566    materializePropertyMapIfNecessary(globalData);
    567567
    568     m_isPinnedPropertyTable = true;
     568    pin();
    569569    size_t offset = remove(propertyName);
    570570    return offset;
     571}
     572
     573void Structure::pin()
     574{
     575    m_isPinnedPropertyTable = true;
     576    m_previous.clear();
     577    m_nameInPrevious.clear();
    571578}
    572579
  • trunk/Source/JavaScriptCore/runtime/Structure.h

    r96483 r96883  
    237237
    238238        bool isValid(ExecState*, StructureChain* cachedPrototypeChain) const;
     239       
     240        void pin();
    239241
    240242        static const int s_maxTransitionLength = 64;
Note: See TracChangeset for help on using the changeset viewer.