| Index: src/bootstrapper.cc | 
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc | 
| index ff4026ce6ba4dfada69e9f831470bd4a215c1bc6..c37ff4d8641b92d14af87c3c1668f6aad8aef327 100644 | 
| --- a/src/bootstrapper.cc | 
| +++ b/src/bootstrapper.cc | 
| @@ -1668,6 +1668,7 @@ EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_unicode) | 
| EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_unicode_regexps) | 
| EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_computed_property_names) | 
| EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_rest_parameters) | 
| +EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_reflect) | 
|  | 
|  | 
| void Genesis::InstallNativeFunctions_harmony_proxies() { | 
| @@ -1700,6 +1701,7 @@ EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy) | 
| EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_unicode) | 
| EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_computed_property_names) | 
| EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_rest_parameters) | 
| +EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_reflect) | 
|  | 
| void Genesis::InitializeGlobal_harmony_regexps() { | 
| Handle<JSObject> builtins(native_context()->builtins()); | 
| @@ -2090,6 +2092,36 @@ bool Genesis::InstallNatives() { | 
| *generator_object_prototype_map); | 
| } | 
|  | 
| +  // Install references to functions of the Reflect object | 
| +  { | 
| +    Handle<JSFunction> apply = | 
| +        InstallFunction(builtins, "ReflectApply", JS_OBJECT_TYPE, | 
| +                        JSObject::kHeaderSize, MaybeHandle<JSObject>(), | 
| +                        Builtins::kReflectApply); | 
| +    Handle<JSFunction> construct = | 
| +        InstallFunction(builtins, "ReflectConstruct", JS_OBJECT_TYPE, | 
| +                        JSObject::kHeaderSize, MaybeHandle<JSObject>(), | 
| +                        Builtins::kReflectConstruct); | 
| +    if (FLAG_vector_ics) { | 
| +      // Apply embeds an IC, so we need a type vector of size 1 in the shared | 
| +      // function info. | 
| +      FeedbackVectorSpec spec(0, 1); | 
| +      spec.SetKind(0, Code::CALL_IC); | 
| +      Handle<TypeFeedbackVector> feedback_vector = | 
| +          factory()->NewTypeFeedbackVector(spec); | 
| +      apply->shared()->set_feedback_vector(*feedback_vector); | 
| + | 
| +      feedback_vector = factory()->NewTypeFeedbackVector(spec); | 
| +      construct->shared()->set_feedback_vector(*feedback_vector); | 
| +    } | 
| + | 
| +    apply->shared()->set_internal_formal_parameter_count(3); | 
| +    apply->shared()->set_length(3); | 
| + | 
| +    construct->shared()->set_internal_formal_parameter_count(3); | 
| +    construct->shared()->set_length(2); | 
| +  } | 
| + | 
| if (FLAG_disable_native_files) { | 
| PrintF("Warning: Running without installed natives!\n"); | 
| return true; | 
| @@ -2290,6 +2322,8 @@ bool Genesis::InstallExperimentalNatives() { | 
| static const char* harmony_unicode_regexps_natives[] = {NULL}; | 
| static const char* harmony_computed_property_names_natives[] = {NULL}; | 
| static const char* harmony_rest_parameters_natives[] = {NULL}; | 
| +  static const char* harmony_reflect_natives[] = {"native harmony-reflect.js", | 
| +                                                  NULL}; | 
|  | 
| for (int i = ExperimentalNatives::GetDebuggerCount(); | 
| i < ExperimentalNatives::GetBuiltinsCount(); i++) { | 
| @@ -2887,6 +2921,19 @@ Genesis::Genesis(Isolate* isolate, | 
| isolate->counters()->contexts_created_from_scratch()->Increment(); | 
| } | 
|  | 
| +  if (FLAG_harmony_reflect) { | 
| +    // TODO(caitp): this should not be here, there's got to be a better way. | 
| +    // Shouldn't InitializeExperimentalGlobal() happen before | 
| +    // InitializeExperimentalNatives()? | 
| +    Handle<JSGlobalObject> global(JSGlobalObject::cast( | 
| +        native_context()->global_object())); | 
| +    Handle<String> reflect_string = | 
| +        factory()->NewStringFromStaticChars("Reflect"); | 
| +    Handle<Object> reflect = | 
| +        factory()->NewJSObject(isolate->object_function(), TENURED); | 
| +    JSObject::AddProperty(global, reflect_string, reflect, DONT_ENUM); | 
| +  } | 
| + | 
| // Install experimental natives. Do not include them into the snapshot as we | 
| // should be able to turn them off at runtime. Re-installing them after | 
| // they have already been deserialized would also fail. | 
|  |