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, 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);
}