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