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/JSMapIterator.h | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSMapIterator.h')
-rw-r--r-- | Source/JavaScriptCore/runtime/JSMapIterator.h | 46 |
1 files changed, 14 insertions, 32 deletions
diff --git a/Source/JavaScriptCore/runtime/JSMapIterator.h b/Source/JavaScriptCore/runtime/JSMapIterator.h index 377d656c8..5fc965ebc 100644 --- a/Source/JavaScriptCore/runtime/JSMapIterator.h +++ b/Source/JavaScriptCore/runtime/JSMapIterator.h @@ -26,8 +26,8 @@ #ifndef JSMapIterator_h #define JSMapIterator_h +#include "JSDestructibleObject.h" #include "JSMap.h" -#include "JSObject.h" #include "MapData.h" namespace JSC { @@ -37,9 +37,9 @@ enum MapIterationKind : uint32_t { MapIterateKeyValue, }; -class JSMapIterator : public JSNonFinalObject { +class JSMapIterator : public JSDestructibleObject { public: - typedef JSNonFinalObject Base; + typedef JSDestructibleObject Base; DECLARE_EXPORT_INFO; @@ -57,27 +57,16 @@ public: bool next(CallFrame* callFrame, JSValue& value) { - WTF::KeyValuePair<JSValue, JSValue> pair; - if (!m_iterator.next(pair)) + if (!m_iterator.ensureSlot()) return false; if (m_kind == MapIterateValue) - value = pair.value; + value = m_iterator.value(); else if (m_kind == MapIterateKey) - value = pair.key; + value = m_iterator.key(); else - value = createPair(callFrame, pair.key, pair.value); - return true; - } - - bool nextKeyValue(JSValue& key, JSValue& value) - { - WTF::KeyValuePair<JSValue, JSValue> pair; - if (!m_iterator.next(pair)) - return false; - - key = pair.key; - value = pair.value; + value = createPair(callFrame, m_iterator.key(), m_iterator.value()); + ++m_iterator; return true; } @@ -86,32 +75,25 @@ public: m_iterator.finish(); } - MapIterationKind kind() const { return m_kind; } - JSValue iteratedValue() const { return m_map.get(); } - JSMapIterator* clone(ExecState*); +private: - JSMap::MapData::IteratorData* iteratorData() - { - return &m_iterator; - } + static const unsigned StructureFlags = Base::StructureFlags | OverridesVisitChildren; -private: JSMapIterator(VM& vm, Structure* structure, JSMap* iteratedObject, MapIterationKind kind) : Base(vm, structure) - , m_iterator(iteratedObject->m_mapData.createIteratorData(this)) + , m_iterator(iteratedObject->mapData()->begin()) , m_kind(kind) { } - JS_EXPORT_PRIVATE void finishCreation(VM&, JSMap*); + void finishCreation(VM&, JSMap*); JSValue createPair(CallFrame*, JSValue, JSValue); static void visitChildren(JSCell*, SlotVisitor&); - WriteBarrier<JSMap> m_map; - JSMap::MapData::IteratorData m_iterator; + WriteBarrier<MapData> m_iteratedObjectData; + MapData::const_iterator m_iterator; MapIterationKind m_kind; }; -STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(JSMapIterator); } |