Index: src/bootstrapper.cc |
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
index 87a6ba519233bd1c08089f55e0fb4bb0061daba7..d1dff7f14054355e710dc5f581a0eb9c63be0950 100644 |
--- a/src/bootstrapper.cc |
+++ b/src/bootstrapper.cc |
@@ -513,6 +513,15 @@ void InstallConstant(Isolate* isolate, Handle<JSObject> holder, |
static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); |
} |
+void InstallSpeciesGetter(Handle<JSFunction> constructor) { |
+ Factory* factory = constructor->GetIsolate()->factory(); |
+ // TODO(adamk): We should be able to share a SharedFunctionInfo |
+ // between all these JSFunctins. |
+ SimpleInstallGetter(constructor, factory->symbol_species_string(), |
+ factory->species_symbol(), Builtins::kReturnReceiver, |
+ true); |
+} |
+ |
} // namespace |
Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { |
@@ -1310,6 +1319,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
InstallWithIntrinsicDefaultProto(isolate, array_function, |
Context::ARRAY_FUNCTION_INDEX); |
+ InstallSpeciesGetter(array_function); |
// Cache the array maps, needed by ArrayConstructorStub |
CacheInitialJSArrayMaps(native_context(), initial_map); |
@@ -1884,9 +1894,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
InstallWithIntrinsicDefaultProto(isolate, promise_catch, |
Context::PROMISE_CATCH_INDEX); |
- SimpleInstallGetter(promise_fun, factory->symbol_species_string(), |
- factory->species_symbol(), Builtins::kReturnReceiver, |
- true); |
+ InstallSpeciesGetter(promise_fun); |
SimpleInstallFunction(promise_fun, "resolve", Builtins::kPromiseResolve, 1, |
true, DONT_ENUM); |
@@ -2072,9 +2080,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
{ |
// RegExp getters and setters. |
- SimpleInstallGetter(regexp_fun, factory->symbol_species_string(), |
- factory->species_symbol(), Builtins::kReturnReceiver, |
- true); |
+ InstallSpeciesGetter(regexp_fun); |
// Static properties set by a successful match. |
@@ -2399,6 +2405,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
BuiltinFunctionId::kArrayBufferByteLength); |
InstallWithIntrinsicDefaultProto(isolate, array_buffer_fun, |
Context::ARRAY_BUFFER_FUN_INDEX); |
+ InstallSpeciesGetter(array_buffer_fun); |
} |
{ // -- T y p e d A r r a y |
@@ -2410,6 +2417,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
CreateFunction(isolate, factory->InternalizeUtf8String("TypedArray"), |
JS_TYPED_ARRAY_TYPE, JSTypedArray::kSize, prototype, |
Builtins::kIllegal); |
+ InstallSpeciesGetter(typed_array_fun); |
// Install the "constructor" property on the {prototype}. |
JSObject::AddProperty(prototype, factory->constructor_string(), |
@@ -2537,6 +2545,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
isolate->initial_object_prototype(), Builtins::kIllegal); |
InstallWithIntrinsicDefaultProto(isolate, js_map_fun, |
Context::JS_MAP_FUN_INDEX); |
+ InstallSpeciesGetter(js_map_fun); |
} |
{ // -- S e t |
@@ -2545,6 +2554,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
isolate->initial_object_prototype(), Builtins::kIllegal); |
InstallWithIntrinsicDefaultProto(isolate, js_set_fun, |
Context::JS_SET_FUN_INDEX); |
+ InstallSpeciesGetter(js_set_fun); |
} |
{ // -- J S M o d u l e N a m e s p a c e |