Index: src/bootstrapper.cc |
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
index b31677caef810f7d15583145288c3e9009d7158b..2ae03256df22d6650e76ed19c565e1d822511e29 100644 |
--- a/src/bootstrapper.cc |
+++ b/src/bootstrapper.cc |
@@ -216,6 +216,8 @@ class Genesis BASE_EMBEDDED { |
HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) |
#undef DECLARE_FEATURE_INITIALIZATION |
+ void InstallOneBuiltinFunction(const char* object, const char* method, |
+ Builtins::Name name); |
void InitializeGlobal_enable_fast_array_builtins(); |
Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target, |
@@ -3664,63 +3666,39 @@ void InstallPublicSymbol(Factory* factory, Handle<Context> native_context, |
JSObject::AddProperty(symbol, name_string, value, attributes); |
} |
-void Genesis::InitializeGlobal_enable_fast_array_builtins() { |
- if (!FLAG_enable_fast_array_builtins) return; |
- |
+void Genesis::InstallOneBuiltinFunction(const char* object_name, |
+ const char* method_name, |
+ Builtins::Name builtin_name) { |
Handle<JSGlobalObject> global(native_context()->global_object()); |
Isolate* isolate = global->GetIsolate(); |
Factory* factory = isolate->factory(); |
- LookupIterator it1(global, factory->NewStringFromAsciiChecked("Array"), |
+ LookupIterator it1(global, factory->NewStringFromAsciiChecked(object_name), |
LookupIterator::OWN_SKIP_INTERCEPTOR); |
- Handle<Object> array_object = Object::GetProperty(&it1).ToHandleChecked(); |
- LookupIterator it2(array_object, |
- factory->NewStringFromAsciiChecked("prototype"), |
+ Handle<Object> object = Object::GetProperty(&it1).ToHandleChecked(); |
+ LookupIterator it2(object, factory->NewStringFromAsciiChecked("prototype"), |
LookupIterator::OWN_SKIP_INTERCEPTOR); |
- Handle<Object> array_prototype = Object::GetProperty(&it2).ToHandleChecked(); |
+ Handle<Object> prototype = Object::GetProperty(&it2).ToHandleChecked(); |
- LookupIterator it3(array_prototype, |
- factory->NewStringFromAsciiChecked("forEach"), |
- LookupIterator::OWN_SKIP_INTERCEPTOR); |
- Handle<Object> for_each_function = |
- Object::GetProperty(&it3).ToHandleChecked(); |
- Handle<JSFunction>::cast(for_each_function) |
- ->set_code(isolate->builtins()->builtin(Builtins::kArrayForEach)); |
- Handle<JSFunction>::cast(for_each_function) |
- ->shared() |
- ->set_code(isolate->builtins()->builtin(Builtins::kArrayForEach)); |
- |
- LookupIterator it4(array_prototype, |
- factory->NewStringFromAsciiChecked("every"), |
- LookupIterator::OWN_SKIP_INTERCEPTOR); |
- Handle<Object> every_function = Object::GetProperty(&it4).ToHandleChecked(); |
- Handle<JSFunction>::cast(every_function) |
- ->set_code(isolate->builtins()->builtin(Builtins::kArrayEvery)); |
- Handle<JSFunction>::cast(every_function) |
- ->shared() |
- ->set_code(isolate->builtins()->builtin(Builtins::kArrayEvery)); |
- |
- LookupIterator it5(array_prototype, |
- factory->NewStringFromAsciiChecked("some"), |
+ LookupIterator it3(prototype, factory->NewStringFromAsciiChecked(method_name), |
LookupIterator::OWN_SKIP_INTERCEPTOR); |
- Handle<Object> some_function = Object::GetProperty(&it5).ToHandleChecked(); |
- Handle<JSFunction>::cast(some_function) |
- ->set_code(isolate->builtins()->builtin(Builtins::kArraySome)); |
- Handle<JSFunction>::cast(some_function) |
- ->shared() |
- ->set_code(isolate->builtins()->builtin(Builtins::kArraySome)); |
+ Handle<Object> function = Object::GetProperty(&it3).ToHandleChecked(); |
+ Handle<JSFunction>::cast(function)->set_code( |
+ isolate->builtins()->builtin(builtin_name)); |
+ Handle<JSFunction>::cast(function)->shared()->set_code( |
+ isolate->builtins()->builtin(builtin_name)); |
+} |
+ |
+void Genesis::InitializeGlobal_enable_fast_array_builtins() { |
+ if (!FLAG_enable_fast_array_builtins) return; |
+ |
+ InstallOneBuiltinFunction("Array", "forEach", Builtins::kArrayForEach); |
+ InstallOneBuiltinFunction("Array", "every", Builtins::kArrayEvery); |
+ InstallOneBuiltinFunction("Array", "some", Builtins::kArraySome); |
+ InstallOneBuiltinFunction("Array", "reduce", Builtins::kArrayReduce); |
if (FLAG_experimental_array_builtins) { |
- LookupIterator it6(array_prototype, |
- factory->NewStringFromAsciiChecked("filter"), |
- LookupIterator::OWN_SKIP_INTERCEPTOR); |
- Handle<Object> filter_function = |
- Object::GetProperty(&it6).ToHandleChecked(); |
- Handle<JSFunction>::cast(filter_function) |
- ->set_code(isolate->builtins()->builtin(Builtins::kArrayFilter)); |
- Handle<JSFunction>::cast(filter_function) |
- ->shared() |
- ->set_code(isolate->builtins()->builtin(Builtins::kArrayFilter)); |
+ InstallOneBuiltinFunction("Array", "filter", Builtins::kArrayFilter); |
} |
} |