| 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()); | 
|  |