diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/runtime/StructureTransitionTable.h | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/runtime/StructureTransitionTable.h')
-rw-r--r-- | Source/JavaScriptCore/runtime/StructureTransitionTable.h | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/Source/JavaScriptCore/runtime/StructureTransitionTable.h b/Source/JavaScriptCore/runtime/StructureTransitionTable.h index 17690a3da..d66202364 100644 --- a/Source/JavaScriptCore/runtime/StructureTransitionTable.h +++ b/Source/JavaScriptCore/runtime/StructureTransitionTable.h @@ -10,10 +10,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -29,7 +29,8 @@ #include "IndexingType.h" #include "WeakGCMap.h" #include <wtf/HashFunctions.h> -#include <wtf/text/UniquedStringImpl.h> +#include <wtf/OwnPtr.h> +#include <wtf/text/StringImpl.h> namespace JSC { @@ -78,7 +79,7 @@ inline IndexingType newIndexingType(IndexingType oldType, NonPropertyTransition ASSERT(!hasIndexedProperties(oldType) || hasUndecided(oldType) || hasInt32(oldType) || hasDouble(oldType) || hasContiguous(oldType) || hasContiguous(oldType)); return (oldType & ~IndexingShapeMask) | SlowPutArrayStorageShape; case SwitchToSlowPutArrayStorage: - ASSERT(hasArrayStorage(oldType)); + ASSERT(hasFastArrayStorage(oldType)); return (oldType & ~IndexingShapeMask) | SlowPutArrayStorageShape; case AddIndexedAccessors: return oldType | MayHaveIndexedAccessors; @@ -93,11 +94,11 @@ class StructureTransitionTable { struct Hash { - typedef std::pair<UniquedStringImpl*, unsigned> Key; + typedef std::pair<StringImpl*, unsigned> Key; static unsigned hash(const Key& p) { - return PtrHash<UniquedStringImpl*>::hash(p.first) + p.second; + return PtrHash<StringImpl*>::hash(p.first) + p.second; } static bool equal(const Key& a, const Key& b) @@ -129,13 +130,11 @@ public: WeakSet::deallocate(impl); } - void add(VM&, Structure*); - bool contains(UniquedStringImpl*, unsigned attributes) const; - Structure* get(UniquedStringImpl*, unsigned attributes) const; + inline void add(VM&, Structure*); + inline bool contains(StringImpl* rep, unsigned attributes) const; + inline Structure* get(StringImpl* rep, unsigned attributes) const; private: - friend class SingleSlotTransitionWeakOwner; - bool isUsingSingleSlot() const { return m_data & UsingSingleSlotFlag; @@ -166,8 +165,24 @@ private: ASSERT(!isUsingSingleSlot()); } - Structure* singleTransition() const; - void setSingleTransition(Structure*); + Structure* singleTransition() const + { + ASSERT(isUsingSingleSlot()); + if (WeakImpl* impl = this->weakImpl()) { + if (impl->state() == WeakImpl::Live) + return reinterpret_cast<Structure*>(impl->jsValue().asCell()); + } + return 0; + } + + void setSingleTransition(VM&, Structure* structure) + { + ASSERT(isUsingSingleSlot()); + if (WeakImpl* impl = this->weakImpl()) + WeakSet::deallocate(impl); + WeakImpl* impl = WeakSet::allocate(reinterpret_cast<JSCell*>(structure)); + m_data = reinterpret_cast<intptr_t>(impl) | UsingSingleSlotFlag; + } intptr_t m_data; }; |