| Index: src/bootstrapper.cc
 | 
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
 | 
| index 7ee75b2cab0d01cc731308ae8f002333d35d7050..d9e5e3bbb3dd3de9fc2696d7ac16131c0da39f42 100644
 | 
| --- a/src/bootstrapper.cc
 | 
| +++ b/src/bootstrapper.cc
 | 
| @@ -1521,9 +1521,13 @@ bool Bootstrapper::CompileBuiltin(Isolate* isolate, int index) {
 | 
|    Vector<const char> name = Natives::GetScriptName(index);
 | 
|    Handle<String> source_code =
 | 
|        isolate->bootstrapper()->SourceLookup<Natives>(index);
 | 
| +
 | 
| +  // We pass in extras_utils so that builtin code can set it up for later use
 | 
| +  // by actual extras code, compiled with CompileExtraBuiltin.
 | 
|    Handle<Object> global = isolate->global_object();
 | 
|    Handle<Object> utils = isolate->natives_utils_object();
 | 
| -  Handle<Object> args[] = {global, utils};
 | 
| +  Handle<Object> extras_utils = isolate->extras_utils_object();
 | 
| +  Handle<Object> args[] = {global, utils, extras_utils};
 | 
|  
 | 
|    return Bootstrapper::CompileNative(
 | 
|        isolate, name, Handle<JSObject>(isolate->native_context()->builtins()),
 | 
| @@ -1552,7 +1556,8 @@ bool Bootstrapper::CompileExtraBuiltin(Isolate* isolate, int index) {
 | 
|        isolate->bootstrapper()->SourceLookup<ExtraNatives>(index);
 | 
|    Handle<Object> global = isolate->global_object();
 | 
|    Handle<Object> binding = isolate->extras_binding_object();
 | 
| -  Handle<Object> args[] = {global, binding};
 | 
| +  Handle<Object> extras_utils = isolate->extras_utils_object();
 | 
| +  Handle<Object> args[] = {global, binding, extras_utils};
 | 
|    return Bootstrapper::CompileNative(
 | 
|        isolate, name, Handle<JSObject>(isolate->native_context()->builtins()),
 | 
|        source_code, arraysize(args), args);
 | 
| @@ -1567,7 +1572,8 @@ bool Bootstrapper::CompileExperimentalExtraBuiltin(Isolate* isolate,
 | 
|        isolate->bootstrapper()->SourceLookup<ExperimentalExtraNatives>(index);
 | 
|    Handle<Object> global = isolate->global_object();
 | 
|    Handle<Object> binding = isolate->extras_binding_object();
 | 
| -  Handle<Object> args[] = {global, binding};
 | 
| +  Handle<Object> extras_utils = isolate->extras_utils_object();
 | 
| +  Handle<Object> args[] = {global, binding, extras_utils};
 | 
|    return Bootstrapper::CompileNative(
 | 
|        isolate, name, Handle<JSObject>(isolate->native_context()->builtins()),
 | 
|        source_code, arraysize(args), args);
 | 
| @@ -2007,6 +2013,14 @@ bool Genesis::InstallNatives(ContextType context_type) {
 | 
|                                  "utils container for native scripts");
 | 
|    native_context()->set_natives_utils_object(*utils);
 | 
|  
 | 
| +  // Set up the extras utils object as a shared container between native
 | 
| +  // scripts and extras. (Extras consume things added there by native scripts.)
 | 
| +  Handle<JSObject> extras_utils =
 | 
| +      factory()->NewJSObject(isolate()->object_function());
 | 
| +  native_context()->set_extras_utils_object(*extras_utils);
 | 
| +
 | 
| +  InstallInternalArray(extras_utils, "InternalPackedArray", FAST_ELEMENTS);
 | 
| +
 | 
|    int builtin_index = Natives::GetDebuggerCount();
 | 
|    // Only run prologue.js and runtime.js at this point.
 | 
|    DCHECK_EQ(builtin_index, Natives::GetIndex("prologue"));
 | 
| @@ -2564,8 +2578,6 @@ bool Genesis::InstallExtraNatives() {
 | 
|  
 | 
|    Handle<JSObject> extras_binding =
 | 
|        factory()->NewJSObject(isolate()->object_function());
 | 
| -  JSObject::NormalizeProperties(extras_binding, CLEAR_INOBJECT_PROPERTIES, 2,
 | 
| -                                "container for binding to/from extra natives");
 | 
|    native_context()->set_extras_binding_object(*extras_binding);
 | 
|  
 | 
|    for (int i = ExtraNatives::GetDebuggerCount();
 | 
| 
 |