diff options
| author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-05-24 08:28:08 +0000 |
|---|---|---|
| committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-05-24 08:28:08 +0000 |
| commit | a4e969f4965059196ca948db781e52f7cfebf19e (patch) | |
| tree | 6ca352808c8fdc52006a0f33f6ae3c593b23867d /Source/JavaScriptCore/runtime/JSMapIterator.h | |
| parent | 41386e9cb918eed93b3f13648cbef387e371e451 (diff) | |
| download | WebKitGtk-tarball-a4e969f4965059196ca948db781e52f7cfebf19e.tar.gz | |
webkitgtk-2.12.3webkitgtk-2.12.3
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSMapIterator.h')
| -rw-r--r-- | Source/JavaScriptCore/runtime/JSMapIterator.h | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/Source/JavaScriptCore/runtime/JSMapIterator.h b/Source/JavaScriptCore/runtime/JSMapIterator.h index 5fc965ebc..377d656c8 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 JSDestructibleObject { +class JSMapIterator : public JSNonFinalObject { public: - typedef JSDestructibleObject Base; + typedef JSNonFinalObject Base; DECLARE_EXPORT_INFO; @@ -57,16 +57,27 @@ public: bool next(CallFrame* callFrame, JSValue& value) { - if (!m_iterator.ensureSlot()) + WTF::KeyValuePair<JSValue, JSValue> pair; + if (!m_iterator.next(pair)) return false; if (m_kind == MapIterateValue) - value = m_iterator.value(); + value = pair.value; else if (m_kind == MapIterateKey) - value = m_iterator.key(); + value = pair.key; else - value = createPair(callFrame, m_iterator.key(), m_iterator.value()); - ++m_iterator; + 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; return true; } @@ -75,25 +86,32 @@ public: m_iterator.finish(); } -private: + MapIterationKind kind() const { return m_kind; } + JSValue iteratedValue() const { return m_map.get(); } + JSMapIterator* clone(ExecState*); - static const unsigned StructureFlags = Base::StructureFlags | OverridesVisitChildren; + JSMap::MapData::IteratorData* iteratorData() + { + return &m_iterator; + } +private: JSMapIterator(VM& vm, Structure* structure, JSMap* iteratedObject, MapIterationKind kind) : Base(vm, structure) - , m_iterator(iteratedObject->mapData()->begin()) + , m_iterator(iteratedObject->m_mapData.createIteratorData(this)) , m_kind(kind) { } - void finishCreation(VM&, JSMap*); + JS_EXPORT_PRIVATE void finishCreation(VM&, JSMap*); JSValue createPair(CallFrame*, JSValue, JSValue); static void visitChildren(JSCell*, SlotVisitor&); - WriteBarrier<MapData> m_iteratedObjectData; - MapData::const_iterator m_iterator; + WriteBarrier<JSMap> m_map; + JSMap::MapData::IteratorData m_iterator; MapIterationKind m_kind; }; +STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(JSMapIterator); } |
