diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSSetIterator.h')
| -rw-r--r-- | Source/JavaScriptCore/runtime/JSSetIterator.h | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/Source/JavaScriptCore/runtime/JSSetIterator.h b/Source/JavaScriptCore/runtime/JSSetIterator.h index b9121de75..edf3bfbf9 100644 --- a/Source/JavaScriptCore/runtime/JSSetIterator.h +++ b/Source/JavaScriptCore/runtime/JSSetIterator.h @@ -26,7 +26,7 @@ #ifndef JSSetIterator_h #define JSSetIterator_h -#include "JSObject.h" +#include "JSDestructibleObject.h" #include "JSSet.h" #include "MapData.h" @@ -38,9 +38,9 @@ enum SetIterationKind : uint32_t { SetIterateKeyValue, }; -class JSSetIterator : public JSNonFinalObject { +class JSSetIterator : public JSDestructibleObject { public: - typedef JSNonFinalObject Base; + typedef JSDestructibleObject Base; DECLARE_EXPORT_INFO; @@ -58,13 +58,13 @@ 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 == SetIterateValue || m_kind == SetIterateKey) - value = pair.key; + value = m_iterator.key(); else - value = createPair(callFrame, pair.key, pair.key); + value = createPair(callFrame, m_iterator.key(), m_iterator.key()); + ++m_iterator; return true; } @@ -73,32 +73,25 @@ public: m_iterator.finish(); } - SetIterationKind kind() const { return m_kind; } - JSValue iteratedValue() const { return m_set.get(); } - JSSetIterator* clone(ExecState*); +private: - JSSet::SetData::IteratorData* iteratorData() - { - return &m_iterator; - } + static const unsigned StructureFlags = Base::StructureFlags | OverridesVisitChildren; -private: JSSetIterator(VM& vm, Structure* structure, JSSet* iteratedObject, SetIterationKind kind) : Base(vm, structure) - , m_iterator(iteratedObject->m_setData.createIteratorData(this)) + , m_iterator(iteratedObject->mapData()->begin()) , m_kind(kind) { } - JS_EXPORT_PRIVATE void finishCreation(VM&, JSSet*); - JS_EXPORT_PRIVATE JSValue createPair(CallFrame*, JSValue, JSValue); + void finishCreation(VM&, JSSet*); + JSValue createPair(CallFrame*, JSValue, JSValue); static void visitChildren(JSCell*, SlotVisitor&); - WriteBarrier<JSSet> m_set; - JSSet::SetData::IteratorData m_iterator; + WriteBarrier<MapData> m_iteratedObjectData; + MapData::const_iterator m_iterator; SetIterationKind m_kind; }; -STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(JSSetIterator); } |
