Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: src/bootstrapper.cc

Issue 2697013009: Move ArrayBuffer.prototype.slice implementation to C++ (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/bootstrapper.h" 5 #include "src/bootstrapper.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api-natives.h" 8 #include "src/api-natives.h"
9 #include "src/base/ieee754.h" 9 #include "src/base/ieee754.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 214
215 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) 215 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION)
216 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) 216 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION)
217 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) 217 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION)
218 #undef DECLARE_FEATURE_INITIALIZATION 218 #undef DECLARE_FEATURE_INITIALIZATION
219 219
220 void InitializeGlobal_enable_fast_array_builtins(); 220 void InitializeGlobal_enable_fast_array_builtins();
221 221
222 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target, 222 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target,
223 const char* name, Builtins::Name call, 223 const char* name, Builtins::Name call,
224 BuiltinFunctionId id); 224 BuiltinFunctionId id, bool is_shared);
225 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, 225 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target,
226 const char* name, 226 const char* name,
227 ElementsKind elements_kind); 227 ElementsKind elements_kind);
228 bool InstallNatives(GlobalContextType context_type); 228 bool InstallNatives(GlobalContextType context_type);
229 229
230 void InstallTypedArray(const char* name, ElementsKind elements_kind, 230 void InstallTypedArray(const char* name, ElementsKind elements_kind,
231 Handle<JSFunction>* fun); 231 Handle<JSFunction>* fun);
232 bool InstallExperimentalNatives(); 232 bool InstallExperimentalNatives();
233 bool InstallExtraNatives(); 233 bool InstallExtraNatives();
234 bool InstallExperimentalExtraNatives(); 234 bool InstallExperimentalExtraNatives();
(...skipping 2187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2422 v8_break_iterator_constructor, DONT_ENUM); 2422 v8_break_iterator_constructor, DONT_ENUM);
2423 InstallWithIntrinsicDefaultProto( 2423 InstallWithIntrinsicDefaultProto(
2424 isolate, v8_break_iterator_constructor, 2424 isolate, v8_break_iterator_constructor,
2425 Context::INTL_V8_BREAK_ITERATOR_FUNCTION_INDEX); 2425 Context::INTL_V8_BREAK_ITERATOR_FUNCTION_INDEX);
2426 } 2426 }
2427 #endif // V8_I18N_SUPPORT 2427 #endif // V8_I18N_SUPPORT
2428 2428
2429 { // -- A r r a y B u f f e r 2429 { // -- A r r a y B u f f e r
2430 Handle<JSFunction> array_buffer_fun = InstallArrayBuffer( 2430 Handle<JSFunction> array_buffer_fun = InstallArrayBuffer(
2431 global, "ArrayBuffer", Builtins::kArrayBufferPrototypeGetByteLength, 2431 global, "ArrayBuffer", Builtins::kArrayBufferPrototypeGetByteLength,
2432 BuiltinFunctionId::kArrayBufferByteLength); 2432 BuiltinFunctionId::kArrayBufferByteLength, false);
2433 InstallWithIntrinsicDefaultProto(isolate, array_buffer_fun, 2433 InstallWithIntrinsicDefaultProto(isolate, array_buffer_fun,
2434 Context::ARRAY_BUFFER_FUN_INDEX); 2434 Context::ARRAY_BUFFER_FUN_INDEX);
2435 InstallSpeciesGetter(array_buffer_fun); 2435 InstallSpeciesGetter(array_buffer_fun);
2436 } 2436 }
2437 2437
2438 { // -- T y p e d A r r a y 2438 { // -- T y p e d A r r a y
2439 Handle<JSObject> prototype = 2439 Handle<JSObject> prototype =
2440 factory->NewJSObject(isolate->object_function(), TENURED); 2440 factory->NewJSObject(isolate->object_function(), TENURED);
2441 native_context()->set_typed_array_prototype(*prototype); 2441 native_context()->set_typed_array_prototype(*prototype);
2442 2442
(...skipping 1112 matching lines...) Expand 10 before | Expand all | Expand 10 after
3555 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() { 3555 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() {
3556 if (!FLAG_harmony_sharedarraybuffer) return; 3556 if (!FLAG_harmony_sharedarraybuffer) return;
3557 3557
3558 Handle<JSGlobalObject> global(native_context()->global_object()); 3558 Handle<JSGlobalObject> global(native_context()->global_object());
3559 Isolate* isolate = global->GetIsolate(); 3559 Isolate* isolate = global->GetIsolate();
3560 Factory* factory = isolate->factory(); 3560 Factory* factory = isolate->factory();
3561 3561
3562 Handle<JSFunction> shared_array_buffer_fun = 3562 Handle<JSFunction> shared_array_buffer_fun =
3563 InstallArrayBuffer(global, "SharedArrayBuffer", 3563 InstallArrayBuffer(global, "SharedArrayBuffer",
3564 Builtins::kSharedArrayBufferPrototypeGetByteLength, 3564 Builtins::kSharedArrayBufferPrototypeGetByteLength,
3565 BuiltinFunctionId::kSharedArrayBufferByteLength); 3565 BuiltinFunctionId::kSharedArrayBufferByteLength, true);
3566 native_context()->set_shared_array_buffer_fun(*shared_array_buffer_fun); 3566 native_context()->set_shared_array_buffer_fun(*shared_array_buffer_fun);
3567 3567
3568 Handle<String> name = factory->InternalizeUtf8String("Atomics"); 3568 Handle<String> name = factory->InternalizeUtf8String("Atomics");
3569 Handle<JSFunction> cons = factory->NewFunction(name); 3569 Handle<JSFunction> cons = factory->NewFunction(name);
3570 JSFunction::SetInstancePrototype( 3570 JSFunction::SetInstancePrototype(
3571 cons, 3571 cons,
3572 Handle<Object>(native_context()->initial_object_prototype(), isolate)); 3572 Handle<Object>(native_context()->initial_object_prototype(), isolate));
3573 Handle<JSObject> atomics_object = factory->NewJSObject(cons, TENURED); 3573 Handle<JSObject> atomics_object = factory->NewJSObject(cons, TENURED);
3574 DCHECK(atomics_object->IsJSObject()); 3574 DCHECK(atomics_object->IsJSObject());
3575 JSObject::AddProperty(global, name, atomics_object, DONT_ENUM); 3575 JSObject::AddProperty(global, name, atomics_object, DONT_ENUM);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
3673 factory()->InternalizeUtf8String("ToLocaleUpperCaseI18N")) 3673 factory()->InternalizeUtf8String("ToLocaleUpperCaseI18N"))
3674 .ToHandleChecked()); 3674 .ToHandleChecked());
3675 SetFunction(string_prototype, to_locale_upper_case, 3675 SetFunction(string_prototype, to_locale_upper_case,
3676 factory()->InternalizeUtf8String("toLocaleUpperCase")); 3676 factory()->InternalizeUtf8String("toLocaleUpperCase"));
3677 } 3677 }
3678 #endif 3678 #endif
3679 3679
3680 Handle<JSFunction> Genesis::InstallArrayBuffer(Handle<JSObject> target, 3680 Handle<JSFunction> Genesis::InstallArrayBuffer(Handle<JSObject> target,
3681 const char* name, 3681 const char* name,
3682 Builtins::Name call, 3682 Builtins::Name call,
3683 BuiltinFunctionId id) { 3683 BuiltinFunctionId id,
3684 bool is_shared) {
3684 // Create the %ArrayBufferPrototype% 3685 // Create the %ArrayBufferPrototype%
3685 // Setup the {prototype} with the given {name} for @@toStringTag. 3686 // Setup the {prototype} with the given {name} for @@toStringTag.
3686 Handle<JSObject> prototype = 3687 Handle<JSObject> prototype =
3687 factory()->NewJSObject(isolate()->object_function(), TENURED); 3688 factory()->NewJSObject(isolate()->object_function(), TENURED);
3688 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(), 3689 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(),
3689 factory()->NewStringFromAsciiChecked(name), 3690 factory()->NewStringFromAsciiChecked(name),
3690 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); 3691 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
3691 3692
3692 // Allocate the constructor with the given {prototype}. 3693 // Allocate the constructor with the given {prototype}.
3693 Handle<JSFunction> array_buffer_fun = 3694 Handle<JSFunction> array_buffer_fun =
3694 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE, 3695 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE,
3695 JSArrayBuffer::kSizeWithInternalFields, prototype, 3696 JSArrayBuffer::kSizeWithInternalFields, prototype,
3696 Builtins::kArrayBufferConstructor); 3697 Builtins::kArrayBufferConstructor);
3697 array_buffer_fun->shared()->SetConstructStub( 3698 array_buffer_fun->shared()->SetConstructStub(
3698 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub()); 3699 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub());
3699 array_buffer_fun->shared()->DontAdaptArguments(); 3700 array_buffer_fun->shared()->DontAdaptArguments();
3700 array_buffer_fun->shared()->set_length(1); 3701 array_buffer_fun->shared()->set_length(1);
3701 3702
3702 // Install the "constructor" property on the {prototype}. 3703 // Install the "constructor" property on the {prototype}.
3703 JSObject::AddProperty(prototype, factory()->constructor_string(), 3704 JSObject::AddProperty(prototype, factory()->constructor_string(),
3704 array_buffer_fun, DONT_ENUM); 3705 array_buffer_fun, DONT_ENUM);
3705 3706
3706 SimpleInstallFunction(array_buffer_fun, factory()->isView_string(), 3707 SimpleInstallFunction(array_buffer_fun, factory()->isView_string(),
3707 Builtins::kArrayBufferIsView, 1, true); 3708 Builtins::kArrayBufferIsView, 1, true);
3708 3709
3709 // Install the "byteLength" getter on the {prototype}. 3710 // Install the "byteLength" getter on the {prototype}.
3710 SimpleInstallGetter(prototype, factory()->byte_length_string(), call, false, 3711 SimpleInstallGetter(prototype, factory()->byte_length_string(), call, false,
3711 id); 3712 id);
3712 3713
3714 // TODO(binji): support SharedArrayBuffer.prototype.slice as well.
3715 if (!is_shared) {
3716 SimpleInstallFunction(prototype, "slice",
3717 Builtins::kArrayBufferPrototypeSlice, 2, true);
3718 }
3719
3713 return array_buffer_fun; 3720 return array_buffer_fun;
3714 } 3721 }
3715 3722
3716 3723
3717 Handle<JSFunction> Genesis::InstallInternalArray(Handle<JSObject> target, 3724 Handle<JSFunction> Genesis::InstallInternalArray(Handle<JSObject> target,
3718 const char* name, 3725 const char* name,
3719 ElementsKind elements_kind) { 3726 ElementsKind elements_kind) {
3720 // --- I n t e r n a l A r r a y --- 3727 // --- I n t e r n a l A r r a y ---
3721 // An array constructor on the builtins object that works like 3728 // An array constructor on the builtins object that works like
3722 // the public Array constructor, except that its prototype 3729 // the public Array constructor, except that its prototype
(...skipping 1166 matching lines...) Expand 10 before | Expand all | Expand 10 after
4889 } 4896 }
4890 4897
4891 4898
4892 // Called when the top-level V8 mutex is destroyed. 4899 // Called when the top-level V8 mutex is destroyed.
4893 void Bootstrapper::FreeThreadResources() { 4900 void Bootstrapper::FreeThreadResources() {
4894 DCHECK(!IsActive()); 4901 DCHECK(!IsActive());
4895 } 4902 }
4896 4903
4897 } // namespace internal 4904 } // namespace internal
4898 } // namespace v8 4905 } // namespace v8
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | src/builtins/builtins.h » ('j') | src/builtins/builtins-arraybuffer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698