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

Side by Side Diff: src/bootstrapper.cc

Issue 2741413006: [SAB] Implement SharedArrayBuffer.prototype.slice (Closed)
Patch Set: remove old test 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 | « no previous file | src/builtins/builtins.h » ('j') | src/builtins/builtins-sharedarraybuffer.cc » ('J')
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 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 void InitializeGlobal_##id(); 215 void InitializeGlobal_##id();
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,
226 BuiltinFunctionId id, bool is_shared); 226 Builtins::Name call_byteLength,
227 BuiltinFunctionId byteLength_id,
228 Builtins::Name call_slice);
227 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, 229 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target,
228 const char* name, 230 const char* name,
229 ElementsKind elements_kind); 231 ElementsKind elements_kind);
230 bool InstallNatives(GlobalContextType context_type); 232 bool InstallNatives(GlobalContextType context_type);
231 233
232 void InstallTypedArray(const char* name, ElementsKind elements_kind, 234 void InstallTypedArray(const char* name, ElementsKind elements_kind,
233 Handle<JSFunction>* fun); 235 Handle<JSFunction>* fun);
234 bool InstallExperimentalNatives(); 236 bool InstallExperimentalNatives();
235 bool InstallExtraNatives(); 237 bool InstallExtraNatives();
236 bool InstallExperimentalExtraNatives(); 238 bool InstallExperimentalExtraNatives();
(...skipping 2313 matching lines...) Expand 10 before | Expand all | Expand 10 after
2550 v8_break_iterator_constructor, DONT_ENUM); 2552 v8_break_iterator_constructor, DONT_ENUM);
2551 InstallWithIntrinsicDefaultProto( 2553 InstallWithIntrinsicDefaultProto(
2552 isolate, v8_break_iterator_constructor, 2554 isolate, v8_break_iterator_constructor,
2553 Context::INTL_V8_BREAK_ITERATOR_FUNCTION_INDEX); 2555 Context::INTL_V8_BREAK_ITERATOR_FUNCTION_INDEX);
2554 } 2556 }
2555 #endif // V8_I18N_SUPPORT 2557 #endif // V8_I18N_SUPPORT
2556 2558
2557 { // -- A r r a y B u f f e r 2559 { // -- A r r a y B u f f e r
2558 Handle<JSFunction> array_buffer_fun = InstallArrayBuffer( 2560 Handle<JSFunction> array_buffer_fun = InstallArrayBuffer(
2559 global, "ArrayBuffer", Builtins::kArrayBufferPrototypeGetByteLength, 2561 global, "ArrayBuffer", Builtins::kArrayBufferPrototypeGetByteLength,
2560 BuiltinFunctionId::kArrayBufferByteLength, false); 2562 BuiltinFunctionId::kArrayBufferByteLength,
2563 Builtins::kArrayBufferPrototypeSlice);
2561 InstallWithIntrinsicDefaultProto(isolate, array_buffer_fun, 2564 InstallWithIntrinsicDefaultProto(isolate, array_buffer_fun,
2562 Context::ARRAY_BUFFER_FUN_INDEX); 2565 Context::ARRAY_BUFFER_FUN_INDEX);
2563 InstallSpeciesGetter(array_buffer_fun); 2566 InstallSpeciesGetter(array_buffer_fun);
2564 } 2567 }
2565 2568
2566 { // -- T y p e d A r r a y 2569 { // -- T y p e d A r r a y
2567 Handle<JSObject> prototype = 2570 Handle<JSObject> prototype =
2568 factory->NewJSObject(isolate->object_function(), TENURED); 2571 factory->NewJSObject(isolate->object_function(), TENURED);
2569 native_context()->set_typed_array_prototype(*prototype); 2572 native_context()->set_typed_array_prototype(*prototype);
2570 2573
(...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after
3742 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() { 3745 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() {
3743 if (!FLAG_harmony_sharedarraybuffer) return; 3746 if (!FLAG_harmony_sharedarraybuffer) return;
3744 3747
3745 Handle<JSGlobalObject> global(native_context()->global_object()); 3748 Handle<JSGlobalObject> global(native_context()->global_object());
3746 Isolate* isolate = global->GetIsolate(); 3749 Isolate* isolate = global->GetIsolate();
3747 Factory* factory = isolate->factory(); 3750 Factory* factory = isolate->factory();
3748 3751
3749 Handle<JSFunction> shared_array_buffer_fun = 3752 Handle<JSFunction> shared_array_buffer_fun =
3750 InstallArrayBuffer(global, "SharedArrayBuffer", 3753 InstallArrayBuffer(global, "SharedArrayBuffer",
3751 Builtins::kSharedArrayBufferPrototypeGetByteLength, 3754 Builtins::kSharedArrayBufferPrototypeGetByteLength,
3752 BuiltinFunctionId::kSharedArrayBufferByteLength, true); 3755 BuiltinFunctionId::kSharedArrayBufferByteLength,
3756 Builtins::kSharedArrayBufferPrototypeSlice);
3753 native_context()->set_shared_array_buffer_fun(*shared_array_buffer_fun); 3757 native_context()->set_shared_array_buffer_fun(*shared_array_buffer_fun);
3754 3758
3755 Handle<String> name = factory->InternalizeUtf8String("Atomics"); 3759 Handle<String> name = factory->InternalizeUtf8String("Atomics");
3756 Handle<JSFunction> cons = factory->NewFunction(name); 3760 Handle<JSFunction> cons = factory->NewFunction(name);
3757 JSFunction::SetInstancePrototype( 3761 JSFunction::SetInstancePrototype(
3758 cons, 3762 cons,
3759 Handle<Object>(native_context()->initial_object_prototype(), isolate)); 3763 Handle<Object>(native_context()->initial_object_prototype(), isolate));
3760 Handle<JSObject> atomics_object = factory->NewJSObject(cons, TENURED); 3764 Handle<JSObject> atomics_object = factory->NewJSObject(cons, TENURED);
3761 DCHECK(atomics_object->IsJSObject()); 3765 DCHECK(atomics_object->IsJSObject());
3762 JSObject::AddProperty(global, name, atomics_object, DONT_ENUM); 3766 JSObject::AddProperty(global, name, atomics_object, DONT_ENUM);
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
3923 exports_container, 3927 exports_container,
3924 factory()->InternalizeUtf8String("ToLocaleUpperCaseI18N")) 3928 factory()->InternalizeUtf8String("ToLocaleUpperCaseI18N"))
3925 .ToHandleChecked()); 3929 .ToHandleChecked());
3926 SetFunction(string_prototype, to_locale_upper_case, 3930 SetFunction(string_prototype, to_locale_upper_case,
3927 factory()->InternalizeUtf8String("toLocaleUpperCase")); 3931 factory()->InternalizeUtf8String("toLocaleUpperCase"));
3928 } 3932 }
3929 #endif 3933 #endif
3930 3934
3931 Handle<JSFunction> Genesis::InstallArrayBuffer(Handle<JSObject> target, 3935 Handle<JSFunction> Genesis::InstallArrayBuffer(Handle<JSObject> target,
3932 const char* name, 3936 const char* name,
3933 Builtins::Name call, 3937 Builtins::Name call_byteLength,
3934 BuiltinFunctionId id, 3938 BuiltinFunctionId byteLength_id,
3935 bool is_shared) { 3939 Builtins::Name call_slice) {
3936 // Create the %ArrayBufferPrototype% 3940 // Create the %ArrayBufferPrototype%
3937 // Setup the {prototype} with the given {name} for @@toStringTag. 3941 // Setup the {prototype} with the given {name} for @@toStringTag.
3938 Handle<JSObject> prototype = 3942 Handle<JSObject> prototype =
3939 factory()->NewJSObject(isolate()->object_function(), TENURED); 3943 factory()->NewJSObject(isolate()->object_function(), TENURED);
3940 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(), 3944 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(),
3941 factory()->NewStringFromAsciiChecked(name), 3945 factory()->NewStringFromAsciiChecked(name),
3942 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); 3946 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
3943 3947
3944 // Allocate the constructor with the given {prototype}. 3948 // Allocate the constructor with the given {prototype}.
3945 Handle<JSFunction> array_buffer_fun = 3949 Handle<JSFunction> array_buffer_fun =
3946 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE, 3950 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE,
3947 JSArrayBuffer::kSizeWithInternalFields, prototype, 3951 JSArrayBuffer::kSizeWithInternalFields, prototype,
3948 Builtins::kArrayBufferConstructor); 3952 Builtins::kArrayBufferConstructor);
3949 array_buffer_fun->shared()->SetConstructStub( 3953 array_buffer_fun->shared()->SetConstructStub(
3950 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub()); 3954 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub());
3951 array_buffer_fun->shared()->DontAdaptArguments(); 3955 array_buffer_fun->shared()->DontAdaptArguments();
3952 array_buffer_fun->shared()->set_length(1); 3956 array_buffer_fun->shared()->set_length(1);
3953 3957
3954 // Install the "constructor" property on the {prototype}. 3958 // Install the "constructor" property on the {prototype}.
3955 JSObject::AddProperty(prototype, factory()->constructor_string(), 3959 JSObject::AddProperty(prototype, factory()->constructor_string(),
3956 array_buffer_fun, DONT_ENUM); 3960 array_buffer_fun, DONT_ENUM);
3957 3961
3958 SimpleInstallFunction(array_buffer_fun, factory()->isView_string(), 3962 SimpleInstallFunction(array_buffer_fun, factory()->isView_string(),
3959 Builtins::kArrayBufferIsView, 1, true); 3963 Builtins::kArrayBufferIsView, 1, true);
3960 3964
3961 // Install the "byteLength" getter on the {prototype}. 3965 // Install the "byteLength" getter on the {prototype}.
3962 SimpleInstallGetter(prototype, factory()->byte_length_string(), call, false, 3966 SimpleInstallGetter(prototype, factory()->byte_length_string(),
3963 id); 3967 call_byteLength, false, byteLength_id);
3964 3968
3965 // TODO(binji): support SharedArrayBuffer.prototype.slice as well. 3969 SimpleInstallFunction(prototype, "slice", call_slice, 2, true);
3966 if (!is_shared) {
3967 SimpleInstallFunction(prototype, "slice",
3968 Builtins::kArrayBufferPrototypeSlice, 2, true);
3969 }
3970 3970
3971 return array_buffer_fun; 3971 return array_buffer_fun;
3972 } 3972 }
3973 3973
3974 3974
3975 Handle<JSFunction> Genesis::InstallInternalArray(Handle<JSObject> target, 3975 Handle<JSFunction> Genesis::InstallInternalArray(Handle<JSObject> target,
3976 const char* name, 3976 const char* name,
3977 ElementsKind elements_kind) { 3977 ElementsKind elements_kind) {
3978 // --- I n t e r n a l A r r a y --- 3978 // --- I n t e r n a l A r r a y ---
3979 // An array constructor on the builtins object that works like 3979 // An array constructor on the builtins object that works like
(...skipping 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after
5160 } 5160 }
5161 5161
5162 5162
5163 // Called when the top-level V8 mutex is destroyed. 5163 // Called when the top-level V8 mutex is destroyed.
5164 void Bootstrapper::FreeThreadResources() { 5164 void Bootstrapper::FreeThreadResources() {
5165 DCHECK(!IsActive()); 5165 DCHECK(!IsActive());
5166 } 5166 }
5167 5167
5168 } // namespace internal 5168 } // namespace internal
5169 } // namespace v8 5169 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/builtins/builtins.h » ('j') | src/builtins/builtins-sharedarraybuffer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698