summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/runtime/JSMapIterator.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/runtime/JSMapIterator.h
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-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.h46
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);
}