⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 176583 in webkit


Ignore:
Timestamp:
Nov 29, 2014, 4:06:58 PM (12 years ago)
Author:
akling@apple.com
Message:

PropertyTable keys should be AtomicStringImpl.
<https://webkit.org/b/139096>

Reviewed by Sam Weinig.

Since PropertyTable keys are really always Identifiers, switch the key
type from StringImpl* to AtomicStringImpl*.

We have code in the GetByVal opcode implementations that assumes things
about this, so this change adds confidence to those algorithms.

  • bytecode/ComplexGetStatus.cpp:

(JSC::ComplexGetStatus::computeFor):

  • bytecode/ComplexGetStatus.h:
  • bytecode/GetByIdStatus.cpp:

(JSC::GetByIdStatus::computeFromLLInt):
(JSC::GetByIdStatus::computeFor):
(JSC::GetByIdStatus::computeForStubInfo):

  • bytecode/GetByIdStatus.h:
  • bytecode/PutByIdStatus.cpp:

(JSC::PutByIdStatus::computeFromLLInt):
(JSC::PutByIdStatus::computeFor):
(JSC::PutByIdStatus::computeForStubInfo):

  • bytecode/PutByIdStatus.h:
  • dfg/DFGByteCodeParser.cpp:

(JSC::DFG::ByteCodeParser::parseBlock):
(JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):

  • dfg/DFGDesiredIdentifiers.cpp:

(JSC::DFG::DesiredIdentifiers::addLazily):
(JSC::DFG::DesiredIdentifiers::at):

  • dfg/DFGDesiredIdentifiers.h:

(JSC::DFG::DesiredIdentifiers::operator[]):

  • dfg/DFGFixupPhase.cpp:

(JSC::DFG::FixupPhase::isStringPrototypeMethodSane):

  • runtime/Identifier.h:

(JSC::Identifier::impl):

  • runtime/IntendedStructureChain.cpp:

(JSC::IntendedStructureChain::mayInterceptStoreTo):

  • runtime/IntendedStructureChain.h:
  • runtime/PropertyMapHashTable.h:
  • runtime/Structure.cpp:

(JSC::StructureTransitionTable::contains):
(JSC::StructureTransitionTable::get):
(JSC::Structure::addPropertyTransitionToExistingStructureImpl):
(JSC::Structure::addPropertyTransitionToExistingStructureConcurrently):
(JSC::Structure::getConcurrently):
(JSC::Structure::add):
(JSC::Structure::remove):

  • runtime/Structure.h:

(JSC::PropertyMapEntry::PropertyMapEntry):

  • runtime/StructureInlines.h:

(JSC::Structure::getConcurrently):

  • runtime/StructureTransitionTable.h:

(JSC::StructureTransitionTable::Hash::hash):

