JSPropertyNameIterator.h [plain text]
#ifndef JSPropertyNameIterator_h
#define JSPropertyNameIterator_h
#include "JSObject.h"
#include "JSPropertyNameEnumerator.h"
namespace JSC {
class JSPropertyNameIterator : public JSNonFinalObject {
public:
typedef JSNonFinalObject Base;
enum class EnumerationPhase : uint32_t {
IndexedNames,
StructureNames,
GenericNames,
Done
};
DECLARE_EXPORT_INFO;
static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
{
return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
}
static JSPropertyNameIterator* create(ExecState*, Structure*, JSObject*);
JSPropertyNameIterator* clone(ExecState*);
bool next(ExecState*, JSValue&);
JSValue iteratedValue() const { return m_iteratedObject.get(); }
static void visitChildren(JSCell*, SlotVisitor&);
private:
JSPropertyNameIterator(VM&, Structure*, JSObject*, JSPropertyNameEnumerator*);
void finishCreation(VM&, JSGlobalObject*);
static JSPropertyNameIterator* create(ExecState*, Structure*, JSObject*, JSPropertyNameEnumerator*);
WriteBarrier<JSObject> m_iteratedObject;
WriteBarrier<JSPropertyNameEnumerator> m_propertyNameEnumerator;
EnumerationPhase m_enumerationPhase;
uint32_t m_cursor;
};
}
#endif // JSPropertyNameIterator_h