Chromium Code Reviews| Index: src/bootstrapper.cc |
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
| index 13b197d2a8cb5adb85e6c6c766e24c5659e1481a..081f5f4be93b1a7ecea3280349134c129a8994d5 100644 |
| --- a/src/bootstrapper.cc |
| +++ b/src/bootstrapper.cc |
| @@ -1605,6 +1605,17 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
| } |
| { // -- T y p e d A r r a y s |
| + // Create the %TypedArrayPrototype% |
| + Handle<JSObject> typed_array_prototype = |
| + factory->NewJSObject(isolate->object_function(), TENURED); |
| + native_context()->set_typed_array_prototype(*typed_array_prototype); |
| + |
| + Handle<JSFunction> typed_array_fun = InstallFunction( |
| + global, "TypedArray", JS_OBJECT_TYPE, JSObject::kHeaderSize, |
|
adamk
2016/05/04 18:44:36
I don't think you want to install this on the glob
gsathya
2016/05/05 21:16:06
Makes sense. But, I still need to create this JSFu
|
| + typed_array_prototype, Builtins::kIllegal); |
| + InstallWithIntrinsicDefaultProto(isolate, typed_array_fun, |
| + Context::TYPED_ARRAY_FUN_INDEX); |
| + |
| #define INSTALL_TYPED_ARRAY(Type, type, TYPE, ctype, size) \ |
| { \ |
| Handle<JSFunction> fun; \ |
| @@ -1927,9 +1938,17 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
| void Genesis::InstallTypedArray(const char* name, ElementsKind elements_kind, |
| Handle<JSFunction>* fun) { |
| Handle<JSObject> global = Handle<JSObject>(native_context()->global_object()); |
| - Handle<JSFunction> result = InstallFunction( |
| - global, name, JS_TYPED_ARRAY_TYPE, JSTypedArray::kSize, |
| - isolate()->initial_object_prototype(), Builtins::kIllegal); |
| + |
| + Handle<JSObject> typed_array_prototype = |
| + Handle<JSObject>(native_context()->typed_array_prototype()); |
|
adamk
2016/05/04 18:44:36
You can use the shorter "isolate()->typed_array_pr
gsathya
2016/05/05 21:16:06
Done.
|
| + Handle<JSFunction> typed_array_function = |
| + Handle<JSFunction>(native_context()->typed_array_function()); |
|
adamk
2016/05/04 18:44:36
Same here, isolate()->typed_array_function().
gsathya
2016/05/05 21:16:06
Done.
|
| + |
| + Handle<JSObject> prototype = |
| + factory()->NewJSObject(isolate()->object_function(), TENURED); |
| + Handle<JSFunction> result = |
| + InstallFunction(global, name, JS_TYPED_ARRAY_TYPE, JSTypedArray::kSize, |
| + prototype, Builtins::kIllegal); |
| Handle<Map> initial_map = isolate()->factory()->NewMap( |
| JS_TYPED_ARRAY_TYPE, |
| @@ -1937,6 +1956,19 @@ void Genesis::InstallTypedArray(const char* name, ElementsKind elements_kind, |
| elements_kind); |
| JSFunction::SetInitialMap(result, initial_map, |
| handle(initial_map->prototype(), isolate())); |
| + |
| + if (JSReceiver::SetPrototype(result, typed_array_function, false, |
|
adamk
2016/05/04 18:44:36
I'd use JSObject::SetPrototype() here since you kn
gsathya
2016/05/05 21:16:06
Done.
|
| + Object::THROW_ON_ERROR) |
| + .IsNothing()) { |
| + DCHECK(false); |
|
Dan Ehrenberg
2016/05/04 18:11:13
Nit: DCHECK(false) is rather unidiomatic (although
adamk
2016/05/04 18:44:36
I agree with this approach, though a slight modifi
gsathya
2016/05/05 21:16:06
Done.
|
| + } |
| + |
| + if (JSReceiver::SetPrototype(prototype, typed_array_prototype, false, |
|
adamk
2016/05/04 18:44:36
Same here, JSObject::SetPrototype.
gsathya
2016/05/05 21:16:06
Done.
|
| + Object::THROW_ON_ERROR) |
| + .IsNothing()) { |
| + DCHECK(false); |
| + } |
| + |
| *fun = result; |
| } |