JSStringIterator.cpp [plain text]
#include "config.h"
#include "JSStringIterator.h"
#include "BuiltinNames.h"
#include "JSCInlines.h"
namespace JSC {
const ClassInfo JSStringIterator::s_info = { "String Iterator", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSStringIterator) };
void JSStringIterator::finishCreation(VM& vm, JSGlobalObject*, JSString* iteratedString)
{
Base::finishCreation(vm);
ASSERT(inherits(vm, info()));
putDirect(vm, vm.propertyNames->builtinNames().iteratedStringPrivateName(), iteratedString);
putDirect(vm, vm.propertyNames->builtinNames().stringIteratorNextIndexPrivateName(), jsNumber(0));
}
JSValue JSStringIterator::iteratedValue(ExecState* exec) const
{
return getDirect(exec->vm(), exec->vm().propertyNames->builtinNames().iteratedStringPrivateName());
}
JSStringIterator* JSStringIterator::clone(ExecState* exec)
{
VM& vm = exec->vm();
JSValue iteratedString = getDirect(vm, vm.propertyNames->builtinNames().iteratedStringPrivateName());
JSValue nextIndex = getDirect(vm, vm.propertyNames->builtinNames().stringIteratorNextIndexPrivateName());
auto clone = JSStringIterator::create(exec, exec->jsCallee()->globalObject(vm)->stringIteratorStructure(), asString(iteratedString));
clone->putDirect(vm, vm.propertyNames->builtinNames().stringIteratorNextIndexPrivateName(), nextIndex);
return clone;
}
}