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

Side by Side Diff: src/bootstrapper.cc

Issue 2852833002: [builtins] De-duplicate specification of array builtin parameter count (Closed)
Patch Set: Finally Created 3 years, 7 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') | 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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 170
171 #define DECLARE_FEATURE_INITIALIZATION(id, descr) \ 171 #define DECLARE_FEATURE_INITIALIZATION(id, descr) \
172 void InitializeGlobal_##id(); 172 void InitializeGlobal_##id();
173 173
174 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) 174 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION)
175 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) 175 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION)
176 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) 176 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION)
177 #undef DECLARE_FEATURE_INITIALIZATION 177 #undef DECLARE_FEATURE_INITIALIZATION
178 178
179 void InstallOneBuiltinFunction(Handle<Object> prototype, const char* method, 179 void InstallOneBuiltinFunction(Handle<Object> prototype, const char* method,
180 Builtins::Name name, 180 Builtins::Name name);
181 int internal_formal_parameter_count);
182 void InitializeGlobal_experimental_fast_array_builtins(); 181 void InitializeGlobal_experimental_fast_array_builtins();
183 182
184 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target, 183 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target,
185 const char* name, 184 const char* name,
186 Builtins::Name call_byteLength, 185 Builtins::Name call_byteLength,
187 BuiltinFunctionId byteLength_id, 186 BuiltinFunctionId byteLength_id,
188 Builtins::Name call_slice); 187 Builtins::Name call_slice);
189 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, 188 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target,
190 const char* name, 189 const char* name,
191 ElementsKind elements_kind); 190 ElementsKind elements_kind);
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 fun->shared()->set_internal_formal_parameter_count(len); 389 fun->shared()->set_internal_formal_parameter_count(len);
391 } else { 390 } else {
392 fun->shared()->DontAdaptArguments(); 391 fun->shared()->DontAdaptArguments();
393 } 392 }
394 fun->shared()->set_length(len); 393 fun->shared()->set_length(len);
395 return fun; 394 return fun;
396 } 395 }
397 396
398 Handle<JSFunction> InstallArrayBuiltinFunction(Handle<JSObject> base, 397 Handle<JSFunction> InstallArrayBuiltinFunction(Handle<JSObject> base,
399 const char* name, 398 const char* name,
400 Builtins::Name call, 399 Builtins::Name call) {
401 int argument_count) {
402 Isolate* isolate = base->GetIsolate(); 400 Isolate* isolate = base->GetIsolate();
403 Handle<String> str_name = isolate->factory()->InternalizeUtf8String(name); 401 Handle<String> str_name = isolate->factory()->InternalizeUtf8String(name);
404 Handle<JSFunction> fun = 402 Handle<JSFunction> fun =
405 CreateFunction(isolate, str_name, JS_OBJECT_TYPE, JSObject::kHeaderSize, 403 CreateFunction(isolate, str_name, JS_OBJECT_TYPE, JSObject::kHeaderSize,
406 MaybeHandle<JSObject>(), call, true); 404 MaybeHandle<JSObject>(), call, true);
407 fun->shared()->set_internal_formal_parameter_count(argument_count); 405 fun->shared()->set_internal_formal_parameter_count(
406 Builtins::GetBuiltinParameterCount(call));
408 407
409 // Set the length to 1 to satisfy ECMA-262. 408 // Set the length to 1 to satisfy ECMA-262.
410 fun->shared()->set_length(1); 409 fun->shared()->set_length(1);
411 fun->shared()->set_language_mode(STRICT); 410 fun->shared()->set_language_mode(STRICT);
412 InstallFunction(base, fun, str_name); 411 InstallFunction(base, fun, str_name);
413 return fun; 412 return fun;
414 } 413 }
415 414
416 Handle<JSFunction> SimpleInstallFunction(Handle<JSObject> base, 415 Handle<JSFunction> SimpleInstallFunction(Handle<JSObject> base,
417 Handle<String> name, 416 Handle<String> name,
(...skipping 3446 matching lines...) Expand 10 before | Expand all | Expand 10 after
3864 Handle<JSObject> symbol = Handle<JSObject>::cast( 3863 Handle<JSObject> symbol = Handle<JSObject>::cast(
3865 JSObject::GetProperty(global, symbol_string).ToHandleChecked()); 3864 JSObject::GetProperty(global, symbol_string).ToHandleChecked());
3866 Handle<String> name_string = factory->InternalizeUtf8String(name); 3865 Handle<String> name_string = factory->InternalizeUtf8String(name);
3867 PropertyAttributes attributes = 3866 PropertyAttributes attributes =
3868 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); 3867 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
3869 JSObject::AddProperty(symbol, name_string, value, attributes); 3868 JSObject::AddProperty(symbol, name_string, value, attributes);
3870 } 3869 }
3871 3870
3872 void Genesis::InstallOneBuiltinFunction(Handle<Object> prototype, 3871 void Genesis::InstallOneBuiltinFunction(Handle<Object> prototype,
3873 const char* method_name, 3872 const char* method_name,
3874 Builtins::Name builtin_name, 3873 Builtins::Name builtin_name) {
3875 int internal_formal_parameter_count) {
3876 LookupIterator it( 3874 LookupIterator it(
3877 prototype, isolate()->factory()->NewStringFromAsciiChecked(method_name), 3875 prototype, isolate()->factory()->NewStringFromAsciiChecked(method_name),
3878 LookupIterator::OWN_SKIP_INTERCEPTOR); 3876 LookupIterator::OWN_SKIP_INTERCEPTOR);
3879 Handle<Object> function = Object::GetProperty(&it).ToHandleChecked(); 3877 Handle<Object> function = Object::GetProperty(&it).ToHandleChecked();
3880 Handle<JSFunction>::cast(function)->set_code( 3878 Handle<JSFunction>::cast(function)->set_code(
3881 isolate()->builtins()->builtin(builtin_name)); 3879 isolate()->builtins()->builtin(builtin_name));
3882 SharedFunctionInfo* info = Handle<JSFunction>::cast(function)->shared(); 3880 SharedFunctionInfo* info = Handle<JSFunction>::cast(function)->shared();
3883 info->set_code(isolate()->builtins()->builtin(builtin_name)); 3881 info->set_code(isolate()->builtins()->builtin(builtin_name));
3884 info->set_internal_formal_parameter_count(internal_formal_parameter_count); 3882 info->set_internal_formal_parameter_count(
3883 Builtins::GetBuiltinParameterCount(builtin_name));
3885 } 3884 }
3886 3885
3887 void Genesis::InitializeGlobal_experimental_fast_array_builtins() { 3886 void Genesis::InitializeGlobal_experimental_fast_array_builtins() {
3888 if (!FLAG_experimental_fast_array_builtins) return; 3887 if (!FLAG_experimental_fast_array_builtins) return;
3889 { 3888 {
3890 Handle<Object> typed_array_prototype( 3889 Handle<Object> typed_array_prototype(
3891 native_context()->typed_array_prototype(), isolate()); 3890 native_context()->typed_array_prototype(), isolate());
3892 // Insert experimental fast TypedArray builtins here. 3891 // Insert experimental fast TypedArray builtins here.
3893 InstallOneBuiltinFunction(typed_array_prototype, "every", 3892 InstallOneBuiltinFunction(typed_array_prototype, "every",
3894 Builtins::kTypedArrayPrototypeEvery, 3893 Builtins::kTypedArrayPrototypeEvery);
3895 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
3896 InstallOneBuiltinFunction(typed_array_prototype, "some", 3894 InstallOneBuiltinFunction(typed_array_prototype, "some",
3897 Builtins::kTypedArrayPrototypeSome, 3895 Builtins::kTypedArrayPrototypeSome);
3898 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
3899 InstallOneBuiltinFunction(typed_array_prototype, "reduce", 3896 InstallOneBuiltinFunction(typed_array_prototype, "reduce",
3900 Builtins::kTypedArrayPrototypeReduce, 3897 Builtins::kTypedArrayPrototypeReduce);
3901 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
3902 InstallOneBuiltinFunction(typed_array_prototype, "reduceRight", 3898 InstallOneBuiltinFunction(typed_array_prototype, "reduceRight",
3903 Builtins::kTypedArrayPrototypeReduceRight, 3899 Builtins::kTypedArrayPrototypeReduceRight);
3904 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
3905 } 3900 }
3906 } 3901 }
3907 3902
3908 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() { 3903 void Genesis::InitializeGlobal_harmony_sharedarraybuffer() {
3909 if (!FLAG_harmony_sharedarraybuffer) return; 3904 if (!FLAG_harmony_sharedarraybuffer) return;
3910 3905
3911 Handle<JSGlobalObject> global(native_context()->global_object()); 3906 Handle<JSGlobalObject> global(native_context()->global_object());
3912 Isolate* isolate = global->GetIsolate(); 3907 Isolate* isolate = global->GetIsolate();
3913 Factory* factory = isolate->factory(); 3908 Factory* factory = isolate->factory();
3914 3909
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
4359 4354
4360 // Make sure that Array.prototype.concat appears to be compiled. 4355 // Make sure that Array.prototype.concat appears to be compiled.
4361 // The code will never be called, but inline caching for call will 4356 // The code will never be called, but inline caching for call will
4362 // only work if it appears to be compiled. 4357 // only work if it appears to be compiled.
4363 concat->shared()->DontAdaptArguments(); 4358 concat->shared()->DontAdaptArguments();
4364 DCHECK(concat->is_compiled()); 4359 DCHECK(concat->is_compiled());
4365 // Set the lengths for the functions to satisfy ECMA-262. 4360 // Set the lengths for the functions to satisfy ECMA-262.
4366 concat->shared()->set_length(1); 4361 concat->shared()->set_length(1);
4367 4362
4368 // Install Array.prototype.forEach 4363 // Install Array.prototype.forEach
4369 Handle<JSFunction> forEach = InstallArrayBuiltinFunction( 4364 Handle<JSFunction> forEach =
4370 proto, "forEach", Builtins::kArrayForEach, 4365 InstallArrayBuiltinFunction(proto, "forEach", Builtins::kArrayForEach);
4371 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
4372 // Add forEach to the context. 4366 // Add forEach to the context.
4373 native_context()->set_array_for_each_iterator(*forEach); 4367 native_context()->set_array_for_each_iterator(*forEach);
4374 4368
4375 // Install Array.prototype.filter 4369 // Install Array.prototype.filter
4376 InstallArrayBuiltinFunction( 4370 InstallArrayBuiltinFunction(proto, "filter", Builtins::kArrayFilter);
4377 proto, "filter", Builtins::kArrayFilter,
4378 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
4379 4371
4380 // Install Array.prototype.map 4372 // Install Array.prototype.map
4381 InstallArrayBuiltinFunction( 4373 InstallArrayBuiltinFunction(proto, "map", Builtins::kArrayMap);
4382 proto, "map", Builtins::kArrayMap,
4383 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
4384 4374
4385 // Install Array.prototype.every 4375 // Install Array.prototype.every
4386 InstallArrayBuiltinFunction( 4376 InstallArrayBuiltinFunction(proto, "every", Builtins::kArrayEvery);
4387 proto, "every", Builtins::kArrayEvery,
4388 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
4389 4377
4390 // Install Array.prototype.some 4378 // Install Array.prototype.some
4391 InstallArrayBuiltinFunction( 4379 InstallArrayBuiltinFunction(proto, "some", Builtins::kArraySome);
4392 proto, "some", Builtins::kArraySome,
4393 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
4394 4380
4395 // Install Array.prototype.reduce 4381 // Install Array.prototype.reduce
4396 InstallArrayBuiltinFunction( 4382 InstallArrayBuiltinFunction(proto, "reduce", Builtins::kArrayReduce);
4397 proto, "reduce", Builtins::kArrayReduce,
4398 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
4399 4383
4400 // Install Array.prototype.reduceRight 4384 // Install Array.prototype.reduceRight
4401 InstallArrayBuiltinFunction( 4385 InstallArrayBuiltinFunction(proto, "reduceRight",
4402 proto, "reduceRight", Builtins::kArrayReduceRight, 4386 Builtins::kArrayReduceRight);
4403 SharedFunctionInfo::kDontAdaptArgumentsSentinel);
4404 } 4387 }
4405 4388
4406 // Install InternalArray.prototype.concat 4389 // Install InternalArray.prototype.concat
4407 { 4390 {
4408 Handle<JSFunction> array_constructor( 4391 Handle<JSFunction> array_constructor(
4409 native_context()->internal_array_function()); 4392 native_context()->internal_array_function());
4410 Handle<JSObject> proto(JSObject::cast(array_constructor->prototype())); 4393 Handle<JSObject> proto(JSObject::cast(array_constructor->prototype()));
4411 Handle<JSFunction> concat = 4394 Handle<JSFunction> concat =
4412 InstallFunction(proto, "concat", JS_OBJECT_TYPE, JSObject::kHeaderSize, 4395 InstallFunction(proto, "concat", JS_OBJECT_TYPE, JSObject::kHeaderSize,
4413 MaybeHandle<JSObject>(), Builtins::kArrayConcat); 4396 MaybeHandle<JSObject>(), Builtins::kArrayConcat);
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
5298 } 5281 }
5299 5282
5300 5283
5301 // Called when the top-level V8 mutex is destroyed. 5284 // Called when the top-level V8 mutex is destroyed.
5302 void Bootstrapper::FreeThreadResources() { 5285 void Bootstrapper::FreeThreadResources() {
5303 DCHECK(!IsActive()); 5286 DCHECK(!IsActive());
5304 } 5287 }
5305 5288
5306 } // namespace internal 5289 } // namespace internal
5307 } // namespace v8 5290 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/builtins/builtins.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698