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