SetIteratorPrototype.cpp [plain text]
#include "config.h"
#include "SetIteratorPrototype.h"
#include "JSCJSValueInlines.h"
#include "JSCellInlines.h"
#include "JSSetIterator.h"
#include "StructureInlines.h"
namespace JSC {
const ClassInfo SetIteratorPrototype::s_info = { "Set Iterator", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(SetIteratorPrototype) };
static EncodedJSValue JSC_HOST_CALL SetIteratorPrototypeFuncIterator(ExecState*);
static EncodedJSValue JSC_HOST_CALL SetIteratorPrototypeFuncNext(ExecState*);
void SetIteratorPrototype::finishCreation(VM& vm, JSGlobalObject* globalObject)
{
Base::finishCreation(vm);
ASSERT(inherits(info()));
vm.prototypeMap.addPrototype(this);
JSC_NATIVE_FUNCTION(vm.propertyNames->iteratorPrivateName, SetIteratorPrototypeFuncIterator, DontEnum, 0);
JSC_NATIVE_FUNCTION(vm.propertyNames->iteratorNextPrivateName, SetIteratorPrototypeFuncNext, DontEnum, 0);
}
EncodedJSValue JSC_HOST_CALL SetIteratorPrototypeFuncIterator(CallFrame* callFrame)
{
return JSValue::encode(callFrame->thisValue());
}
EncodedJSValue JSC_HOST_CALL SetIteratorPrototypeFuncNext(CallFrame* callFrame)
{
JSValue result;
JSSetIterator* iterator = jsDynamicCast<JSSetIterator*>(callFrame->thisValue());
if (!iterator)
return JSValue::encode(throwTypeError(callFrame, ASCIILiteral("Cannot call SetIterator.next() on a non-SetIterator object")));
if (iterator->next(callFrame, result))
return JSValue::encode(result);
iterator->finish();
return JSValue::encode(callFrame->vm().iterationTerminator.get());
}
}