| Index: src/bootstrapper.cc
|
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
|
| index e5745e400a5f0bf8f51e2ce46ee85b47abf01e07..42a064c823aee39503716702bc1d4c0dd6886adc 100644
|
| --- a/src/bootstrapper.cc
|
| +++ b/src/bootstrapper.cc
|
| @@ -660,6 +660,16 @@ void Genesis::CreateIteratorMaps(Handle<JSFunction> empty) {
|
| // Create iterator-related meta-objects.
|
| Handle<JSObject> iterator_prototype =
|
| factory()->NewJSObject(isolate()->object_function(), TENURED);
|
| +
|
| + Handle<JSFunction> iterator_prototype_iterator = SimpleCreateFunction(
|
| + isolate(), factory()->NewStringFromAsciiChecked("[Symbol.iterator]"),
|
| + Builtins::kIteratorPrototypeIterator, 0, false);
|
| + iterator_prototype_iterator->shared()->set_native(true);
|
| +
|
| + JSObject::AddProperty(iterator_prototype, factory()->iterator_symbol(),
|
| + iterator_prototype_iterator, DONT_ENUM);
|
| + native_context()->set_initial_iterator_prototype(*iterator_prototype);
|
| +
|
| Handle<JSObject> generator_object_prototype =
|
| factory()->NewJSObject(isolate()->object_function(), TENURED);
|
| native_context()->set_initial_generator_prototype(
|
| @@ -1408,6 +1418,38 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
|
| Builtins::kStringPrototypeTrimRight, 0, false);
|
| SimpleInstallFunction(prototype, "valueOf",
|
| Builtins::kStringPrototypeValueOf, 0, true);
|
| +
|
| + Handle<JSFunction> iterator = SimpleCreateFunction(
|
| + isolate, factory->NewStringFromAsciiChecked("[Symbol.iterator]"),
|
| + Builtins::kStringPrototypeIterator, 0, true);
|
| + iterator->shared()->set_native(true);
|
| + JSObject::AddProperty(prototype, factory->iterator_symbol(), iterator,
|
| + static_cast<PropertyAttributes>(DONT_ENUM));
|
| + }
|
| +
|
| + { // --- S t r i n g I t e r a t o r ---
|
| + Handle<JSObject> iterator_prototype(
|
| + native_context()->initial_iterator_prototype());
|
| +
|
| + Handle<JSObject> string_iterator_prototype =
|
| + factory->NewJSObject(isolate->object_function(), TENURED);
|
| + JSObject::ForceSetPrototype(string_iterator_prototype, iterator_prototype);
|
| +
|
| + JSObject::AddProperty(
|
| + string_iterator_prototype, factory->to_string_tag_symbol(),
|
| + factory->NewStringFromAsciiChecked("String Iterator"),
|
| + static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
|
| +
|
| + InstallFunction(string_iterator_prototype, "next", JS_OBJECT_TYPE,
|
| + JSObject::kHeaderSize, MaybeHandle<JSObject>(),
|
| + Builtins::kStringIteratorPrototypeNext);
|
| +
|
| + Handle<JSFunction> string_iterator_function = CreateFunction(
|
| + isolate, factory->NewStringFromAsciiChecked("StringIterator"),
|
| + JS_STRING_ITERATOR_TYPE, JSStringIterator::kSize,
|
| + string_iterator_prototype, Builtins::kIllegal);
|
| + native_context()->set_string_iterator_map(
|
| + string_iterator_function->initial_map());
|
| }
|
|
|
| {
|
| @@ -2468,17 +2510,12 @@ void Bootstrapper::ExportFromRuntime(Isolate* isolate,
|
| native_context->set_object_to_string(*to_string);
|
| }
|
|
|
| - Handle<JSObject> iterator_prototype;
|
| -
|
| - {
|
| - PrototypeIterator iter(native_context->generator_object_prototype_map());
|
| - iter.Advance(); // Advance to the prototype of generator_object_prototype.
|
| - iterator_prototype = Handle<JSObject>(iter.GetCurrent<JSObject>());
|
| + Handle<JSObject> iterator_prototype(
|
| + native_context->initial_iterator_prototype());
|
|
|
| - JSObject::AddProperty(container,
|
| - factory->InternalizeUtf8String("IteratorPrototype"),
|
| - iterator_prototype, NONE);
|
| - }
|
| + JSObject::AddProperty(container,
|
| + factory->InternalizeUtf8String("IteratorPrototype"),
|
| + iterator_prototype, NONE);
|
|
|
| {
|
| PrototypeIterator iter(native_context->sloppy_generator_function_map());
|
|
|