| OLD | NEW |
| 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 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 | 356 |
| 357 namespace { | 357 namespace { |
| 358 | 358 |
| 359 void InstallFunction(Handle<JSObject> target, Handle<Name> property_name, | 359 void InstallFunction(Handle<JSObject> target, Handle<Name> property_name, |
| 360 Handle<JSFunction> function, Handle<String> function_name, | 360 Handle<JSFunction> function, Handle<String> function_name, |
| 361 PropertyAttributes attributes = DONT_ENUM) { | 361 PropertyAttributes attributes = DONT_ENUM) { |
| 362 JSObject::AddProperty(target, property_name, function, attributes); | 362 JSObject::AddProperty(target, property_name, function, attributes); |
| 363 if (target->IsJSGlobalObject()) { | 363 if (target->IsJSGlobalObject()) { |
| 364 function->shared()->set_instance_class_name(*function_name); | 364 function->shared()->set_instance_class_name(*function_name); |
| 365 } | 365 } |
| 366 function->shared()->set_native(true); | |
| 367 } | 366 } |
| 368 | 367 |
| 369 void InstallFunction(Handle<JSObject> target, Handle<JSFunction> function, | 368 void InstallFunction(Handle<JSObject> target, Handle<JSFunction> function, |
| 370 Handle<Name> name, | 369 Handle<Name> name, |
| 371 PropertyAttributes attributes = DONT_ENUM) { | 370 PropertyAttributes attributes = DONT_ENUM) { |
| 372 Handle<String> name_string = Name::ToFunctionName(name).ToHandleChecked(); | 371 Handle<String> name_string = Name::ToFunctionName(name).ToHandleChecked(); |
| 373 InstallFunction(target, name, function, name_string, attributes); | 372 InstallFunction(target, name, function, name_string, attributes); |
| 374 } | 373 } |
| 375 | 374 |
| 376 Handle<JSFunction> CreateFunction(Isolate* isolate, Handle<String> name, | 375 Handle<JSFunction> CreateFunction(Isolate* isolate, Handle<String> name, |
| 377 InstanceType type, int instance_size, | 376 InstanceType type, int instance_size, |
| 378 MaybeHandle<JSObject> maybe_prototype, | 377 MaybeHandle<JSObject> maybe_prototype, |
| 379 Builtins::Name call, | 378 Builtins::Name call, |
| 380 bool strict_function_map = false) { | 379 bool strict_function_map = false) { |
| 381 Factory* factory = isolate->factory(); | 380 Factory* factory = isolate->factory(); |
| 382 Handle<Code> call_code(isolate->builtins()->builtin(call)); | 381 Handle<Code> call_code(isolate->builtins()->builtin(call)); |
| 383 Handle<JSObject> prototype; | 382 Handle<JSObject> prototype; |
| 384 return maybe_prototype.ToHandle(&prototype) | 383 Handle<JSFunction> result = |
| 385 ? factory->NewFunction(name, call_code, prototype, type, | 384 maybe_prototype.ToHandle(&prototype) |
| 386 instance_size, strict_function_map) | 385 ? factory->NewFunction(name, call_code, prototype, type, |
| 387 : factory->NewFunctionWithoutPrototype(name, call_code, | 386 instance_size, strict_function_map) |
| 388 strict_function_map); | 387 : factory->NewFunctionWithoutPrototype(name, call_code, |
| 388 strict_function_map); |
| 389 result->shared()->set_native(true); |
| 390 return result; |
| 389 } | 391 } |
| 390 | 392 |
| 391 Handle<JSFunction> InstallFunction(Handle<JSObject> target, Handle<Name> name, | 393 Handle<JSFunction> InstallFunction(Handle<JSObject> target, Handle<Name> name, |
| 392 InstanceType type, int instance_size, | 394 InstanceType type, int instance_size, |
| 393 MaybeHandle<JSObject> maybe_prototype, | 395 MaybeHandle<JSObject> maybe_prototype, |
| 394 Builtins::Name call, | 396 Builtins::Name call, |
| 395 PropertyAttributes attributes, | 397 PropertyAttributes attributes, |
| 396 bool strict_function_map = false) { | 398 bool strict_function_map = false) { |
| 397 Handle<String> name_string = Name::ToFunctionName(name).ToHandleChecked(); | 399 Handle<String> name_string = Name::ToFunctionName(name).ToHandleChecked(); |
| 398 Handle<JSFunction> function = | 400 Handle<JSFunction> function = |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 Builtins::Name call_getter, | 464 Builtins::Name call_getter, |
| 463 Builtins::Name call_setter, | 465 Builtins::Name call_setter, |
| 464 PropertyAttributes attribs) { | 466 PropertyAttributes attribs) { |
| 465 Isolate* const isolate = base->GetIsolate(); | 467 Isolate* const isolate = base->GetIsolate(); |
| 466 | 468 |
| 467 Handle<String> getter_name = | 469 Handle<String> getter_name = |
| 468 Name::ToFunctionName(name, isolate->factory()->get_string()) | 470 Name::ToFunctionName(name, isolate->factory()->get_string()) |
| 469 .ToHandleChecked(); | 471 .ToHandleChecked(); |
| 470 Handle<JSFunction> getter = | 472 Handle<JSFunction> getter = |
| 471 SimpleCreateFunction(isolate, getter_name, call_getter, 0, true); | 473 SimpleCreateFunction(isolate, getter_name, call_getter, 0, true); |
| 472 getter->shared()->set_native(true); | |
| 473 | 474 |
| 474 Handle<String> setter_name = | 475 Handle<String> setter_name = |
| 475 Name::ToFunctionName(name, isolate->factory()->set_string()) | 476 Name::ToFunctionName(name, isolate->factory()->set_string()) |
| 476 .ToHandleChecked(); | 477 .ToHandleChecked(); |
| 477 Handle<JSFunction> setter = | 478 Handle<JSFunction> setter = |
| 478 SimpleCreateFunction(isolate, setter_name, call_setter, 1, true); | 479 SimpleCreateFunction(isolate, setter_name, call_setter, 1, true); |
| 479 setter->shared()->set_native(true); | |
| 480 | 480 |
| 481 JSObject::DefineAccessor(base, name, getter, setter, attribs).Check(); | 481 JSObject::DefineAccessor(base, name, getter, setter, attribs).Check(); |
| 482 } | 482 } |
| 483 | 483 |
| 484 Handle<JSFunction> SimpleInstallGetter(Handle<JSObject> base, | 484 Handle<JSFunction> SimpleInstallGetter(Handle<JSObject> base, |
| 485 Handle<String> name, | 485 Handle<String> name, |
| 486 Handle<Name> property_name, | 486 Handle<Name> property_name, |
| 487 Builtins::Name call, bool adapt) { | 487 Builtins::Name call, bool adapt) { |
| 488 Isolate* const isolate = base->GetIsolate(); | 488 Isolate* const isolate = base->GetIsolate(); |
| 489 | 489 |
| 490 Handle<String> getter_name = | 490 Handle<String> getter_name = |
| 491 Name::ToFunctionName(name, isolate->factory()->get_string()) | 491 Name::ToFunctionName(name, isolate->factory()->get_string()) |
| 492 .ToHandleChecked(); | 492 .ToHandleChecked(); |
| 493 Handle<JSFunction> getter = | 493 Handle<JSFunction> getter = |
| 494 SimpleCreateFunction(isolate, getter_name, call, 0, adapt); | 494 SimpleCreateFunction(isolate, getter_name, call, 0, adapt); |
| 495 getter->shared()->set_native(true); | |
| 496 | 495 |
| 497 Handle<Object> setter = isolate->factory()->undefined_value(); | 496 Handle<Object> setter = isolate->factory()->undefined_value(); |
| 498 | 497 |
| 499 JSObject::DefineAccessor(base, property_name, getter, setter, DONT_ENUM) | 498 JSObject::DefineAccessor(base, property_name, getter, setter, DONT_ENUM) |
| 500 .Check(); | 499 .Check(); |
| 501 | 500 |
| 502 return getter; | 501 return getter; |
| 503 } | 502 } |
| 504 | 503 |
| 505 Handle<JSFunction> SimpleInstallGetter(Handle<JSObject> base, | 504 Handle<JSFunction> SimpleInstallGetter(Handle<JSObject> base, |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 715 } | 714 } |
| 716 | 715 |
| 717 void Genesis::CreateIteratorMaps(Handle<JSFunction> empty) { | 716 void Genesis::CreateIteratorMaps(Handle<JSFunction> empty) { |
| 718 // Create iterator-related meta-objects. | 717 // Create iterator-related meta-objects. |
| 719 Handle<JSObject> iterator_prototype = | 718 Handle<JSObject> iterator_prototype = |
| 720 factory()->NewJSObject(isolate()->object_function(), TENURED); | 719 factory()->NewJSObject(isolate()->object_function(), TENURED); |
| 721 | 720 |
| 722 Handle<JSFunction> iterator_prototype_iterator = SimpleCreateFunction( | 721 Handle<JSFunction> iterator_prototype_iterator = SimpleCreateFunction( |
| 723 isolate(), factory()->NewStringFromAsciiChecked("[Symbol.iterator]"), | 722 isolate(), factory()->NewStringFromAsciiChecked("[Symbol.iterator]"), |
| 724 Builtins::kReturnReceiver, 0, true); | 723 Builtins::kReturnReceiver, 0, true); |
| 725 iterator_prototype_iterator->shared()->set_native(true); | |
| 726 | 724 |
| 727 JSObject::AddProperty(iterator_prototype, factory()->iterator_symbol(), | 725 JSObject::AddProperty(iterator_prototype, factory()->iterator_symbol(), |
| 728 iterator_prototype_iterator, DONT_ENUM); | 726 iterator_prototype_iterator, DONT_ENUM); |
| 729 native_context()->set_initial_iterator_prototype(*iterator_prototype); | 727 native_context()->set_initial_iterator_prototype(*iterator_prototype); |
| 730 | 728 |
| 731 Handle<JSObject> generator_object_prototype = | 729 Handle<JSObject> generator_object_prototype = |
| 732 factory()->NewJSObject(isolate()->object_function(), TENURED); | 730 factory()->NewJSObject(isolate()->object_function(), TENURED); |
| 733 native_context()->set_initial_generator_prototype( | 731 native_context()->set_initial_generator_prototype( |
| 734 *generator_object_prototype); | 732 *generator_object_prototype); |
| 735 JSObject::ForceSetPrototype(generator_object_prototype, iterator_prototype); | 733 JSObject::ForceSetPrototype(generator_object_prototype, iterator_prototype); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 754 factory()->to_string_tag_symbol(), | 752 factory()->to_string_tag_symbol(), |
| 755 factory()->NewStringFromAsciiChecked("Generator"), | 753 factory()->NewStringFromAsciiChecked("Generator"), |
| 756 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | 754 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); |
| 757 SimpleInstallFunction(generator_object_prototype, "next", | 755 SimpleInstallFunction(generator_object_prototype, "next", |
| 758 Builtins::kGeneratorPrototypeNext, 1, true); | 756 Builtins::kGeneratorPrototypeNext, 1, true); |
| 759 SimpleInstallFunction(generator_object_prototype, "return", | 757 SimpleInstallFunction(generator_object_prototype, "return", |
| 760 Builtins::kGeneratorPrototypeReturn, 1, true); | 758 Builtins::kGeneratorPrototypeReturn, 1, true); |
| 761 SimpleInstallFunction(generator_object_prototype, "throw", | 759 SimpleInstallFunction(generator_object_prototype, "throw", |
| 762 Builtins::kGeneratorPrototypeThrow, 1, true); | 760 Builtins::kGeneratorPrototypeThrow, 1, true); |
| 763 | 761 |
| 764 // Internal version of generator_prototype_next, flagged as non-native. | 762 // Internal version of generator_prototype_next, flagged as non-native such |
| 763 // that it doesn't show up in Error traces. |
| 765 Handle<JSFunction> generator_next_internal = | 764 Handle<JSFunction> generator_next_internal = |
| 766 SimpleCreateFunction(isolate(), factory()->next_string(), | 765 SimpleCreateFunction(isolate(), factory()->next_string(), |
| 767 Builtins::kGeneratorPrototypeNext, 1, true); | 766 Builtins::kGeneratorPrototypeNext, 1, true); |
| 767 generator_next_internal->shared()->set_native(false); |
| 768 native_context()->set_generator_next_internal(*generator_next_internal); | 768 native_context()->set_generator_next_internal(*generator_next_internal); |
| 769 | 769 |
| 770 // Create maps for generator functions and their prototypes. Store those | 770 // Create maps for generator functions and their prototypes. Store those |
| 771 // maps in the native context. The "prototype" property descriptor is | 771 // maps in the native context. The "prototype" property descriptor is |
| 772 // writable, non-enumerable, and non-configurable (as per ES6 draft | 772 // writable, non-enumerable, and non-configurable (as per ES6 draft |
| 773 // 04-14-15, section 25.2.4.3). | 773 // 04-14-15, section 25.2.4.3). |
| 774 Handle<Map> strict_function_map(strict_function_map_writable_prototype_); | 774 Handle<Map> strict_function_map(strict_function_map_writable_prototype_); |
| 775 // Generator functions do not have "caller" or "arguments" accessors. | 775 // Generator functions do not have "caller" or "arguments" accessors. |
| 776 Handle<Map> generator_function_map = | 776 Handle<Map> generator_function_map = |
| 777 Map::Copy(strict_function_map, "GeneratorFunction"); | 777 Map::Copy(strict_function_map, "GeneratorFunction"); |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1365 // including the receiver), as required by the builtin. | 1365 // including the receiver), as required by the builtin. |
| 1366 next->shared()->set_internal_formal_parameter_count(0); | 1366 next->shared()->set_internal_formal_parameter_count(0); |
| 1367 | 1367 |
| 1368 // Set the length for the function to satisfy ECMA-262. | 1368 // Set the length for the function to satisfy ECMA-262. |
| 1369 next->shared()->set_length(0); | 1369 next->shared()->set_length(0); |
| 1370 | 1370 |
| 1371 Handle<JSFunction> array_iterator_function = CreateFunction( | 1371 Handle<JSFunction> array_iterator_function = CreateFunction( |
| 1372 isolate, factory->ArrayIterator_string(), | 1372 isolate, factory->ArrayIterator_string(), |
| 1373 JS_FAST_ARRAY_VALUE_ITERATOR_TYPE, JSArrayIterator::kSize, | 1373 JS_FAST_ARRAY_VALUE_ITERATOR_TYPE, JSArrayIterator::kSize, |
| 1374 array_iterator_prototype, Builtins::kIllegal); | 1374 array_iterator_prototype, Builtins::kIllegal); |
| 1375 array_iterator_function->shared()->set_native(false); |
| 1375 array_iterator_function->shared()->set_instance_class_name( | 1376 array_iterator_function->shared()->set_instance_class_name( |
| 1376 isolate->heap()->ArrayIterator_string()); | 1377 isolate->heap()->ArrayIterator_string()); |
| 1377 | 1378 |
| 1378 native_context()->set_initial_array_iterator_prototype( | 1379 native_context()->set_initial_array_iterator_prototype( |
| 1379 *array_iterator_prototype); | 1380 *array_iterator_prototype); |
| 1380 native_context()->set_initial_array_iterator_prototype_map( | 1381 native_context()->set_initial_array_iterator_prototype_map( |
| 1381 array_iterator_prototype->map()); | 1382 array_iterator_prototype->map()); |
| 1382 | 1383 |
| 1383 Handle<Map> initial_map(array_iterator_function->initial_map(), isolate); | 1384 Handle<Map> initial_map(array_iterator_function->initial_map(), isolate); |
| 1384 | 1385 |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1599 SimpleInstallFunction(prototype, "trimLeft", | 1600 SimpleInstallFunction(prototype, "trimLeft", |
| 1600 Builtins::kStringPrototypeTrimLeft, 0, false); | 1601 Builtins::kStringPrototypeTrimLeft, 0, false); |
| 1601 SimpleInstallFunction(prototype, "trimRight", | 1602 SimpleInstallFunction(prototype, "trimRight", |
| 1602 Builtins::kStringPrototypeTrimRight, 0, false); | 1603 Builtins::kStringPrototypeTrimRight, 0, false); |
| 1603 SimpleInstallFunction(prototype, "valueOf", | 1604 SimpleInstallFunction(prototype, "valueOf", |
| 1604 Builtins::kStringPrototypeValueOf, 0, true); | 1605 Builtins::kStringPrototypeValueOf, 0, true); |
| 1605 | 1606 |
| 1606 Handle<JSFunction> iterator = SimpleCreateFunction( | 1607 Handle<JSFunction> iterator = SimpleCreateFunction( |
| 1607 isolate, factory->NewStringFromAsciiChecked("[Symbol.iterator]"), | 1608 isolate, factory->NewStringFromAsciiChecked("[Symbol.iterator]"), |
| 1608 Builtins::kStringPrototypeIterator, 0, true); | 1609 Builtins::kStringPrototypeIterator, 0, true); |
| 1609 iterator->shared()->set_native(true); | |
| 1610 iterator->shared()->set_builtin_function_id(kStringIterator); | 1610 iterator->shared()->set_builtin_function_id(kStringIterator); |
| 1611 JSObject::AddProperty(prototype, factory->iterator_symbol(), iterator, | 1611 JSObject::AddProperty(prototype, factory->iterator_symbol(), iterator, |
| 1612 static_cast<PropertyAttributes>(DONT_ENUM)); | 1612 static_cast<PropertyAttributes>(DONT_ENUM)); |
| 1613 } | 1613 } |
| 1614 | 1614 |
| 1615 { // --- S t r i n g I t e r a t o r --- | 1615 { // --- S t r i n g I t e r a t o r --- |
| 1616 Handle<JSObject> iterator_prototype( | 1616 Handle<JSObject> iterator_prototype( |
| 1617 native_context()->initial_iterator_prototype()); | 1617 native_context()->initial_iterator_prototype()); |
| 1618 | 1618 |
| 1619 Handle<JSObject> string_iterator_prototype = | 1619 Handle<JSObject> string_iterator_prototype = |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1635 // including the receiver), as required by the builtin. | 1635 // including the receiver), as required by the builtin. |
| 1636 next->shared()->set_internal_formal_parameter_count(0); | 1636 next->shared()->set_internal_formal_parameter_count(0); |
| 1637 | 1637 |
| 1638 // Set the length for the function to satisfy ECMA-262. | 1638 // Set the length for the function to satisfy ECMA-262. |
| 1639 next->shared()->set_length(0); | 1639 next->shared()->set_length(0); |
| 1640 | 1640 |
| 1641 Handle<JSFunction> string_iterator_function = CreateFunction( | 1641 Handle<JSFunction> string_iterator_function = CreateFunction( |
| 1642 isolate, factory->NewStringFromAsciiChecked("StringIterator"), | 1642 isolate, factory->NewStringFromAsciiChecked("StringIterator"), |
| 1643 JS_STRING_ITERATOR_TYPE, JSStringIterator::kSize, | 1643 JS_STRING_ITERATOR_TYPE, JSStringIterator::kSize, |
| 1644 string_iterator_prototype, Builtins::kIllegal); | 1644 string_iterator_prototype, Builtins::kIllegal); |
| 1645 string_iterator_function->shared()->set_native(false); |
| 1645 native_context()->set_string_iterator_map( | 1646 native_context()->set_string_iterator_map( |
| 1646 string_iterator_function->initial_map()); | 1647 string_iterator_function->initial_map()); |
| 1647 } | 1648 } |
| 1648 | 1649 |
| 1649 { | 1650 { |
| 1650 // --- S y m b o l --- | 1651 // --- S y m b o l --- |
| 1651 Handle<JSObject> prototype = | 1652 Handle<JSObject> prototype = |
| 1652 factory->NewJSObject(isolate->object_function(), TENURED); | 1653 factory->NewJSObject(isolate->object_function(), TENURED); |
| 1653 Handle<JSFunction> symbol_fun = | 1654 Handle<JSFunction> symbol_fun = |
| 1654 InstallFunction(global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, | 1655 InstallFunction(global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1854 info->SetConstructStub(*isolate->builtins()->JSBuiltinsConstructStub()); | 1855 info->SetConstructStub(*isolate->builtins()->JSBuiltinsConstructStub()); |
| 1855 info->set_instance_class_name(isolate->heap()->Object_string()); | 1856 info->set_instance_class_name(isolate->heap()->Object_string()); |
| 1856 info->set_internal_formal_parameter_count(2); | 1857 info->set_internal_formal_parameter_count(2); |
| 1857 info->set_length(2); | 1858 info->set_length(2); |
| 1858 native_context()->set_promise_get_capabilities_executor_shared_fun(*info); | 1859 native_context()->set_promise_get_capabilities_executor_shared_fun(*info); |
| 1859 | 1860 |
| 1860 // %new_promise_capability(C, debugEvent) | 1861 // %new_promise_capability(C, debugEvent) |
| 1861 Handle<JSFunction> new_promise_capability = | 1862 Handle<JSFunction> new_promise_capability = |
| 1862 SimpleCreateFunction(isolate, factory->empty_string(), | 1863 SimpleCreateFunction(isolate, factory->empty_string(), |
| 1863 Builtins::kNewPromiseCapability, 2, false); | 1864 Builtins::kNewPromiseCapability, 2, false); |
| 1865 new_promise_capability->shared()->set_native(false); |
| 1864 InstallWithIntrinsicDefaultProto(isolate, new_promise_capability, | 1866 InstallWithIntrinsicDefaultProto(isolate, new_promise_capability, |
| 1865 Context::NEW_PROMISE_CAPABILITY_INDEX); | 1867 Context::NEW_PROMISE_CAPABILITY_INDEX); |
| 1866 } | 1868 } |
| 1867 | 1869 |
| 1868 { // -- P r o m i s e | 1870 { // -- P r o m i s e |
| 1869 // Set catch prediction | 1871 // Set catch prediction |
| 1870 Handle<Code> promise_code = isolate->builtins()->PromiseConstructor(); | 1872 Handle<Code> promise_code = isolate->builtins()->PromiseConstructor(); |
| 1871 promise_code->set_is_promise_rejection(true); | 1873 promise_code->set_is_promise_rejection(true); |
| 1872 | 1874 |
| 1873 Handle<JSObject> prototype = | 1875 Handle<JSObject> prototype = |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1917 | 1919 |
| 1918 // Store the initial Promise.prototype map. This is used in fast-path | 1920 // Store the initial Promise.prototype map. This is used in fast-path |
| 1919 // checks. Do not alter the prototype after this point. | 1921 // checks. Do not alter the prototype after this point. |
| 1920 native_context()->set_promise_prototype_map(*prototype_map); | 1922 native_context()->set_promise_prototype_map(*prototype_map); |
| 1921 | 1923 |
| 1922 { // Internal: PromiseInternalConstructor | 1924 { // Internal: PromiseInternalConstructor |
| 1923 // Also exposed as extrasUtils.createPromise. | 1925 // Also exposed as extrasUtils.createPromise. |
| 1924 Handle<JSFunction> function = | 1926 Handle<JSFunction> function = |
| 1925 SimpleCreateFunction(isolate, factory->empty_string(), | 1927 SimpleCreateFunction(isolate, factory->empty_string(), |
| 1926 Builtins::kPromiseInternalConstructor, 1, true); | 1928 Builtins::kPromiseInternalConstructor, 1, true); |
| 1929 function->shared()->set_native(false); |
| 1927 InstallWithIntrinsicDefaultProto( | 1930 InstallWithIntrinsicDefaultProto( |
| 1928 isolate, function, Context::PROMISE_INTERNAL_CONSTRUCTOR_INDEX); | 1931 isolate, function, Context::PROMISE_INTERNAL_CONSTRUCTOR_INDEX); |
| 1929 } | 1932 } |
| 1930 | 1933 |
| 1931 { // Internal: IsPromise | 1934 { // Internal: IsPromise |
| 1932 Handle<JSFunction> function = SimpleCreateFunction( | 1935 Handle<JSFunction> function = SimpleCreateFunction( |
| 1933 isolate, factory->empty_string(), Builtins::kIsPromise, 1, false); | 1936 isolate, factory->empty_string(), Builtins::kIsPromise, 1, false); |
| 1937 function->shared()->set_native(false); |
| 1934 InstallWithIntrinsicDefaultProto(isolate, function, | 1938 InstallWithIntrinsicDefaultProto(isolate, function, |
| 1935 Context::IS_PROMISE_INDEX); | 1939 Context::IS_PROMISE_INDEX); |
| 1936 } | 1940 } |
| 1937 | 1941 |
| 1938 { // Internal: ResolvePromise | 1942 { // Internal: ResolvePromise |
| 1939 // Also exposed as extrasUtils.resolvePromise. | 1943 // Also exposed as extrasUtils.resolvePromise. |
| 1940 Handle<JSFunction> function = SimpleCreateFunction( | 1944 Handle<JSFunction> function = SimpleCreateFunction( |
| 1941 isolate, factory->empty_string(), Builtins::kResolvePromise, 2, true); | 1945 isolate, factory->empty_string(), Builtins::kResolvePromise, 2, true); |
| 1946 function->shared()->set_native(false); |
| 1942 InstallWithIntrinsicDefaultProto(isolate, function, | 1947 InstallWithIntrinsicDefaultProto(isolate, function, |
| 1943 Context::PROMISE_RESOLVE_INDEX); | 1948 Context::PROMISE_RESOLVE_INDEX); |
| 1944 } | 1949 } |
| 1945 | 1950 |
| 1946 { // Internal: PromiseHandle | 1951 { // Internal: PromiseHandle |
| 1947 Handle<JSFunction> function = SimpleCreateFunction( | 1952 Handle<JSFunction> function = SimpleCreateFunction( |
| 1948 isolate, factory->empty_string(), Builtins::kPromiseHandle, 5, false); | 1953 isolate, factory->empty_string(), Builtins::kPromiseHandle, 5, false); |
| 1954 function->shared()->set_native(false); |
| 1949 InstallWithIntrinsicDefaultProto(isolate, function, | 1955 InstallWithIntrinsicDefaultProto(isolate, function, |
| 1950 Context::PROMISE_HANDLE_INDEX); | 1956 Context::PROMISE_HANDLE_INDEX); |
| 1951 // Set up catch prediction | 1957 // Set up catch prediction |
| 1952 Handle<Code> promise_handle = isolate->builtins()->PromiseHandle(); | 1958 Handle<Code> promise_handle = isolate->builtins()->PromiseHandle(); |
| 1953 promise_handle->set_is_promise_rejection(true); | 1959 promise_handle->set_is_promise_rejection(true); |
| 1954 } | 1960 } |
| 1955 | 1961 |
| 1956 { // Internal: PromiseHandleReject | 1962 { // Internal: PromiseHandleReject |
| 1957 Handle<JSFunction> function = | 1963 Handle<JSFunction> function = |
| 1958 SimpleCreateFunction(isolate, factory->empty_string(), | 1964 SimpleCreateFunction(isolate, factory->empty_string(), |
| 1959 Builtins::kPromiseHandleReject, 3, false); | 1965 Builtins::kPromiseHandleReject, 3, false); |
| 1966 function->shared()->set_native(false); |
| 1960 InstallWithIntrinsicDefaultProto(isolate, function, | 1967 InstallWithIntrinsicDefaultProto(isolate, function, |
| 1961 Context::PROMISE_HANDLE_REJECT_INDEX); | 1968 Context::PROMISE_HANDLE_REJECT_INDEX); |
| 1962 // Set up catch prediction | 1969 // Set up catch prediction |
| 1963 Handle<Code> promise_handle = isolate->builtins()->PromiseHandleReject(); | 1970 Handle<Code> promise_handle = isolate->builtins()->PromiseHandleReject(); |
| 1964 promise_handle->set_is_exception_caught(true); | 1971 promise_handle->set_is_exception_caught(true); |
| 1965 } | 1972 } |
| 1966 | 1973 |
| 1967 { // Internal: InternalPromiseReject | 1974 { // Internal: InternalPromiseReject |
| 1968 Handle<JSFunction> function = | 1975 Handle<JSFunction> function = |
| 1969 SimpleCreateFunction(isolate, factory->empty_string(), | 1976 SimpleCreateFunction(isolate, factory->empty_string(), |
| 1970 Builtins::kInternalPromiseReject, 3, true); | 1977 Builtins::kInternalPromiseReject, 3, true); |
| 1978 function->shared()->set_native(false); |
| 1971 InstallWithIntrinsicDefaultProto(isolate, function, | 1979 InstallWithIntrinsicDefaultProto(isolate, function, |
| 1972 Context::PROMISE_INTERNAL_REJECT_INDEX); | 1980 Context::PROMISE_INTERNAL_REJECT_INDEX); |
| 1973 } | 1981 } |
| 1974 | 1982 |
| 1975 { | 1983 { |
| 1976 Handle<Code> code = | 1984 Handle<Code> code = |
| 1977 handle(isolate->builtins()->builtin(Builtins::kPromiseResolveClosure), | 1985 handle(isolate->builtins()->builtin(Builtins::kPromiseResolveClosure), |
| 1978 isolate); | 1986 isolate); |
| 1979 Handle<SharedFunctionInfo> info = | 1987 Handle<SharedFunctionInfo> info = |
| 1980 factory->NewSharedFunctionInfo(factory->empty_string(), code, false); | 1988 factory->NewSharedFunctionInfo(factory->empty_string(), code, false); |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2427 | 2435 |
| 2428 { // -- T y p e d A r r a y | 2436 { // -- T y p e d A r r a y |
| 2429 Handle<JSObject> prototype = | 2437 Handle<JSObject> prototype = |
| 2430 factory->NewJSObject(isolate->object_function(), TENURED); | 2438 factory->NewJSObject(isolate->object_function(), TENURED); |
| 2431 native_context()->set_typed_array_prototype(*prototype); | 2439 native_context()->set_typed_array_prototype(*prototype); |
| 2432 | 2440 |
| 2433 Handle<JSFunction> typed_array_fun = | 2441 Handle<JSFunction> typed_array_fun = |
| 2434 CreateFunction(isolate, factory->InternalizeUtf8String("TypedArray"), | 2442 CreateFunction(isolate, factory->InternalizeUtf8String("TypedArray"), |
| 2435 JS_TYPED_ARRAY_TYPE, JSTypedArray::kSize, prototype, | 2443 JS_TYPED_ARRAY_TYPE, JSTypedArray::kSize, prototype, |
| 2436 Builtins::kIllegal); | 2444 Builtins::kIllegal); |
| 2445 typed_array_fun->shared()->set_native(false); |
| 2437 InstallSpeciesGetter(typed_array_fun); | 2446 InstallSpeciesGetter(typed_array_fun); |
| 2438 | 2447 |
| 2439 // Install the "constructor" property on the {prototype}. | 2448 // Install the "constructor" property on the {prototype}. |
| 2440 JSObject::AddProperty(prototype, factory->constructor_string(), | 2449 JSObject::AddProperty(prototype, factory->constructor_string(), |
| 2441 typed_array_fun, DONT_ENUM); | 2450 typed_array_fun, DONT_ENUM); |
| 2442 native_context()->set_typed_array_function(*typed_array_fun); | 2451 native_context()->set_typed_array_function(*typed_array_fun); |
| 2443 | 2452 |
| 2444 // Install the "buffer", "byteOffset", "byteLength" and "length" | 2453 // Install the "buffer", "byteOffset", "byteLength" and "length" |
| 2445 // getters on the {prototype}. | 2454 // getters on the {prototype}. |
| 2446 SimpleInstallGetter(prototype, factory->buffer_string(), | 2455 SimpleInstallGetter(prototype, factory->buffer_string(), |
| (...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3368 async_function_constructor, | 3377 async_function_constructor, |
| 3369 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | 3378 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); |
| 3370 | 3379 |
| 3371 JSFunction::SetPrototype(async_function_constructor, | 3380 JSFunction::SetPrototype(async_function_constructor, |
| 3372 async_function_prototype); | 3381 async_function_prototype); |
| 3373 | 3382 |
| 3374 { | 3383 { |
| 3375 Handle<JSFunction> function = | 3384 Handle<JSFunction> function = |
| 3376 SimpleCreateFunction(isolate, factory->empty_string(), | 3385 SimpleCreateFunction(isolate, factory->empty_string(), |
| 3377 Builtins::kAsyncFunctionAwaitCaught, 3, false); | 3386 Builtins::kAsyncFunctionAwaitCaught, 3, false); |
| 3387 function->shared()->set_native(false); |
| 3378 InstallWithIntrinsicDefaultProto( | 3388 InstallWithIntrinsicDefaultProto( |
| 3379 isolate, function, Context::ASYNC_FUNCTION_AWAIT_CAUGHT_INDEX); | 3389 isolate, function, Context::ASYNC_FUNCTION_AWAIT_CAUGHT_INDEX); |
| 3380 } | 3390 } |
| 3381 | 3391 |
| 3382 { | 3392 { |
| 3383 Handle<JSFunction> function = | 3393 Handle<JSFunction> function = |
| 3384 SimpleCreateFunction(isolate, factory->empty_string(), | 3394 SimpleCreateFunction(isolate, factory->empty_string(), |
| 3385 Builtins::kAsyncFunctionAwaitUncaught, 3, false); | 3395 Builtins::kAsyncFunctionAwaitUncaught, 3, false); |
| 3396 function->shared()->set_native(false); |
| 3386 InstallWithIntrinsicDefaultProto( | 3397 InstallWithIntrinsicDefaultProto( |
| 3387 isolate, function, Context::ASYNC_FUNCTION_AWAIT_UNCAUGHT_INDEX); | 3398 isolate, function, Context::ASYNC_FUNCTION_AWAIT_UNCAUGHT_INDEX); |
| 3388 } | 3399 } |
| 3389 | 3400 |
| 3390 { | 3401 { |
| 3391 Handle<Code> code = | 3402 Handle<Code> code = |
| 3392 isolate->builtins()->AsyncFunctionAwaitRejectClosure(); | 3403 isolate->builtins()->AsyncFunctionAwaitRejectClosure(); |
| 3393 Handle<SharedFunctionInfo> info = | 3404 Handle<SharedFunctionInfo> info = |
| 3394 factory->NewSharedFunctionInfo(factory->empty_string(), code, false); | 3405 factory->NewSharedFunctionInfo(factory->empty_string(), code, false); |
| 3395 info->set_internal_formal_parameter_count(1); | 3406 info->set_internal_formal_parameter_count(1); |
| 3396 info->set_length(1); | 3407 info->set_length(1); |
| 3397 native_context->set_async_function_await_reject_shared_fun(*info); | 3408 native_context->set_async_function_await_reject_shared_fun(*info); |
| 3398 } | 3409 } |
| 3399 | 3410 |
| 3400 { | 3411 { |
| 3401 Handle<Code> code = | 3412 Handle<Code> code = |
| 3402 isolate->builtins()->AsyncFunctionAwaitResolveClosure(); | 3413 isolate->builtins()->AsyncFunctionAwaitResolveClosure(); |
| 3403 Handle<SharedFunctionInfo> info = | 3414 Handle<SharedFunctionInfo> info = |
| 3404 factory->NewSharedFunctionInfo(factory->empty_string(), code, false); | 3415 factory->NewSharedFunctionInfo(factory->empty_string(), code, false); |
| 3405 info->set_internal_formal_parameter_count(1); | 3416 info->set_internal_formal_parameter_count(1); |
| 3406 info->set_length(1); | 3417 info->set_length(1); |
| 3407 native_context->set_async_function_await_resolve_shared_fun(*info); | 3418 native_context->set_async_function_await_resolve_shared_fun(*info); |
| 3408 } | 3419 } |
| 3409 | 3420 |
| 3410 { | 3421 { |
| 3411 Handle<JSFunction> function = | 3422 Handle<JSFunction> function = |
| 3412 SimpleCreateFunction(isolate, factory->empty_string(), | 3423 SimpleCreateFunction(isolate, factory->empty_string(), |
| 3413 Builtins::kAsyncFunctionPromiseCreate, 0, false); | 3424 Builtins::kAsyncFunctionPromiseCreate, 0, false); |
| 3425 function->shared()->set_native(false); |
| 3414 InstallWithIntrinsicDefaultProto( | 3426 InstallWithIntrinsicDefaultProto( |
| 3415 isolate, function, Context::ASYNC_FUNCTION_PROMISE_CREATE_INDEX); | 3427 isolate, function, Context::ASYNC_FUNCTION_PROMISE_CREATE_INDEX); |
| 3416 } | 3428 } |
| 3417 | 3429 |
| 3418 { | 3430 { |
| 3419 Handle<JSFunction> function = SimpleCreateFunction( | 3431 Handle<JSFunction> function = SimpleCreateFunction( |
| 3420 isolate, factory->empty_string(), | 3432 isolate, factory->empty_string(), |
| 3421 Builtins::kAsyncFunctionPromiseRelease, 1, false); | 3433 Builtins::kAsyncFunctionPromiseRelease, 1, false); |
| 3434 function->shared()->set_native(false); |
| 3422 InstallWithIntrinsicDefaultProto( | 3435 InstallWithIntrinsicDefaultProto( |
| 3423 isolate, function, Context::ASYNC_FUNCTION_PROMISE_RELEASE_INDEX); | 3436 isolate, function, Context::ASYNC_FUNCTION_PROMISE_RELEASE_INDEX); |
| 3424 } | 3437 } |
| 3425 } | 3438 } |
| 3426 | 3439 |
| 3427 { // -- C a l l S i t e | 3440 { // -- C a l l S i t e |
| 3428 // Builtin functions for CallSite. | 3441 // Builtin functions for CallSite. |
| 3429 | 3442 |
| 3430 // CallSites are a special case; the constructor is for our private use | 3443 // CallSites are a special case; the constructor is for our private use |
| 3431 // only, therefore we set it up as a builtin that throws. Internally, we use | 3444 // only, therefore we set it up as a builtin that throws. Internally, we use |
| (...skipping 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4835 } | 4848 } |
| 4836 | 4849 |
| 4837 | 4850 |
| 4838 // Called when the top-level V8 mutex is destroyed. | 4851 // Called when the top-level V8 mutex is destroyed. |
| 4839 void Bootstrapper::FreeThreadResources() { | 4852 void Bootstrapper::FreeThreadResources() { |
| 4840 DCHECK(!IsActive()); | 4853 DCHECK(!IsActive()); |
| 4841 } | 4854 } |
| 4842 | 4855 |
| 4843 } // namespace internal | 4856 } // namespace internal |
| 4844 } // namespace v8 | 4857 } // namespace v8 |
| OLD | NEW |