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

Side by Side Diff: src/bootstrapper.cc

Issue 1523753002: [es6] Correct Function.prototype.apply, Reflect.construct and Reflect.apply. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Mark mjsunit/apply as TIMEOUT (for tsan). Created 5 years 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 | « src/arm64/builtins-arm64.cc ('k') | src/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/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/extensions/externalize-string-extension.h" 10 #include "src/extensions/externalize-string-extension.h"
(...skipping 1847 matching lines...) Expand 10 before | Expand all | Expand 10 after
1858 Handle<String> NAME##_name = factory->NewStringFromAsciiChecked(#NAME); \ 1858 Handle<String> NAME##_name = factory->NewStringFromAsciiChecked(#NAME); \
1859 JSObject::AddProperty(container, NAME##_name, factory->NAME(), NONE); 1859 JSObject::AddProperty(container, NAME##_name, factory->NAME(), NONE);
1860 PUBLIC_SYMBOL_LIST(EXPORT_PUBLIC_SYMBOL) 1860 PUBLIC_SYMBOL_LIST(EXPORT_PUBLIC_SYMBOL)
1861 WELL_KNOWN_SYMBOL_LIST(EXPORT_PUBLIC_SYMBOL) 1861 WELL_KNOWN_SYMBOL_LIST(EXPORT_PUBLIC_SYMBOL)
1862 #undef EXPORT_PUBLIC_SYMBOL 1862 #undef EXPORT_PUBLIC_SYMBOL
1863 1863
1864 { 1864 {
1865 Handle<JSFunction> apply = InstallFunction( 1865 Handle<JSFunction> apply = InstallFunction(
1866 container, "reflect_apply", JS_OBJECT_TYPE, JSObject::kHeaderSize, 1866 container, "reflect_apply", JS_OBJECT_TYPE, JSObject::kHeaderSize,
1867 MaybeHandle<JSObject>(), Builtins::kReflectApply); 1867 MaybeHandle<JSObject>(), Builtins::kReflectApply);
1868 apply->shared()->set_internal_formal_parameter_count(3); 1868 apply->shared()->DontAdaptArguments();
1869 apply->shared()->set_length(3); 1869 apply->shared()->set_length(3);
1870 Handle<TypeFeedbackVector> feedback_vector =
1871 TypeFeedbackVector::CreatePushAppliedArgumentsVector(isolate);
1872 apply->shared()->set_feedback_vector(*feedback_vector);
1873 native_context->set_reflect_apply(*apply); 1870 native_context->set_reflect_apply(*apply);
1874 } 1871 }
1875 1872
1876 { 1873 {
1877 Handle<JSFunction> construct = InstallFunction( 1874 Handle<JSFunction> construct = InstallFunction(
1878 container, "reflect_construct", JS_OBJECT_TYPE, JSObject::kHeaderSize, 1875 container, "reflect_construct", JS_OBJECT_TYPE, JSObject::kHeaderSize,
1879 MaybeHandle<JSObject>(), Builtins::kReflectConstruct); 1876 MaybeHandle<JSObject>(), Builtins::kReflectConstruct);
1880 construct->shared()->set_internal_formal_parameter_count(3); 1877 construct->shared()->DontAdaptArguments();
1881 construct->shared()->set_length(2); 1878 construct->shared()->set_length(2);
1882 Handle<TypeFeedbackVector> feedback_vector =
1883 TypeFeedbackVector::CreatePushAppliedArgumentsVector(isolate);
1884 construct->shared()->set_feedback_vector(*feedback_vector);
1885 native_context->set_reflect_construct(*construct); 1879 native_context->set_reflect_construct(*construct);
1886 } 1880 }
1887 1881
1888 { 1882 {
1889 Handle<JSFunction> to_string = InstallFunction( 1883 Handle<JSFunction> to_string = InstallFunction(
1890 container, "object_to_string", JS_OBJECT_TYPE, JSObject::kHeaderSize, 1884 container, "object_to_string", JS_OBJECT_TYPE, JSObject::kHeaderSize,
1891 MaybeHandle<JSObject>(), Builtins::kObjectProtoToString); 1885 MaybeHandle<JSObject>(), Builtins::kObjectProtoToString);
1892 to_string->shared()->DontAdaptArguments(); 1886 to_string->shared()->DontAdaptArguments();
1893 to_string->shared()->set_length(0); 1887 to_string->shared()->set_length(0);
1894 native_context->set_object_to_string(*to_string); 1888 native_context->set_object_to_string(*to_string);
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
2528 Handle<JSObject> proto = 2522 Handle<JSObject> proto =
2529 Handle<JSObject>(JSObject::cast(function->instance_prototype())); 2523 Handle<JSObject>(JSObject::cast(function->instance_prototype()));
2530 2524
2531 // Install the call and the apply functions. 2525 // Install the call and the apply functions.
2532 Handle<JSFunction> call = 2526 Handle<JSFunction> call =
2533 InstallFunction(proto, "call", JS_OBJECT_TYPE, JSObject::kHeaderSize, 2527 InstallFunction(proto, "call", JS_OBJECT_TYPE, JSObject::kHeaderSize,
2534 MaybeHandle<JSObject>(), Builtins::kFunctionCall); 2528 MaybeHandle<JSObject>(), Builtins::kFunctionCall);
2535 Handle<JSFunction> apply = 2529 Handle<JSFunction> apply =
2536 InstallFunction(proto, "apply", JS_OBJECT_TYPE, JSObject::kHeaderSize, 2530 InstallFunction(proto, "apply", JS_OBJECT_TYPE, JSObject::kHeaderSize,
2537 MaybeHandle<JSObject>(), Builtins::kFunctionApply); 2531 MaybeHandle<JSObject>(), Builtins::kFunctionApply);
2538 Handle<TypeFeedbackVector> feedback_vector =
2539 TypeFeedbackVector::CreatePushAppliedArgumentsVector(isolate());
2540 apply->shared()->set_feedback_vector(*feedback_vector);
2541 2532
2542 // Make sure that Function.prototype.call appears to be compiled. 2533 // Make sure that Function.prototype.call appears to be compiled.
2543 // The code will never be called, but inline caching for call will 2534 // The code will never be called, but inline caching for call will
2544 // only work if it appears to be compiled. 2535 // only work if it appears to be compiled.
2536 apply->shared()->DontAdaptArguments();
2545 call->shared()->DontAdaptArguments(); 2537 call->shared()->DontAdaptArguments();
2546 DCHECK(call->is_compiled()); 2538 DCHECK(call->is_compiled());
2547 2539
2548 // Set the expected parameters for apply to 2; required by builtin.
2549 apply->shared()->set_internal_formal_parameter_count(2);
2550
2551 // Set the lengths for the functions to satisfy ECMA-262. 2540 // Set the lengths for the functions to satisfy ECMA-262.
2541 apply->shared()->set_length(2);
2552 call->shared()->set_length(1); 2542 call->shared()->set_length(1);
2553 apply->shared()->set_length(2);
2554 } 2543 }
2555 2544
2556 // Set up the Promise constructor. 2545 // Set up the Promise constructor.
2557 { 2546 {
2558 Handle<String> key = factory()->Promise_string(); 2547 Handle<String> key = factory()->Promise_string();
2559 Handle<JSFunction> function = Handle<JSFunction>::cast( 2548 Handle<JSFunction> function = Handle<JSFunction>::cast(
2560 Object::GetProperty(handle(native_context()->global_object()), key) 2549 Object::GetProperty(handle(native_context()->global_object()), key)
2561 .ToHandleChecked()); 2550 .ToHandleChecked());
2562 JSFunction::EnsureHasInitialMap(function); 2551 JSFunction::EnsureHasInitialMap(function);
2563 function->initial_map()->set_instance_type(JS_PROMISE_TYPE); 2552 function->initial_map()->set_instance_type(JS_PROMISE_TYPE);
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
3363 } 3352 }
3364 3353
3365 3354
3366 // Called when the top-level V8 mutex is destroyed. 3355 // Called when the top-level V8 mutex is destroyed.
3367 void Bootstrapper::FreeThreadResources() { 3356 void Bootstrapper::FreeThreadResources() {
3368 DCHECK(!IsActive()); 3357 DCHECK(!IsActive());
3369 } 3358 }
3370 3359
3371 } // namespace internal 3360 } // namespace internal
3372 } // namespace v8 3361 } // namespace v8
OLDNEW
« no previous file with comments | « src/arm64/builtins-arm64.cc ('k') | src/builtins.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698