Index: src/bootstrapper.cc |
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
index da25d060ff14446258a2760ec2dc8b9dc2379130..95e18098b19e89def682e8f51cd6fd63763c8166 100644 |
--- a/src/bootstrapper.cc |
+++ b/src/bootstrapper.cc |
@@ -217,6 +217,8 @@ class Genesis BASE_EMBEDDED { |
HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) |
#undef DECLARE_FEATURE_INITIALIZATION |
+ void InitializeGlobal_enable_fast_array_builtins(); |
+ |
Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target, |
const char* name, Builtins::Name call, |
BuiltinFunctionId id); |
@@ -2911,6 +2913,8 @@ void Genesis::InitializeExperimentalGlobal() { |
HARMONY_STAGED(FEATURE_INITIALIZE_GLOBAL) |
HARMONY_SHIPPING(FEATURE_INITIALIZE_GLOBAL) |
#undef FEATURE_INITIALIZE_GLOBAL |
+ |
+ InitializeGlobal_enable_fast_array_builtins(); |
} |
@@ -3540,6 +3544,22 @@ 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; |
+ |
+ Handle<JSGlobalObject> global(native_context()->global_object()); |
+ Isolate* isolate = global->GetIsolate(); |
+ Factory* factory = isolate->factory(); |
+ |
+ Handle<JSObject> utils = |
+ Handle<JSObject>::cast(isolate->natives_utils_object()); |
Yang
2017/02/03 10:20:25
Alternatively, you could just get global.Array.pro
danno
2017/02/03 12:46:55
Done.
|
+ LookupIterator it(utils, |
+ factory->NewStringFromAsciiChecked("ForEachFunction"), |
+ LookupIterator::OWN_SKIP_INTERCEPTOR); |
+ Handle<Object> for_each_function = Object::GetProperty(&it).ToHandleChecked(); |
+ Handle<JSFunction>::cast(for_each_function) |
+ ->set_code(isolate->builtins()->builtin(Builtins::kArrayForEach)); |
+} |
void Genesis::InitializeGlobal_harmony_sharedarraybuffer() { |
if (!FLAG_harmony_sharedarraybuffer) return; |