diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSSet.h')
| -rw-r--r-- | Source/JavaScriptCore/runtime/JSSet.h | 73 |
1 files changed, 62 insertions, 11 deletions
diff --git a/Source/JavaScriptCore/runtime/JSSet.h b/Source/JavaScriptCore/runtime/JSSet.h index 22c5d860b..c4d4b385e 100644 --- a/Source/JavaScriptCore/runtime/JSSet.h +++ b/Source/JavaScriptCore/runtime/JSSet.h @@ -26,15 +26,63 @@ #ifndef JSSet_h #define JSSet_h +#include "JSDestructibleObject.h" #include "JSObject.h" +#include "MapData.h" namespace JSC { -class MapData; +class JSSetIterator; -class JSSet : public JSNonFinalObject { +class JSSet : public JSDestructibleObject { public: - typedef JSNonFinalObject Base; + typedef JSDestructibleObject Base; + + friend class JSSetIterator; + + // Our marking functions expect Entry to maintain this layout, and have all + // fields be WriteBarrier<Unknown> + class Entry { + private: + WriteBarrier<Unknown> m_key; + + public: + const WriteBarrier<Unknown>& key() const + { + return m_key; + } + + const WriteBarrier<Unknown>& value() const + { + return m_key; + } + + void visitChildren(SlotVisitor& visitor) + { + visitor.append(&m_key); + } + + void setKey(VM& vm, const JSCell* owner, JSValue key) + { + m_key.set(vm, owner, key); + } + + void setKeyWithoutWriteBarrier(JSValue key) + { + m_key.setWithoutWriteBarrier(key); + } + + void setValue(VM&, const JSCell*, JSValue) + { + } + + void clear() + { + m_key.clear(); + } + }; + + typedef MapDataImpl<Entry, JSSetIterator> SetData; DECLARE_EXPORT_INFO; @@ -55,22 +103,25 @@ public: return create(exec->vm(), structure); } - MapData* mapData() { return m_mapData.get(); } + bool has(ExecState*, JSValue); + size_t size(ExecState*); + JS_EXPORT_PRIVATE void add(ExecState*, JSValue); + void clear(ExecState*); + bool remove(ExecState*, JSValue); private: - - static const unsigned StructureFlags = OverridesVisitChildren | Base::StructureFlags; - JSSet(VM& vm, Structure* structure) : Base(vm, structure) + , m_setData(vm, this) { } - JS_EXPORT_PRIVATE void finishCreation(VM&); - + static void destroy(JSCell*); + static size_t estimatedSize(JSCell*); static void visitChildren(JSCell*, SlotVisitor&); - - WriteBarrier<MapData> m_mapData; + static void copyBackingStore(JSCell*, CopyVisitor&, CopyToken); + + SetData m_setData; }; } |
