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

Side by Side Diff: src/bootstrapper.cc

Issue 2697013009: Move ArrayBuffer.prototype.slice implementation to C++ (Closed)
Patch Set: merge master Created 3 years, 9 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
« no previous file with comments | « BUILD.gn ('k') | src/builtins/builtins.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 216
217 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) 217 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION)
218 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) 218 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION)
219 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) 219 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION)
220 #undef DECLARE_FEATURE_INITIALIZATION 220 #undef DECLARE_FEATURE_INITIALIZATION
221 221
222 void InitializeGlobal_enable_fast_array_builtins(); 222 void InitializeGlobal_enable_fast_array_builtins();
223 223
224 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target, 224 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target,
225 const char* name, Builtins::Name call, 225 const char* name, Builtins::Name call,
226 BuiltinFunctionId id); 226 BuiltinFunctionId id, bool is_shared);
227 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, 227 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target,
228 const char* name, 228 const char* name,
229 ElementsKind elements_kind); 229 ElementsKind elements_kind);
230 bool InstallNatives(GlobalContextType context_type); 230 bool InstallNatives(GlobalContextType context_type);
231 231
232 void InstallTypedArray(const char* name, ElementsKind elements_kind, 232 void InstallTypedArray(const char* name, ElementsKind elements_kind,
233 Handle<JSFunction>* fun); 233 Handle<JSFunction>* fun);
234 bool InstallExperimentalNatives(); 234 bool InstallExperimentalNatives();
235 bool InstallExtraNatives(); 235 bool InstallExtraNatives();
236 bool InstallExperimentalExtraNatives(); 236 bool InstallExperimentalExtraNatives();
(...skipping 2306 matching lines...) Expand 10 before | Expand all | Expand 10 after
2543 v8_break_iterator_constructor, DONT_ENUM); 2543 v8_break_iterator_constructor, DONT_ENUM);
2544 InstallWithIntrinsicDefaultProto( 2544 InstallWithIntrinsicDefaultProto(
2545 isolate, v8_break_iterator_constructor, 2545 isolate, v8_break_iterator_constructor,
2546 Context::INTL_V8_BREAK_ITERATOR_FUNCTION_INDEX); 2546 Context::INTL_V8_BREAK_ITERATOR_FUNCTION_INDEX);
2547 } 2547 }
2548 #endif // V8_I18N_SUPPORT 2548 #endif // V8_I18N_SUPPORT
2549 2549
2550 { // -- A r r a y B u f f e r 2550 { // -- A r r a y B u f f e r
2551 Handle<JSFunction> array_buffer_fun = InstallArrayBuffer( 2551 Handle<JSFunction> array_buffer_fun = InstallArrayBuffer(
2552 global, "ArrayBuffer", Builtins::kArrayBufferPrototypeGetByteLength, 2552 global, "ArrayBuffer", Builtins::kArrayBufferPrototypeGetByteLength,
2553 BuiltinFunctionId::kArrayBufferByteLength); 2553 BuiltinFunctionId::kArrayBufferByteLength, false);
2554 InstallWithIntrinsicDefaultProto(isolate, array_buffer_fun, 2554 InstallWithIntrinsicDefaultProto(isolate, array_buffer_fun,
2555 Context::ARRAY_BUFFER_FUN_INDEX); 2555 Context::ARRAY_BUFFER_FUN_INDEX);
2556 InstallSpeciesGetter(array_buffer_fun); 2556 InstallSpeciesGetter(array_buffer_fun);
2557 } 2557 }
2558 2558
2559 { // -- T y p e d A r r a y 2559 { // -- T y p e d A r r a y
2560 Handle<JSObject> prototype = 2560 Handle<JSObject> prototype =
2561 factory->NewJSObject(isolate->object_function(), TENURED); 2561 factory->NewJSObject(isolate->object_function(), TENURED);
2562 native_context()->set_typed_array_prototype(*prototype); 2562 native_context()->set_typed_array_prototype(*prototype);
2563 2563
(...skipping 1117 matching lines...) Expand 10 before | Expand all | Expand 10 after
3681 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() { 3681 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() {
3682 if (!FLAG_harmony_sharedarraybuffer) return; 3682 if (!FLAG_harmony_sharedarraybuffer) return;
3683 3683
3684 Handle<JSGlobalObject> global(native_context()->global_object()); 3684 Handle<JSGlobalObject> global(native_context()->global_object());
3685 Isolate* isolate = global->GetIsolate(); 3685 Isolate* isolate = global->GetIsolate();
3686 Factory* factory = isolate->factory(); 3686 Factory* factory = isolate->factory();
3687 3687
3688 Handle<JSFunction> shared_array_buffer_fun = 3688 Handle<JSFunction> shared_array_buffer_fun =
3689 InstallArrayBuffer(global, "SharedArrayBuffer", 3689 InstallArrayBuffer(global, "SharedArrayBuffer",
3690 Builtins::kSharedArrayBufferPrototypeGetByteLength, 3690 Builtins::kSharedArrayBufferPrototypeGetByteLength,
3691 BuiltinFunctionId::kSharedArrayBufferByteLength); 3691 BuiltinFunctionId::kSharedArrayBufferByteLength, true);
3692 native_context()->set_shared_array_buffer_fun(*shared_array_buffer_fun); 3692 native_context()->set_shared_array_buffer_fun(*shared_array_buffer_fun);
3693 3693
3694 Handle<String> name = factory->InternalizeUtf8String("Atomics"); 3694 Handle<String> name = factory->InternalizeUtf8String("Atomics");
3695 Handle<JSFunction> cons = factory->NewFunction(name); 3695 Handle<JSFunction> cons = factory->NewFunction(name);
3696 JSFunction::SetInstancePrototype( 3696 JSFunction::SetInstancePrototype(
3697 cons, 3697 cons,
3698 Handle<Object>(native_context()->initial_object_prototype(), isolate)); 3698 Handle<Object>(native_context()->initial_object_prototype(), isolate));
3699 Handle<JSObject> atomics_object = factory->NewJSObject(cons, TENURED); 3699 Handle<JSObject> atomics_object = factory->NewJSObject(cons, TENURED);
3700 DCHECK(atomics_object->IsJSObject()); 3700 DCHECK(atomics_object->IsJSObject());
3701 JSObject::AddProperty(global, name, atomics_object, DONT_ENUM); 3701 JSObject::AddProperty(global, name, atomics_object, DONT_ENUM);
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
3860 factory()->InternalizeUtf8String("ToLocaleUpperCaseI18N")) 3860 factory()->InternalizeUtf8String("ToLocaleUpperCaseI18N"))
3861 .ToHandleChecked()); 3861 .ToHandleChecked());
3862 SetFunction(string_prototype, to_locale_upper_case, 3862 SetFunction(string_prototype, to_locale_upper_case,
3863 factory()->InternalizeUtf8String("toLocaleUpperCase")); 3863 factory()->InternalizeUtf8String("toLocaleUpperCase"));
3864 } 3864 }
3865 #endif 3865 #endif
3866 3866
3867 Handle<JSFunction> Genesis::InstallArrayBuffer(Handle<JSObject> target, 3867 Handle<JSFunction> Genesis::InstallArrayBuffer(Handle<JSObject> target,
3868 const char* name, 3868 const char* name,
3869 Builtins::Name call, 3869 Builtins::Name call,
3870 BuiltinFunctionId id) { 3870 BuiltinFunctionId id,
3871 bool is_shared) {
3871 // Create the %ArrayBufferPrototype% 3872 // Create the %ArrayBufferPrototype%
3872 // Setup the {prototype} with the given {name} for @@toStringTag. 3873 // Setup the {prototype} with the given {name} for @@toStringTag.
3873 Handle<JSObject> prototype = 3874 Handle<JSObject> prototype =
3874 factory()->NewJSObject(isolate()->object_function(), TENURED); 3875 factory()->NewJSObject(isolate()->object_function(), TENURED);
3875 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(), 3876 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(),
3876 factory()->NewStringFromAsciiChecked(name), 3877 factory()->NewStringFromAsciiChecked(name),
3877 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); 3878 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
3878 3879
3879 // Allocate the constructor with the given {prototype}. 3880 // Allocate the constructor with the given {prototype}.
3880 Handle<JSFunction> array_buffer_fun = 3881 Handle<JSFunction> array_buffer_fun =
3881 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE, 3882 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE,
3882 JSArrayBuffer::kSizeWithInternalFields, prototype, 3883 JSArrayBuffer::kSizeWithInternalFields, prototype,
3883 Builtins::kArrayBufferConstructor); 3884 Builtins::kArrayBufferConstructor);
3884 array_buffer_fun->shared()->SetConstructStub( 3885 array_buffer_fun->shared()->SetConstructStub(
3885 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub()); 3886 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub());
3886 array_buffer_fun->shared()->DontAdaptArguments(); 3887 array_buffer_fun->shared()->DontAdaptArguments();
3887 array_buffer_fun->shared()->set_length(1); 3888 array_buffer_fun->shared()->set_length(1);
3888 3889
3889 // Install the "constructor" property on the {prototype}. 3890 // Install the "constructor" property on the {prototype}.
3890 JSObject::AddProperty(prototype, factory()->constructor_string(), 3891 JSObject::AddProperty(prototype, factory()->constructor_string(),
3891 array_buffer_fun, DONT_ENUM); 3892 array_buffer_fun, DONT_ENUM);
3892 3893
3893 SimpleInstallFunction(array_buffer_fun, factory()->isView_string(), 3894 SimpleInstallFunction(array_buffer_fun, factory()->isView_string(),
3894 Builtins::kArrayBufferIsView, 1, true); 3895 Builtins::kArrayBufferIsView, 1, true);
3895 3896
3896 // Install the "byteLength" getter on the {prototype}. 3897 // Install the "byteLength" getter on the {prototype}.
3897 SimpleInstallGetter(prototype, factory()->byte_length_string(), call, false, 3898 SimpleInstallGetter(prototype, factory()->byte_length_string(), call, false,
3898 id); 3899 id);
3899 3900
3901 // TODO(binji): support SharedArrayBuffer.prototype.slice as well.
3902 if (!is_shared) {
3903 SimpleInstallFunction(prototype, "slice",
3904 Builtins::kArrayBufferPrototypeSlice, 2, true);
3905 }
3906
3900 return array_buffer_fun; 3907 return array_buffer_fun;
3901 } 3908 }
3902 3909
3903 3910
3904 Handle<JSFunction> Genesis::InstallInternalArray(Handle<JSObject> target, 3911 Handle<JSFunction> Genesis::InstallInternalArray(Handle<JSObject> target,
3905 const char* name, 3912 const char* name,
3906 ElementsKind elements_kind) { 3913 ElementsKind elements_kind) {
3907 // --- I n t e r n a l A r r a y --- 3914 // --- I n t e r n a l A r r a y ---
3908 // An array constructor on the builtins object that works like 3915 // An array constructor on the builtins object that works like
3909 // the public Array constructor, except that its prototype 3916 // the public Array constructor, except that its prototype
(...skipping 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after
5089 } 5096 }
5090 5097
5091 5098
5092 // Called when the top-level V8 mutex is destroyed. 5099 // Called when the top-level V8 mutex is destroyed.
5093 void Bootstrapper::FreeThreadResources() { 5100 void Bootstrapper::FreeThreadResources() {
5094 DCHECK(!IsActive()); 5101 DCHECK(!IsActive());
5095 } 5102 }
5096 5103
5097 } // namespace internal 5104 } // namespace internal
5098 } // namespace v8 5105 } // namespace v8
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | src/builtins/builtins.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698