Location:
trunk/Source/JavaScriptCore
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r176572 r176583  
     12014-11-29  Andreas Kling  <akling@apple.com>
     2
     3        PropertyTable keys should be AtomicStringImpl.
     4        <https://webkit.org/b/139096>
     5
     6        Reviewed by Sam Weinig.
     7
     8        Since PropertyTable keys are really always Identifiers, switch the key
     9        type from StringImpl* to AtomicStringImpl*.
     10
     11        We have code in the GetByVal opcode implementations that assumes things
     12        about this, so this change adds confidence to those algorithms.
     13
     14        * bytecode/ComplexGetStatus.cpp:
     15        (JSC::ComplexGetStatus::computeFor):
     16        * bytecode/ComplexGetStatus.h:
     17        * bytecode/GetByIdStatus.cpp:
     18        (JSC::GetByIdStatus::computeFromLLInt):
     19        (JSC::GetByIdStatus::computeFor):
     20        (JSC::GetByIdStatus::computeForStubInfo):
     21        * bytecode/GetByIdStatus.h:
     22        * bytecode/PutByIdStatus.cpp:
     23        (JSC::PutByIdStatus::computeFromLLInt):
     24        (JSC::PutByIdStatus::computeFor):
     25        (JSC::PutByIdStatus::computeForStubInfo):
     26        * bytecode/PutByIdStatus.h:
     27        * dfg/DFGByteCodeParser.cpp:
     28        (JSC::DFG::ByteCodeParser::parseBlock):
     29        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
     30        * dfg/DFGDesiredIdentifiers.cpp:
     31        (JSC::DFG::DesiredIdentifiers::addLazily):
     32        (JSC::DFG::DesiredIdentifiers::at):
     33        * dfg/DFGDesiredIdentifiers.h:
     34        (JSC::DFG::DesiredIdentifiers::operator[]):
     35        * dfg/DFGFixupPhase.cpp:
     36        (JSC::DFG::FixupPhase::isStringPrototypeMethodSane):
     37        * runtime/Identifier.h:
     38        (JSC::Identifier::impl):
     39        * runtime/IntendedStructureChain.cpp:
     40        (JSC::IntendedStructureChain::mayInterceptStoreTo):
     41        * runtime/IntendedStructureChain.h:
     42        * runtime/PropertyMapHashTable.h:
     43        * runtime/Structure.cpp:
     44        (JSC::StructureTransitionTable::contains):
     45        (JSC::StructureTransitionTable::get):
     46        (JSC::Structure::addPropertyTransitionToExistingStructureImpl):
     47        (JSC::Structure::addPropertyTransitionToExistingStructureConcurrently):
     48        (JSC::Structure::getConcurrently):
     49        (JSC::Structure::add):
     50        (JSC::Structure::remove):
     51        * runtime/Structure.h:
     52        (JSC::PropertyMapEntry::PropertyMapEntry):
     53        * runtime/StructureInlines.h:
     54        (JSC::Structure::getConcurrently):
     55        * runtime/StructureTransitionTable.h:
     56        (JSC::StructureTransitionTable::Hash::hash):
     57
    1582014-11-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
    259
  • trunk/Source/JavaScriptCore/bytecode/ComplexGetStatus.cpp

    r176506 r176583  
    3333ComplexGetStatus ComplexGetStatus::computeFor(
    3434    CodeBlock* profiledBlock, Structure* headStructure, StructureChain* chain,
    35     unsigned chainCount, StringImpl* uid)
     35    unsigned chainCount, AtomicStringImpl* uid)
    3636{
    3737    // FIXME: We should assert that we never see a structure that
  • trunk/Source/JavaScriptCore/bytecode/ComplexGetStatus.h

    r172129 r176583  
    9999    static ComplexGetStatus computeFor(
    100100        CodeBlock* profiledBlock, Structure* headStructure, StructureChain* chain,
    101         unsigned chainCount, StringImpl* uid);
     101        unsigned chainCount, AtomicStringImpl* uid);
    102102   
    103103    Kind kind() const { return m_kind; }
  • trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp

    r175846 r176583  
    6767#endif
    6868
    69 GetByIdStatus GetByIdStatus::computeFromLLInt(CodeBlock* profiledBlock, unsigned bytecodeIndex, StringImpl* uid)
     69GetByIdStatus GetByIdStatus::computeFromLLInt(CodeBlock* profiledBlock, unsigned bytecodeIndex, AtomicStringImpl* uid)
    7070{
    7171    UNUSED_PARAM(profiledBlock);
     
    9292}
    9393
    94 GetByIdStatus GetByIdStatus::computeFor(CodeBlock* profiledBlock, StubInfoMap& map, unsigned bytecodeIndex, StringImpl* uid)
     94GetByIdStatus GetByIdStatus::computeFor(CodeBlock* profiledBlock, StubInfoMap& map, unsigned bytecodeIndex, AtomicStringImpl* uid)
    9595{
    9696    ConcurrentJITLocker locker(profiledBlock->m_lock);
     
    119119#if ENABLE(JIT)
    120120GetByIdStatus GetByIdStatus::computeForStubInfo(
    121     const ConcurrentJITLocker& locker, CodeBlock* profiledBlock, StructureStubInfo* stubInfo, StringImpl* uid,
     121    const ConcurrentJITLocker& locker, CodeBlock* profiledBlock, StructureStubInfo* stubInfo, AtomicStringImpl* uid,
    122122    CallLinkStatus::ExitSiteData callExitSiteData)
    123123{
     
    225225GetByIdStatus GetByIdStatus::computeFor(
    226226    CodeBlock* profiledBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap,
    227     StubInfoMap& dfgMap, CodeOrigin codeOrigin, StringImpl* uid)
     227    StubInfoMap& dfgMap, CodeOrigin codeOrigin, AtomicStringImpl* uid)
    228228{
    229229#if ENABLE(DFG_JIT)
     
    263263}
    264264
    265 GetByIdStatus GetByIdStatus::computeFor(const StructureSet& set, StringImpl* uid)
     265GetByIdStatus GetByIdStatus::computeFor(const StructureSet& set, AtomicStringImpl* uid)
    266266{
    267267    // For now we only handle the super simple self access case. We could handle the
  • trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.h

    r173797 r176583  
    6868    }
    6969   
    70     static GetByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, StringImpl* uid);
    71     static GetByIdStatus computeFor(const StructureSet&, StringImpl* uid);
     70    static GetByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, AtomicStringImpl* uid);
     71    static GetByIdStatus computeFor(const StructureSet&, AtomicStringImpl* uid);
    7272   
    73     static GetByIdStatus computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin, StringImpl* uid);
     73    static GetByIdStatus computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin, AtomicStringImpl* uid);
    7474   
    7575    State state() const { return m_state; }
     
    9898    static GetByIdStatus computeForStubInfo(
    9999        const ConcurrentJITLocker&, CodeBlock* profiledBlock, StructureStubInfo*,
    100         StringImpl* uid, CallLinkStatus::ExitSiteData);
     100        AtomicStringImpl* uid, CallLinkStatus::ExitSiteData);
    101101#endif
    102     static GetByIdStatus computeFromLLInt(CodeBlock*, unsigned bytecodeIndex, StringImpl* uid);
     102    static GetByIdStatus computeFromLLInt(CodeBlock*, unsigned bytecodeIndex, AtomicStringImpl* uid);
    103103   
    104104    bool appendVariant(const GetByIdVariant&);
  • trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp

    r174815 r176583  
    6363#endif
    6464
    65 PutByIdStatus PutByIdStatus::computeFromLLInt(CodeBlock* profiledBlock, unsigned bytecodeIndex, StringImpl* uid)
     65PutByIdStatus PutByIdStatus::computeFromLLInt(CodeBlock* profiledBlock, unsigned bytecodeIndex, AtomicStringImpl* uid)
    6666{
    6767    UNUSED_PARAM(profiledBlock);
     
    106106}
    107107
    108 PutByIdStatus PutByIdStatus::computeFor(CodeBlock* profiledBlock, StubInfoMap& map, unsigned bytecodeIndex, StringImpl* uid)
     108PutByIdStatus PutByIdStatus::computeFor(CodeBlock* profiledBlock, StubInfoMap& map, unsigned bytecodeIndex, AtomicStringImpl* uid)
    109109{
    110110    ConcurrentJITLocker locker(profiledBlock->m_lock);
     
    135135PutByIdStatus PutByIdStatus::computeForStubInfo(
    136136    const ConcurrentJITLocker& locker, CodeBlock* profiledBlock, StructureStubInfo* stubInfo,
    137     StringImpl* uid, CallLinkStatus::ExitSiteData callExitSiteData)
     137    AtomicStringImpl* uid, CallLinkStatus::ExitSiteData callExitSiteData)
    138138{
    139139    if (!stubInfo || !stubInfo->seen)
     
    275275#endif
    276276
    277 PutByIdStatus PutByIdStatus::computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin codeOrigin, StringImpl* uid)
     277PutByIdStatus PutByIdStatus::computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin codeOrigin, AtomicStringImpl* uid)
    278278{
    279279#if ENABLE(DFG_JIT)
     
    309309}
    310310
    311 PutByIdStatus PutByIdStatus::computeFor(JSGlobalObject* globalObject, const StructureSet& set, StringImpl* uid, bool isDirect)
     311PutByIdStatus PutByIdStatus::computeFor(JSGlobalObject* globalObject, const StructureSet& set, AtomicStringImpl* uid, bool isDirect)
    312312{
    313313    if (toUInt32FromStringImpl(uid) != PropertyName::NotAnIndex)
  • trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.h

    r173797 r176583  
    7171    }
    7272   
    73     static PutByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, StringImpl* uid);
    74     static PutByIdStatus computeFor(JSGlobalObject*, const StructureSet&, StringImpl* uid, bool isDirect);
     73    static PutByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, AtomicStringImpl* uid);
     74    static PutByIdStatus computeFor(JSGlobalObject*, const StructureSet&, AtomicStringImpl* uid, bool isDirect);
    7575   
    76     static PutByIdStatus computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin, StringImpl* uid);
     76    static PutByIdStatus computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin, AtomicStringImpl* uid);
    7777   
    7878    State state() const { return m_state; }
     
    9797#if ENABLE(JIT)
    9898    static PutByIdStatus computeForStubInfo(
    99         const ConcurrentJITLocker&, CodeBlock*, StructureStubInfo*, StringImpl* uid,
     99        const ConcurrentJITLocker&, CodeBlock*, StructureStubInfo*, AtomicStringImpl* uid,
    100100        CallLinkStatus::ExitSiteData);
    101101#endif
    102     static PutByIdStatus computeFromLLInt(CodeBlock*, unsigned bytecodeIndex, StringImpl* uid);
     102    static PutByIdStatus computeFromLLInt(CodeBlock*, unsigned bytecodeIndex, AtomicStringImpl* uid);
    103103   
    104104    bool appendVariant(const PutByIdVariant&);
  • trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp

    r176479 r176583  
    28352835            unsigned identifierNumber = m_inlineStackTop->m_identifierRemap[currentInstruction[3].u.operand];
    28362836           
    2837             StringImpl* uid = m_graph.identifiers()[identifierNumber];
     2837            AtomicStringImpl* uid = m_graph.identifiers()[identifierNumber];
    28382838            GetByIdStatus getByIdStatus = GetByIdStatus::computeFor(
    28392839                m_inlineStackTop->m_profiledBlock, m_dfgCodeBlock,
     
    32093209            int scope = currentInstruction[2].u.operand;
    32103210            unsigned identifierNumber = m_inlineStackTop->m_identifierRemap[currentInstruction[3].u.operand];
    3211             StringImpl* uid = m_graph.identifiers()[identifierNumber];
     3211            AtomicStringImpl* uid = m_graph.identifiers()[identifierNumber];
    32123212            ResolveType resolveType = ResolveModeAndType(currentInstruction[4].u.operand).type();
    32133213
     
    32983298            unsigned value = currentInstruction[3].u.operand;
    32993299            ResolveType resolveType = ResolveModeAndType(currentInstruction[4].u.operand).type();
    3300             StringImpl* uid = m_graph.identifiers()[identifierNumber];
     3300            AtomicStringImpl* uid = m_graph.identifiers()[identifierNumber];
    33013301
    33023302            Structure* structure = 0;
     
    37103710
    37113711        for (size_t i = 0; i < codeBlock->numberOfIdentifiers(); ++i) {
    3712             StringImpl* rep = codeBlock->identifier(i).impl();
     3712            AtomicStringImpl* rep = codeBlock->identifier(i).impl();
    37133713            BorrowedIdentifierMap::AddResult result = byteCodeParser->m_identifierMap.add(rep, byteCodeParser->m_graph.identifiers().numberOfIdentifiers());
    37143714            if (result.isNewEntry)
  • trunk/Source/JavaScriptCore/dfg/DFGDesiredIdentifiers.cpp

    r167897 r176583  
    5353}
    5454
    55 void DesiredIdentifiers::addLazily(StringImpl* rep)
     55void DesiredIdentifiers::addLazily(AtomicStringImpl* rep)
    5656{
    5757    m_addedIdentifiers.append(rep);
    5858}
    5959
    60 StringImpl* DesiredIdentifiers::at(unsigned index) const
     60AtomicStringImpl* DesiredIdentifiers::at(unsigned index) const
    6161{
    62     StringImpl* result;
     62    AtomicStringImpl* result;
    6363    if (index < m_codeBlock->numberOfIdentifiers())
    6464        result = m_codeBlock->identifier(index).impl();
  • trunk/Source/JavaScriptCore/dfg/DFGDesiredIdentifiers.h

    r167897 r176583  
    4646   
    4747    unsigned numberOfIdentifiers();
    48     void addLazily(StringImpl*);
     48    void addLazily(AtomicStringImpl*);
    4949   
    50     StringImpl* at(unsigned index) const;
     50    AtomicStringImpl* at(unsigned index) const;
    5151   
    52     StringImpl* operator[](unsigned index) const { return at(index); }
     52    AtomicStringImpl* operator[](unsigned index) const { return at(index); }
    5353   
    5454    void reallyAdd(VM&, CommonData*);
     
    5656private:
    5757    CodeBlock* m_codeBlock;
    58     Vector<StringImpl*> m_addedIdentifiers;
     58    Vector<AtomicStringImpl*> m_addedIdentifiers;
    5959};
    6060
  • trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp

    r176109 r176583  
    14411441   
    14421442    bool isStringPrototypeMethodSane(
    1443         JSObject* stringPrototype, Structure* stringPrototypeStructure, StringImpl* uid)
     1443        JSObject* stringPrototype, Structure* stringPrototypeStructure, AtomicStringImpl* uid)
    14441444    {
    14451445        unsigned attributesUnused;
  • trunk/Source/JavaScriptCore/runtime/Identifier.h

    r173269 r176583  
    5454
    5555    const String& string() const { return m_string; }
    56     StringImpl* impl() const { return m_string.impl(); }
     56    AtomicStringImpl* impl() const { return static_cast<AtomicStringImpl*>(m_string.impl()); }
    5757
    5858    int length() const { return m_string.length(); }
  • trunk/Source/JavaScriptCore/runtime/IntendedStructureChain.cpp

    r173797 r176583  
    104104}
    105105
    106 bool IntendedStructureChain::mayInterceptStoreTo(StringImpl* uid)
     106bool IntendedStructureChain::mayInterceptStoreTo(AtomicStringImpl* uid)
    107107{
    108108    for (unsigned i = 0; i < m_vector.size(); ++i) {
  • trunk/Source/JavaScriptCore/runtime/IntendedStructureChain.h

    r173797 r176583  
    5050    bool isStillValid() const;
    5151    bool matches(StructureChain*) const;
    52     bool mayInterceptStoreTo(StringImpl* uid);
     52    bool mayInterceptStoreTo(AtomicStringImpl* uid);
    5353    bool isNormalized();
    5454   
  • trunk/Source/JavaScriptCore/runtime/PropertyMapHashTable.h

    r173799 r176583  
    3131#include <wtf/PassOwnPtr.h>
    3232#include <wtf/Vector.h>
    33 #include <wtf/text/StringImpl.h>
     33#include <wtf/text/AtomicStringImpl.h>
    3434
    3535
     
    3737#define DUMP_PROPERTYMAP_COLLISIONS 0
    3838
    39 #define PROPERTY_MAP_DELETED_ENTRY_KEY ((StringImpl*)1)
     39#define PROPERTY_MAP_DELETED_ENTRY_KEY ((AtomicStringImpl*)1)
    4040
    4141namespace JSC {
     
    133133    }
    134134
    135     typedef StringImpl* KeyType;
     135    typedef AtomicStringImpl* KeyType;
    136136    typedef PropertyMapEntry ValueType;
    137137
  • trunk/Source/JavaScriptCore/runtime/Structure.cpp

    r173993 r176583  
    6060#endif
    6161
    62 bool StructureTransitionTable::contains(StringImpl* rep, unsigned attributes) const
     62bool StructureTransitionTable::contains(AtomicStringImpl* rep, unsigned attributes) const
    6363{
    6464    if (isUsingSingleSlot()) {
     
    6969}
    7070
    71 inline Structure* StructureTransitionTable::get(StringImpl* rep, unsigned attributes) const
     71inline Structure* StructureTransitionTable::get(AtomicStringImpl* rep, unsigned attributes) const
    7272{
    7373    if (isUsingSingleSlot()) {
     
    316316}
    317317
    318 Structure* Structure::addPropertyTransitionToExistingStructureImpl(Structure* structure, StringImpl* uid, unsigned attributes, PropertyOffset& offset)
     318Structure* Structure::addPropertyTransitionToExistingStructureImpl(Structure* structure, AtomicStringImpl* uid, unsigned attributes, PropertyOffset& offset)
    319319{
    320320    ASSERT(!structure->isDictionary());
     
    336336}
    337337
    338 Structure* Structure::addPropertyTransitionToExistingStructureConcurrently(Structure* structure, StringImpl* uid, unsigned attributes, PropertyOffset& offset)
     338Structure* Structure::addPropertyTransitionToExistingStructureConcurrently(Structure* structure, AtomicStringImpl* uid, unsigned attributes, PropertyOffset& offset)
    339339{
    340340    ConcurrentJITLocker locker(structure->m_lock);
     
    851851}
    852852
    853 PropertyOffset Structure::getConcurrently(StringImpl* uid, unsigned& attributes)
     853PropertyOffset Structure::getConcurrently(AtomicStringImpl* uid, unsigned& attributes)
    854854{
    855855    PropertyOffset result = invalidOffset;
     
    891891        setHasNonEnumerableProperties(true);
    892892
    893     StringImpl* rep = propertyName.uid();
     893    AtomicStringImpl* rep = propertyName.uid();
    894894
    895895    if (!propertyTable())
     
    910910    checkConsistency();
    911911
    912     StringImpl* rep = propertyName.uid();
     912    AtomicStringImpl* rep = propertyName.uid();
    913913
    914914    if (!propertyTable())
  • trunk/Source/JavaScriptCore/runtime/Structure.h

    r173993 r176583  
    4949#include <wtf/PrintStream.h>
    5050#include <wtf/RefCounted.h>
    51 #include <wtf/text/StringImpl.h>
    52 
     51#include <wtf/text/AtomicStringImpl.h>
    5352
    5453namespace JSC {
     
    7574
    7675struct PropertyMapEntry {
    77     StringImpl* key;
     76    AtomicStringImpl* key;
    7877    PropertyOffset offset;
    7978    unsigned attributes;
     
    8685    }
    8786   
    88     PropertyMapEntry(StringImpl* key, PropertyOffset offset, unsigned attributes)
     87    PropertyMapEntry(AtomicStringImpl* key, PropertyOffset offset, unsigned attributes)
    8988        : key(key)
    9089        , offset(offset)
     
    134133
    135134    JS_EXPORT_PRIVATE static Structure* addPropertyTransition(VM&, Structure*, PropertyName, unsigned attributes, PropertyOffset&, PutPropertySlot::Context = PutPropertySlot::UnknownContext);
    136     static Structure* addPropertyTransitionToExistingStructureConcurrently(Structure*, StringImpl* uid, unsigned attributes, PropertyOffset&);
     135    static Structure* addPropertyTransitionToExistingStructureConcurrently(Structure*, AtomicStringImpl* uid, unsigned attributes, PropertyOffset&);
    137136    JS_EXPORT_PRIVATE static Structure* addPropertyTransitionToExistingStructure(Structure*, PropertyName, unsigned attributes, PropertyOffset&);
    138137    static Structure* removePropertyTransition(VM&, Structure*, PropertyName, PropertyOffset&);
     
    290289    void forEachPropertyConcurrently(const Functor&);
    291290   
    292     PropertyOffset getConcurrently(StringImpl* uid);
    293     PropertyOffset getConcurrently(StringImpl* uid, unsigned& attributes);
     291    PropertyOffset getConcurrently(AtomicStringImpl* uid);
     292    PropertyOffset getConcurrently(AtomicStringImpl* uid, unsigned& attributes);
    294293   
    295294    Vector<PropertyMapEntry> getPropertiesConcurrently();
     
    487486    static Structure* create(VM&, Structure*);
    488487   
    489     static Structure* addPropertyTransitionToExistingStructureImpl(Structure*, StringImpl* uid, unsigned attributes, PropertyOffset&);
     488    static Structure* addPropertyTransitionToExistingStructureImpl(Structure*, AtomicStringImpl* uid, unsigned attributes, PropertyOffset&);
    490489
    491490    // This will return the structure that has a usable property table, that property table,
     
    595594    WriteBarrier<JSCell> m_previousOrRareData;
    596595
    597     RefPtr<StringImpl> m_nameInPrevious;
     596    RefPtr<AtomicStringImpl> m_nameInPrevious;
    598597
    599598    const ClassInfo* m_classInfo;
  • trunk/Source/JavaScriptCore/runtime/StructureInlines.h

    r173799 r176583  
    134134}
    135135
    136 inline PropertyOffset Structure::getConcurrently(StringImpl* uid)
     136inline PropertyOffset Structure::getConcurrently(AtomicStringImpl* uid)
    137137{
    138138    unsigned attributesIgnored;
  • trunk/Source/JavaScriptCore/runtime/StructureTransitionTable.h

    r166292 r176583  
    3131#include <wtf/HashFunctions.h>
    3232#include <wtf/OwnPtr.h>
    33 #include <wtf/text/StringImpl.h>
     33#include <wtf/text/AtomicStringImpl.h>
    3434
    3535namespace JSC {
     
    9595   
    9696    struct Hash {
    97         typedef std::pair<StringImpl*, unsigned> Key;
     97        typedef std::pair<AtomicStringImpl*, unsigned> Key;
    9898       
    9999        static unsigned hash(const Key& p)
    100100        {
    101             return PtrHash<StringImpl*>::hash(p.first) + p.second;
     101            return PtrHash<AtomicStringImpl*>::hash(p.first) + p.second;
    102102        }
    103103
     
    132132
    133133    inline void add(VM&, Structure*);
    134     inline bool contains(StringImpl* rep, unsigned attributes) const;
    135     inline Structure* get(StringImpl* rep, unsigned attributes) const;
     134    inline bool contains(AtomicStringImpl* rep, unsigned attributes) const;
     135    inline Structure* get(AtomicStringImpl* rep, unsigned attributes) const;
    136136
    137137private:
Note: See TracChangeset for help on using the changeset viewer.