| 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 1208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1219 Handle<JSObject> global(native_context()->global_object()); | 1219 Handle<JSObject> global(native_context()->global_object()); |
| 1220 | 1220 |
| 1221 { // --- F u n c t i o n --- | 1221 { // --- F u n c t i o n --- |
| 1222 Handle<JSFunction> prototype = empty_function; | 1222 Handle<JSFunction> prototype = empty_function; |
| 1223 Handle<JSFunction> function_fun = | 1223 Handle<JSFunction> function_fun = |
| 1224 InstallFunction(global, "Function", JS_FUNCTION_TYPE, JSFunction::kSize, | 1224 InstallFunction(global, "Function", JS_FUNCTION_TYPE, JSFunction::kSize, |
| 1225 prototype, Builtins::kFunctionConstructor); | 1225 prototype, Builtins::kFunctionConstructor); |
| 1226 function_fun->set_prototype_or_initial_map( | 1226 function_fun->set_prototype_or_initial_map( |
| 1227 *sloppy_function_map_writable_prototype_); | 1227 *sloppy_function_map_writable_prototype_); |
| 1228 function_fun->shared()->DontAdaptArguments(); | 1228 function_fun->shared()->DontAdaptArguments(); |
| 1229 function_fun->shared()->set_construct_stub( | 1229 function_fun->shared()->SetConstructStub( |
| 1230 *isolate->builtins()->FunctionConstructor()); | 1230 *isolate->builtins()->FunctionConstructor()); |
| 1231 function_fun->shared()->set_length(1); | 1231 function_fun->shared()->set_length(1); |
| 1232 InstallWithIntrinsicDefaultProto(isolate, function_fun, | 1232 InstallWithIntrinsicDefaultProto(isolate, function_fun, |
| 1233 Context::FUNCTION_FUNCTION_INDEX); | 1233 Context::FUNCTION_FUNCTION_INDEX); |
| 1234 | 1234 |
| 1235 // Setup the methods on the %FunctionPrototype%. | 1235 // Setup the methods on the %FunctionPrototype%. |
| 1236 SimpleInstallFunction(prototype, factory->apply_string(), | 1236 SimpleInstallFunction(prototype, factory->apply_string(), |
| 1237 Builtins::kFunctionPrototypeApply, 2, false); | 1237 Builtins::kFunctionPrototypeApply, 2, false); |
| 1238 | 1238 |
| 1239 FastFunctionBindStub bind_stub(isolate); | 1239 FastFunctionBindStub bind_stub(isolate); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1301 initial_map->AppendDescriptor(&d); | 1301 initial_map->AppendDescriptor(&d); |
| 1302 } | 1302 } |
| 1303 | 1303 |
| 1304 InstallWithIntrinsicDefaultProto(isolate, array_function, | 1304 InstallWithIntrinsicDefaultProto(isolate, array_function, |
| 1305 Context::ARRAY_FUNCTION_INDEX); | 1305 Context::ARRAY_FUNCTION_INDEX); |
| 1306 | 1306 |
| 1307 // Cache the array maps, needed by ArrayConstructorStub | 1307 // Cache the array maps, needed by ArrayConstructorStub |
| 1308 CacheInitialJSArrayMaps(native_context(), initial_map); | 1308 CacheInitialJSArrayMaps(native_context(), initial_map); |
| 1309 ArrayConstructorStub array_constructor_stub(isolate); | 1309 ArrayConstructorStub array_constructor_stub(isolate); |
| 1310 Handle<Code> code = array_constructor_stub.GetCode(); | 1310 Handle<Code> code = array_constructor_stub.GetCode(); |
| 1311 array_function->shared()->set_construct_stub(*code); | 1311 array_function->shared()->SetConstructStub(*code); |
| 1312 | 1312 |
| 1313 Handle<JSFunction> is_arraylike = SimpleInstallFunction( | 1313 Handle<JSFunction> is_arraylike = SimpleInstallFunction( |
| 1314 array_function, isolate->factory()->InternalizeUtf8String("isArray"), | 1314 array_function, isolate->factory()->InternalizeUtf8String("isArray"), |
| 1315 Builtins::kArrayIsArray, 1, true); | 1315 Builtins::kArrayIsArray, 1, true); |
| 1316 native_context()->set_is_arraylike(*is_arraylike); | 1316 native_context()->set_is_arraylike(*is_arraylike); |
| 1317 } | 1317 } |
| 1318 | 1318 |
| 1319 { // --- N u m b e r --- | 1319 { // --- N u m b e r --- |
| 1320 Handle<JSFunction> number_fun = InstallFunction( | 1320 Handle<JSFunction> number_fun = InstallFunction( |
| 1321 global, "Number", JS_VALUE_TYPE, JSValue::kSize, | 1321 global, "Number", JS_VALUE_TYPE, JSValue::kSize, |
| 1322 isolate->initial_object_prototype(), Builtins::kNumberConstructor); | 1322 isolate->initial_object_prototype(), Builtins::kNumberConstructor); |
| 1323 number_fun->shared()->DontAdaptArguments(); | 1323 number_fun->shared()->DontAdaptArguments(); |
| 1324 number_fun->shared()->set_construct_stub( | 1324 number_fun->shared()->SetConstructStub( |
| 1325 *isolate->builtins()->NumberConstructor_ConstructStub()); | 1325 *isolate->builtins()->NumberConstructor_ConstructStub()); |
| 1326 number_fun->shared()->set_length(1); | 1326 number_fun->shared()->set_length(1); |
| 1327 InstallWithIntrinsicDefaultProto(isolate, number_fun, | 1327 InstallWithIntrinsicDefaultProto(isolate, number_fun, |
| 1328 Context::NUMBER_FUNCTION_INDEX); | 1328 Context::NUMBER_FUNCTION_INDEX); |
| 1329 | 1329 |
| 1330 // Create the %NumberPrototype% | 1330 // Create the %NumberPrototype% |
| 1331 Handle<JSValue> prototype = | 1331 Handle<JSValue> prototype = |
| 1332 Handle<JSValue>::cast(factory->NewJSObject(number_fun, TENURED)); | 1332 Handle<JSValue>::cast(factory->NewJSObject(number_fun, TENURED)); |
| 1333 prototype->set_value(Smi::FromInt(0)); | 1333 prototype->set_value(Smi::FromInt(0)); |
| 1334 Accessors::FunctionSetPrototype(number_fun, prototype).Assert(); | 1334 Accessors::FunctionSetPrototype(number_fun, prototype).Assert(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1353 SimpleInstallFunction(prototype, "toLocaleString", | 1353 SimpleInstallFunction(prototype, "toLocaleString", |
| 1354 Builtins::kNumberPrototypeToLocaleString, 0, false); | 1354 Builtins::kNumberPrototypeToLocaleString, 0, false); |
| 1355 } | 1355 } |
| 1356 | 1356 |
| 1357 { // --- B o o l e a n --- | 1357 { // --- B o o l e a n --- |
| 1358 Handle<JSFunction> boolean_fun = | 1358 Handle<JSFunction> boolean_fun = |
| 1359 InstallFunction(global, "Boolean", JS_VALUE_TYPE, JSValue::kSize, | 1359 InstallFunction(global, "Boolean", JS_VALUE_TYPE, JSValue::kSize, |
| 1360 isolate->initial_object_prototype(), | 1360 isolate->initial_object_prototype(), |
| 1361 Builtins::kBooleanConstructor); | 1361 Builtins::kBooleanConstructor); |
| 1362 boolean_fun->shared()->DontAdaptArguments(); | 1362 boolean_fun->shared()->DontAdaptArguments(); |
| 1363 boolean_fun->shared()->set_construct_stub( | 1363 boolean_fun->shared()->SetConstructStub( |
| 1364 *isolate->builtins()->BooleanConstructor_ConstructStub()); | 1364 *isolate->builtins()->BooleanConstructor_ConstructStub()); |
| 1365 boolean_fun->shared()->set_length(1); | 1365 boolean_fun->shared()->set_length(1); |
| 1366 InstallWithIntrinsicDefaultProto(isolate, boolean_fun, | 1366 InstallWithIntrinsicDefaultProto(isolate, boolean_fun, |
| 1367 Context::BOOLEAN_FUNCTION_INDEX); | 1367 Context::BOOLEAN_FUNCTION_INDEX); |
| 1368 | 1368 |
| 1369 // Create the %BooleanPrototype% | 1369 // Create the %BooleanPrototype% |
| 1370 Handle<JSValue> prototype = | 1370 Handle<JSValue> prototype = |
| 1371 Handle<JSValue>::cast(factory->NewJSObject(boolean_fun, TENURED)); | 1371 Handle<JSValue>::cast(factory->NewJSObject(boolean_fun, TENURED)); |
| 1372 prototype->set_value(isolate->heap()->false_value()); | 1372 prototype->set_value(isolate->heap()->false_value()); |
| 1373 Accessors::FunctionSetPrototype(boolean_fun, prototype).Assert(); | 1373 Accessors::FunctionSetPrototype(boolean_fun, prototype).Assert(); |
| 1374 | 1374 |
| 1375 // Install the "constructor" property on the {prototype}. | 1375 // Install the "constructor" property on the {prototype}. |
| 1376 JSObject::AddProperty(prototype, factory->constructor_string(), boolean_fun, | 1376 JSObject::AddProperty(prototype, factory->constructor_string(), boolean_fun, |
| 1377 DONT_ENUM); | 1377 DONT_ENUM); |
| 1378 | 1378 |
| 1379 // Install the Boolean.prototype methods. | 1379 // Install the Boolean.prototype methods. |
| 1380 SimpleInstallFunction(prototype, "toString", | 1380 SimpleInstallFunction(prototype, "toString", |
| 1381 Builtins::kBooleanPrototypeToString, 0, true); | 1381 Builtins::kBooleanPrototypeToString, 0, true); |
| 1382 SimpleInstallFunction(prototype, "valueOf", | 1382 SimpleInstallFunction(prototype, "valueOf", |
| 1383 Builtins::kBooleanPrototypeValueOf, 0, true); | 1383 Builtins::kBooleanPrototypeValueOf, 0, true); |
| 1384 } | 1384 } |
| 1385 | 1385 |
| 1386 { // --- S t r i n g --- | 1386 { // --- S t r i n g --- |
| 1387 Handle<JSFunction> string_fun = InstallFunction( | 1387 Handle<JSFunction> string_fun = InstallFunction( |
| 1388 global, "String", JS_VALUE_TYPE, JSValue::kSize, | 1388 global, "String", JS_VALUE_TYPE, JSValue::kSize, |
| 1389 isolate->initial_object_prototype(), Builtins::kStringConstructor); | 1389 isolate->initial_object_prototype(), Builtins::kStringConstructor); |
| 1390 string_fun->shared()->set_construct_stub( | 1390 string_fun->shared()->SetConstructStub( |
| 1391 *isolate->builtins()->StringConstructor_ConstructStub()); | 1391 *isolate->builtins()->StringConstructor_ConstructStub()); |
| 1392 string_fun->shared()->DontAdaptArguments(); | 1392 string_fun->shared()->DontAdaptArguments(); |
| 1393 string_fun->shared()->set_length(1); | 1393 string_fun->shared()->set_length(1); |
| 1394 InstallWithIntrinsicDefaultProto(isolate, string_fun, | 1394 InstallWithIntrinsicDefaultProto(isolate, string_fun, |
| 1395 Context::STRING_FUNCTION_INDEX); | 1395 Context::STRING_FUNCTION_INDEX); |
| 1396 | 1396 |
| 1397 Handle<Map> string_map = | 1397 Handle<Map> string_map = |
| 1398 Handle<Map>(native_context()->string_function()->initial_map()); | 1398 Handle<Map>(native_context()->string_function()->initial_map()); |
| 1399 string_map->set_elements_kind(FAST_STRING_WRAPPER_ELEMENTS); | 1399 string_map->set_elements_kind(FAST_STRING_WRAPPER_ELEMENTS); |
| 1400 Map::EnsureDescriptorSlack(string_map, 1); | 1400 Map::EnsureDescriptorSlack(string_map, 1); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1445 Builtins::kStringPrototypeValueOf, 0, true); | 1445 Builtins::kStringPrototypeValueOf, 0, true); |
| 1446 } | 1446 } |
| 1447 | 1447 |
| 1448 { | 1448 { |
| 1449 // --- S y m b o l --- | 1449 // --- S y m b o l --- |
| 1450 Handle<JSObject> prototype = | 1450 Handle<JSObject> prototype = |
| 1451 factory->NewJSObject(isolate->object_function(), TENURED); | 1451 factory->NewJSObject(isolate->object_function(), TENURED); |
| 1452 Handle<JSFunction> symbol_fun = | 1452 Handle<JSFunction> symbol_fun = |
| 1453 InstallFunction(global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, | 1453 InstallFunction(global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, |
| 1454 prototype, Builtins::kSymbolConstructor); | 1454 prototype, Builtins::kSymbolConstructor); |
| 1455 symbol_fun->shared()->set_construct_stub( | 1455 symbol_fun->shared()->SetConstructStub( |
| 1456 *isolate->builtins()->SymbolConstructor_ConstructStub()); | 1456 *isolate->builtins()->SymbolConstructor_ConstructStub()); |
| 1457 symbol_fun->shared()->set_length(0); | 1457 symbol_fun->shared()->set_length(0); |
| 1458 symbol_fun->shared()->DontAdaptArguments(); | 1458 symbol_fun->shared()->DontAdaptArguments(); |
| 1459 native_context()->set_symbol_function(*symbol_fun); | 1459 native_context()->set_symbol_function(*symbol_fun); |
| 1460 | 1460 |
| 1461 // Install the @@toStringTag property on the {prototype}. | 1461 // Install the @@toStringTag property on the {prototype}. |
| 1462 JSObject::AddProperty( | 1462 JSObject::AddProperty( |
| 1463 prototype, factory->to_string_tag_symbol(), | 1463 prototype, factory->to_string_tag_symbol(), |
| 1464 factory->NewStringFromAsciiChecked("Symbol"), | 1464 factory->NewStringFromAsciiChecked("Symbol"), |
| 1465 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | 1465 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1490 | 1490 |
| 1491 { // --- D a t e --- | 1491 { // --- D a t e --- |
| 1492 // Builtin functions for Date.prototype. | 1492 // Builtin functions for Date.prototype. |
| 1493 Handle<JSObject> prototype = | 1493 Handle<JSObject> prototype = |
| 1494 factory->NewJSObject(isolate->object_function(), TENURED); | 1494 factory->NewJSObject(isolate->object_function(), TENURED); |
| 1495 Handle<JSFunction> date_fun = | 1495 Handle<JSFunction> date_fun = |
| 1496 InstallFunction(global, "Date", JS_DATE_TYPE, JSDate::kSize, prototype, | 1496 InstallFunction(global, "Date", JS_DATE_TYPE, JSDate::kSize, prototype, |
| 1497 Builtins::kDateConstructor); | 1497 Builtins::kDateConstructor); |
| 1498 InstallWithIntrinsicDefaultProto(isolate, date_fun, | 1498 InstallWithIntrinsicDefaultProto(isolate, date_fun, |
| 1499 Context::DATE_FUNCTION_INDEX); | 1499 Context::DATE_FUNCTION_INDEX); |
| 1500 date_fun->shared()->set_construct_stub( | 1500 date_fun->shared()->SetConstructStub( |
| 1501 *isolate->builtins()->DateConstructor_ConstructStub()); | 1501 *isolate->builtins()->DateConstructor_ConstructStub()); |
| 1502 date_fun->shared()->set_length(7); | 1502 date_fun->shared()->set_length(7); |
| 1503 date_fun->shared()->DontAdaptArguments(); | 1503 date_fun->shared()->DontAdaptArguments(); |
| 1504 | 1504 |
| 1505 // Install the Date.now, Date.parse and Date.UTC functions. | 1505 // Install the Date.now, Date.parse and Date.UTC functions. |
| 1506 SimpleInstallFunction(date_fun, "now", Builtins::kDateNow, 0, false); | 1506 SimpleInstallFunction(date_fun, "now", Builtins::kDateNow, 0, false); |
| 1507 SimpleInstallFunction(date_fun, "parse", Builtins::kDateParse, 1, false); | 1507 SimpleInstallFunction(date_fun, "parse", Builtins::kDateParse, 1, false); |
| 1508 SimpleInstallFunction(date_fun, "UTC", Builtins::kDateUTC, 7, false); | 1508 SimpleInstallFunction(date_fun, "UTC", Builtins::kDateUTC, 7, false); |
| 1509 | 1509 |
| 1510 // Install the "constructor" property on the {prototype}. | 1510 // Install the "constructor" property on the {prototype}. |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1623 } | 1623 } |
| 1624 | 1624 |
| 1625 { // -- R e g E x p | 1625 { // -- R e g E x p |
| 1626 // Builtin functions for RegExp.prototype. | 1626 // Builtin functions for RegExp.prototype. |
| 1627 Handle<JSFunction> regexp_fun = | 1627 Handle<JSFunction> regexp_fun = |
| 1628 InstallFunction(global, "RegExp", JS_REGEXP_TYPE, JSRegExp::kSize, | 1628 InstallFunction(global, "RegExp", JS_REGEXP_TYPE, JSRegExp::kSize, |
| 1629 isolate->initial_object_prototype(), | 1629 isolate->initial_object_prototype(), |
| 1630 Builtins::kIllegal); | 1630 Builtins::kIllegal); |
| 1631 InstallWithIntrinsicDefaultProto(isolate, regexp_fun, | 1631 InstallWithIntrinsicDefaultProto(isolate, regexp_fun, |
| 1632 Context::REGEXP_FUNCTION_INDEX); | 1632 Context::REGEXP_FUNCTION_INDEX); |
| 1633 regexp_fun->shared()->set_construct_stub( | 1633 regexp_fun->shared()->SetConstructStub( |
| 1634 *isolate->builtins()->JSBuiltinsConstructStub()); | 1634 *isolate->builtins()->JSBuiltinsConstructStub()); |
| 1635 | 1635 |
| 1636 DCHECK(regexp_fun->has_initial_map()); | 1636 DCHECK(regexp_fun->has_initial_map()); |
| 1637 Handle<Map> initial_map(regexp_fun->initial_map()); | 1637 Handle<Map> initial_map(regexp_fun->initial_map()); |
| 1638 | 1638 |
| 1639 DCHECK_EQ(0, initial_map->GetInObjectProperties()); | 1639 DCHECK_EQ(0, initial_map->GetInObjectProperties()); |
| 1640 | 1640 |
| 1641 Map::EnsureDescriptorSlack(initial_map, 1); | 1641 Map::EnsureDescriptorSlack(initial_map, 1); |
| 1642 | 1642 |
| 1643 // ECMA-262, section 15.10.7.5. | 1643 // ECMA-262, section 15.10.7.5. |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1867 | 1867 |
| 1868 { // -- D a t a V i e w | 1868 { // -- D a t a V i e w |
| 1869 Handle<JSObject> prototype = | 1869 Handle<JSObject> prototype = |
| 1870 factory->NewJSObject(isolate->object_function(), TENURED); | 1870 factory->NewJSObject(isolate->object_function(), TENURED); |
| 1871 Handle<JSFunction> data_view_fun = | 1871 Handle<JSFunction> data_view_fun = |
| 1872 InstallFunction(global, "DataView", JS_DATA_VIEW_TYPE, | 1872 InstallFunction(global, "DataView", JS_DATA_VIEW_TYPE, |
| 1873 JSDataView::kSizeWithInternalFields, prototype, | 1873 JSDataView::kSizeWithInternalFields, prototype, |
| 1874 Builtins::kDataViewConstructor); | 1874 Builtins::kDataViewConstructor); |
| 1875 InstallWithIntrinsicDefaultProto(isolate, data_view_fun, | 1875 InstallWithIntrinsicDefaultProto(isolate, data_view_fun, |
| 1876 Context::DATA_VIEW_FUN_INDEX); | 1876 Context::DATA_VIEW_FUN_INDEX); |
| 1877 data_view_fun->shared()->set_construct_stub( | 1877 data_view_fun->shared()->SetConstructStub( |
| 1878 *isolate->builtins()->DataViewConstructor_ConstructStub()); | 1878 *isolate->builtins()->DataViewConstructor_ConstructStub()); |
| 1879 data_view_fun->shared()->set_length(3); | 1879 data_view_fun->shared()->set_length(3); |
| 1880 data_view_fun->shared()->DontAdaptArguments(); | 1880 data_view_fun->shared()->DontAdaptArguments(); |
| 1881 | 1881 |
| 1882 // Install the @@toStringTag property on the {prototype}. | 1882 // Install the @@toStringTag property on the {prototype}. |
| 1883 JSObject::AddProperty( | 1883 JSObject::AddProperty( |
| 1884 prototype, factory->to_string_tag_symbol(), | 1884 prototype, factory->to_string_tag_symbol(), |
| 1885 factory->NewStringFromAsciiChecked("DataView"), | 1885 factory->NewStringFromAsciiChecked("DataView"), |
| 1886 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | 1886 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); |
| 1887 | 1887 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1964 Handle<Code> code(isolate->builtins()->ProxyConstructor()); | 1964 Handle<Code> code(isolate->builtins()->ProxyConstructor()); |
| 1965 | 1965 |
| 1966 Handle<JSFunction> proxy_function = | 1966 Handle<JSFunction> proxy_function = |
| 1967 factory->NewFunction(isolate->proxy_function_map(), | 1967 factory->NewFunction(isolate->proxy_function_map(), |
| 1968 factory->Proxy_string(), MaybeHandle<Code>(code)); | 1968 factory->Proxy_string(), MaybeHandle<Code>(code)); |
| 1969 | 1969 |
| 1970 JSFunction::SetInitialMap( | 1970 JSFunction::SetInitialMap( |
| 1971 proxy_function, Handle<Map>(native_context()->proxy_map(), isolate), | 1971 proxy_function, Handle<Map>(native_context()->proxy_map(), isolate), |
| 1972 factory->null_value()); | 1972 factory->null_value()); |
| 1973 | 1973 |
| 1974 proxy_function->shared()->set_construct_stub( | 1974 proxy_function->shared()->SetConstructStub( |
| 1975 *isolate->builtins()->ProxyConstructor_ConstructStub()); | 1975 *isolate->builtins()->ProxyConstructor_ConstructStub()); |
| 1976 proxy_function->shared()->set_internal_formal_parameter_count(2); | 1976 proxy_function->shared()->set_internal_formal_parameter_count(2); |
| 1977 proxy_function->shared()->set_length(2); | 1977 proxy_function->shared()->set_length(2); |
| 1978 | 1978 |
| 1979 native_context()->set_proxy_function(*proxy_function); | 1979 native_context()->set_proxy_function(*proxy_function); |
| 1980 InstallFunction(global, name, proxy_function, factory->Object_string()); | 1980 InstallFunction(global, name, proxy_function, factory->Object_string()); |
| 1981 } | 1981 } |
| 1982 | 1982 |
| 1983 { // -- R e f l e c t | 1983 { // -- R e f l e c t |
| 1984 Handle<String> reflect_string = factory->InternalizeUtf8String("Reflect"); | 1984 Handle<String> reflect_string = factory->InternalizeUtf8String("Reflect"); |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2505 generator_function_prototype, NONE); | 2505 generator_function_prototype, NONE); |
| 2506 | 2506 |
| 2507 static const bool kUseStrictFunctionMap = true; | 2507 static const bool kUseStrictFunctionMap = true; |
| 2508 Handle<JSFunction> generator_function_function = InstallFunction( | 2508 Handle<JSFunction> generator_function_function = InstallFunction( |
| 2509 container, "GeneratorFunction", JS_FUNCTION_TYPE, JSFunction::kSize, | 2509 container, "GeneratorFunction", JS_FUNCTION_TYPE, JSFunction::kSize, |
| 2510 generator_function_prototype, Builtins::kGeneratorFunctionConstructor, | 2510 generator_function_prototype, Builtins::kGeneratorFunctionConstructor, |
| 2511 kUseStrictFunctionMap); | 2511 kUseStrictFunctionMap); |
| 2512 generator_function_function->set_prototype_or_initial_map( | 2512 generator_function_function->set_prototype_or_initial_map( |
| 2513 native_context->sloppy_generator_function_map()); | 2513 native_context->sloppy_generator_function_map()); |
| 2514 generator_function_function->shared()->DontAdaptArguments(); | 2514 generator_function_function->shared()->DontAdaptArguments(); |
| 2515 generator_function_function->shared()->set_construct_stub( | 2515 generator_function_function->shared()->SetConstructStub( |
| 2516 *isolate->builtins()->GeneratorFunctionConstructor()); | 2516 *isolate->builtins()->GeneratorFunctionConstructor()); |
| 2517 generator_function_function->shared()->set_length(1); | 2517 generator_function_function->shared()->set_length(1); |
| 2518 InstallWithIntrinsicDefaultProto( | 2518 InstallWithIntrinsicDefaultProto( |
| 2519 isolate, generator_function_function, | 2519 isolate, generator_function_function, |
| 2520 Context::GENERATOR_FUNCTION_FUNCTION_INDEX); | 2520 Context::GENERATOR_FUNCTION_FUNCTION_INDEX); |
| 2521 | 2521 |
| 2522 SetObjectPrototype(generator_function_function, | 2522 SetObjectPrototype(generator_function_function, |
| 2523 isolate->function_function()); | 2523 isolate->function_function()); |
| 2524 JSObject::AddProperty( | 2524 JSObject::AddProperty( |
| 2525 generator_function_prototype, factory->constructor_string(), | 2525 generator_function_prototype, factory->constructor_string(), |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2702 { | 2702 { |
| 2703 PrototypeIterator iter(native_context->sloppy_async_function_map()); | 2703 PrototypeIterator iter(native_context->sloppy_async_function_map()); |
| 2704 Handle<JSObject> async_function_prototype(iter.GetCurrent<JSObject>()); | 2704 Handle<JSObject> async_function_prototype(iter.GetCurrent<JSObject>()); |
| 2705 | 2705 |
| 2706 static const bool kUseStrictFunctionMap = true; | 2706 static const bool kUseStrictFunctionMap = true; |
| 2707 Handle<JSFunction> async_function_constructor = InstallFunction( | 2707 Handle<JSFunction> async_function_constructor = InstallFunction( |
| 2708 container, "AsyncFunction", JS_FUNCTION_TYPE, JSFunction::kSize, | 2708 container, "AsyncFunction", JS_FUNCTION_TYPE, JSFunction::kSize, |
| 2709 async_function_prototype, Builtins::kAsyncFunctionConstructor, | 2709 async_function_prototype, Builtins::kAsyncFunctionConstructor, |
| 2710 kUseStrictFunctionMap); | 2710 kUseStrictFunctionMap); |
| 2711 async_function_constructor->shared()->DontAdaptArguments(); | 2711 async_function_constructor->shared()->DontAdaptArguments(); |
| 2712 async_function_constructor->shared()->set_construct_stub( | 2712 async_function_constructor->shared()->SetConstructStub( |
| 2713 *isolate->builtins()->AsyncFunctionConstructor()); | 2713 *isolate->builtins()->AsyncFunctionConstructor()); |
| 2714 async_function_constructor->shared()->set_length(1); | 2714 async_function_constructor->shared()->set_length(1); |
| 2715 InstallWithIntrinsicDefaultProto(isolate, async_function_constructor, | 2715 InstallWithIntrinsicDefaultProto(isolate, async_function_constructor, |
| 2716 Context::ASYNC_FUNCTION_FUNCTION_INDEX); | 2716 Context::ASYNC_FUNCTION_FUNCTION_INDEX); |
| 2717 SetObjectPrototype(async_function_constructor, | 2717 SetObjectPrototype(async_function_constructor, |
| 2718 isolate->function_function()); | 2718 isolate->function_function()); |
| 2719 | 2719 |
| 2720 JSObject::AddProperty( | 2720 JSObject::AddProperty( |
| 2721 async_function_prototype, factory->constructor_string(), | 2721 async_function_prototype, factory->constructor_string(), |
| 2722 async_function_constructor, | 2722 async_function_constructor, |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2913 factory()->NewJSObject(isolate()->object_function(), TENURED); | 2913 factory()->NewJSObject(isolate()->object_function(), TENURED); |
| 2914 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(), | 2914 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(), |
| 2915 factory()->NewStringFromAsciiChecked(name), | 2915 factory()->NewStringFromAsciiChecked(name), |
| 2916 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | 2916 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); |
| 2917 | 2917 |
| 2918 // Allocate the constructor with the given {prototype}. | 2918 // Allocate the constructor with the given {prototype}. |
| 2919 Handle<JSFunction> array_buffer_fun = | 2919 Handle<JSFunction> array_buffer_fun = |
| 2920 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE, | 2920 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE, |
| 2921 JSArrayBuffer::kSizeWithInternalFields, prototype, | 2921 JSArrayBuffer::kSizeWithInternalFields, prototype, |
| 2922 Builtins::kArrayBufferConstructor); | 2922 Builtins::kArrayBufferConstructor); |
| 2923 array_buffer_fun->shared()->set_construct_stub( | 2923 array_buffer_fun->shared()->SetConstructStub( |
| 2924 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub()); | 2924 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub()); |
| 2925 array_buffer_fun->shared()->DontAdaptArguments(); | 2925 array_buffer_fun->shared()->DontAdaptArguments(); |
| 2926 array_buffer_fun->shared()->set_length(1); | 2926 array_buffer_fun->shared()->set_length(1); |
| 2927 | 2927 |
| 2928 // Install the "constructor" property on the {prototype}. | 2928 // Install the "constructor" property on the {prototype}. |
| 2929 JSObject::AddProperty(prototype, factory()->constructor_string(), | 2929 JSObject::AddProperty(prototype, factory()->constructor_string(), |
| 2930 array_buffer_fun, DONT_ENUM); | 2930 array_buffer_fun, DONT_ENUM); |
| 2931 | 2931 |
| 2932 SimpleInstallFunction(array_buffer_fun, factory()->isView_string(), | 2932 SimpleInstallFunction(array_buffer_fun, factory()->isView_string(), |
| 2933 Builtins::kArrayBufferIsView, 1, true); | 2933 Builtins::kArrayBufferIsView, 1, true); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2950 // To be used only for internal work by builtins. Instances | 2950 // To be used only for internal work by builtins. Instances |
| 2951 // must not be leaked to user code. | 2951 // must not be leaked to user code. |
| 2952 Handle<JSObject> prototype = | 2952 Handle<JSObject> prototype = |
| 2953 factory()->NewJSObject(isolate()->object_function(), TENURED); | 2953 factory()->NewJSObject(isolate()->object_function(), TENURED); |
| 2954 Handle<JSFunction> array_function = | 2954 Handle<JSFunction> array_function = |
| 2955 InstallFunction(target, name, JS_ARRAY_TYPE, JSArray::kSize, prototype, | 2955 InstallFunction(target, name, JS_ARRAY_TYPE, JSArray::kSize, prototype, |
| 2956 Builtins::kInternalArrayCode); | 2956 Builtins::kInternalArrayCode); |
| 2957 | 2957 |
| 2958 InternalArrayConstructorStub internal_array_constructor_stub(isolate()); | 2958 InternalArrayConstructorStub internal_array_constructor_stub(isolate()); |
| 2959 Handle<Code> code = internal_array_constructor_stub.GetCode(); | 2959 Handle<Code> code = internal_array_constructor_stub.GetCode(); |
| 2960 array_function->shared()->set_construct_stub(*code); | 2960 array_function->shared()->SetConstructStub(*code); |
| 2961 array_function->shared()->DontAdaptArguments(); | 2961 array_function->shared()->DontAdaptArguments(); |
| 2962 | 2962 |
| 2963 Handle<Map> original_map(array_function->initial_map()); | 2963 Handle<Map> original_map(array_function->initial_map()); |
| 2964 Handle<Map> initial_map = Map::Copy(original_map, "InternalArray"); | 2964 Handle<Map> initial_map = Map::Copy(original_map, "InternalArray"); |
| 2965 initial_map->set_elements_kind(elements_kind); | 2965 initial_map->set_elements_kind(elements_kind); |
| 2966 JSFunction::SetInitialMap(array_function, initial_map, prototype); | 2966 JSFunction::SetInitialMap(array_function, initial_map, prototype); |
| 2967 | 2967 |
| 2968 // Make "length" magic on instances. | 2968 // Make "length" magic on instances. |
| 2969 Map::EnsureDescriptorSlack(initial_map, 1); | 2969 Map::EnsureDescriptorSlack(initial_map, 1); |
| 2970 | 2970 |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3140 concat->shared()->set_length(1); | 3140 concat->shared()->set_length(1); |
| 3141 } | 3141 } |
| 3142 | 3142 |
| 3143 // Set up the Promise constructor. | 3143 // Set up the Promise constructor. |
| 3144 { | 3144 { |
| 3145 Handle<String> key = factory()->Promise_string(); | 3145 Handle<String> key = factory()->Promise_string(); |
| 3146 Handle<JSFunction> function = Handle<JSFunction>::cast( | 3146 Handle<JSFunction> function = Handle<JSFunction>::cast( |
| 3147 JSReceiver::GetProperty(global_object, key).ToHandleChecked()); | 3147 JSReceiver::GetProperty(global_object, key).ToHandleChecked()); |
| 3148 JSFunction::EnsureHasInitialMap(function); | 3148 JSFunction::EnsureHasInitialMap(function); |
| 3149 function->initial_map()->set_instance_type(JS_PROMISE_TYPE); | 3149 function->initial_map()->set_instance_type(JS_PROMISE_TYPE); |
| 3150 function->shared()->set_construct_stub( | 3150 function->shared()->SetConstructStub( |
| 3151 *isolate()->builtins()->JSBuiltinsConstructStub()); | 3151 *isolate()->builtins()->JSBuiltinsConstructStub()); |
| 3152 InstallWithIntrinsicDefaultProto(isolate(), function, | 3152 InstallWithIntrinsicDefaultProto(isolate(), function, |
| 3153 Context::PROMISE_FUNCTION_INDEX); | 3153 Context::PROMISE_FUNCTION_INDEX); |
| 3154 } | 3154 } |
| 3155 | 3155 |
| 3156 InstallBuiltinFunctionIds(); | 3156 InstallBuiltinFunctionIds(); |
| 3157 | 3157 |
| 3158 // Create a map for accessor property descriptors (a variant of JSObject | 3158 // Create a map for accessor property descriptors (a variant of JSObject |
| 3159 // that predefines four properties get, set, configurable and enumerable). | 3159 // that predefines four properties get, set, configurable and enumerable). |
| 3160 { | 3160 { |
| (...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4098 } | 4098 } |
| 4099 | 4099 |
| 4100 | 4100 |
| 4101 // Called when the top-level V8 mutex is destroyed. | 4101 // Called when the top-level V8 mutex is destroyed. |
| 4102 void Bootstrapper::FreeThreadResources() { | 4102 void Bootstrapper::FreeThreadResources() { |
| 4103 DCHECK(!IsActive()); | 4103 DCHECK(!IsActive()); |
| 4104 } | 4104 } |
| 4105 | 4105 |
| 4106 } // namespace internal | 4106 } // namespace internal |
| 4107 } // namespace v8 | 4107 } // namespace v8 |
| OLD | NEW |