| 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 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 } | 500 } |
| 501 | 501 |
| 502 Handle<JSFunction> SimpleInstallGetter(Handle<JSObject> base, | 502 Handle<JSFunction> SimpleInstallGetter(Handle<JSObject> base, |
| 503 Handle<String> name, Builtins::Name call, | 503 Handle<String> name, Builtins::Name call, |
| 504 bool adapt, BuiltinFunctionId id) { | 504 bool adapt, BuiltinFunctionId id) { |
| 505 Handle<JSFunction> fun = SimpleInstallGetter(base, name, call, adapt); | 505 Handle<JSFunction> fun = SimpleInstallGetter(base, name, call, adapt); |
| 506 fun->shared()->set_builtin_function_id(id); | 506 fun->shared()->set_builtin_function_id(id); |
| 507 return fun; | 507 return fun; |
| 508 } | 508 } |
| 509 | 509 |
| 510 void InstallConstant(Isolate* isolate, Handle<JSObject> holder, |
| 511 const char* name, Handle<Object> value) { |
| 512 JSObject::AddProperty( |
| 513 holder, isolate->factory()->NewStringFromAsciiChecked(name), value, |
| 514 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); |
| 515 } |
| 516 |
| 510 } // namespace | 517 } // namespace |
| 511 | 518 |
| 512 Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { | 519 Handle<JSFunction> Genesis::CreateEmptyFunction(Isolate* isolate) { |
| 513 // Allocate the map for function instances. Maps are allocated first and their | 520 // Allocate the map for function instances. Maps are allocated first and their |
| 514 // prototypes patched later, once empty function is created. | 521 // prototypes patched later, once empty function is created. |
| 515 | 522 |
| 516 // Functions with this map will not have a 'prototype' property, and | 523 // Functions with this map will not have a 'prototype' property, and |
| 517 // can not be used as constructors. | 524 // can not be used as constructors. |
| 518 Handle<Map> function_without_prototype_map = | 525 Handle<Map> function_without_prototype_map = |
| 519 factory()->CreateSloppyFunctionMap(FUNCTION_WITHOUT_PROTOTYPE); | 526 factory()->CreateSloppyFunctionMap(FUNCTION_WITHOUT_PROTOTYPE); |
| (...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1617 factory->NewJSObject(isolate->object_function(), TENURED); | 1624 factory->NewJSObject(isolate->object_function(), TENURED); |
| 1618 Handle<JSFunction> symbol_fun = | 1625 Handle<JSFunction> symbol_fun = |
| 1619 InstallFunction(global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, | 1626 InstallFunction(global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, |
| 1620 prototype, Builtins::kSymbolConstructor); | 1627 prototype, Builtins::kSymbolConstructor); |
| 1621 symbol_fun->shared()->SetConstructStub( | 1628 symbol_fun->shared()->SetConstructStub( |
| 1622 *isolate->builtins()->SymbolConstructor_ConstructStub()); | 1629 *isolate->builtins()->SymbolConstructor_ConstructStub()); |
| 1623 symbol_fun->shared()->set_length(0); | 1630 symbol_fun->shared()->set_length(0); |
| 1624 symbol_fun->shared()->DontAdaptArguments(); | 1631 symbol_fun->shared()->DontAdaptArguments(); |
| 1625 native_context()->set_symbol_function(*symbol_fun); | 1632 native_context()->set_symbol_function(*symbol_fun); |
| 1626 | 1633 |
| 1634 // Install the Symbol.for and Symbol.keyFor functions. |
| 1635 SimpleInstallFunction(symbol_fun, "for", Builtins::kSymbolFor, 1, false); |
| 1636 SimpleInstallFunction(symbol_fun, "keyFor", Builtins::kSymbolKeyFor, 1, |
| 1637 false); |
| 1638 |
| 1639 // Install well-known symbols. |
| 1640 InstallConstant(isolate, symbol_fun, "hasInstance", |
| 1641 factory->has_instance_symbol()); |
| 1642 InstallConstant(isolate, symbol_fun, "isConcatSpreadable", |
| 1643 factory->is_concat_spreadable_symbol()); |
| 1644 InstallConstant(isolate, symbol_fun, "iterator", |
| 1645 factory->iterator_symbol()); |
| 1646 InstallConstant(isolate, symbol_fun, "match", factory->match_symbol()); |
| 1647 InstallConstant(isolate, symbol_fun, "replace", factory->replace_symbol()); |
| 1648 InstallConstant(isolate, symbol_fun, "search", factory->search_symbol()); |
| 1649 InstallConstant(isolate, symbol_fun, "species", factory->species_symbol()); |
| 1650 InstallConstant(isolate, symbol_fun, "split", factory->split_symbol()); |
| 1651 InstallConstant(isolate, symbol_fun, "toPrimitive", |
| 1652 factory->to_primitive_symbol()); |
| 1653 InstallConstant(isolate, symbol_fun, "toStringTag", |
| 1654 factory->to_string_tag_symbol()); |
| 1655 InstallConstant(isolate, symbol_fun, "unscopables", |
| 1656 factory->unscopables_symbol()); |
| 1657 |
| 1627 // Install the @@toStringTag property on the {prototype}. | 1658 // Install the @@toStringTag property on the {prototype}. |
| 1628 JSObject::AddProperty( | 1659 JSObject::AddProperty( |
| 1629 prototype, factory->to_string_tag_symbol(), | 1660 prototype, factory->to_string_tag_symbol(), |
| 1630 factory->NewStringFromAsciiChecked("Symbol"), | 1661 factory->NewStringFromAsciiChecked("Symbol"), |
| 1631 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | 1662 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); |
| 1632 | 1663 |
| 1633 // Install the "constructor" property on the {prototype}. | 1664 // Install the "constructor" property on the {prototype}. |
| 1634 JSObject::AddProperty(prototype, factory->constructor_string(), symbol_fun, | 1665 JSObject::AddProperty(prototype, factory->constructor_string(), symbol_fun, |
| 1635 DONT_ENUM); | 1666 DONT_ENUM); |
| 1636 | 1667 |
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2175 SimpleInstallFunction(math, "sin", Builtins::kMathSin, 1, true); | 2206 SimpleInstallFunction(math, "sin", Builtins::kMathSin, 1, true); |
| 2176 SimpleInstallFunction(math, "sinh", Builtins::kMathSinh, 1, true); | 2207 SimpleInstallFunction(math, "sinh", Builtins::kMathSinh, 1, true); |
| 2177 SimpleInstallFunction(math, "sqrt", Builtins::kMathSqrt, 1, true); | 2208 SimpleInstallFunction(math, "sqrt", Builtins::kMathSqrt, 1, true); |
| 2178 SimpleInstallFunction(math, "tan", Builtins::kMathTan, 1, true); | 2209 SimpleInstallFunction(math, "tan", Builtins::kMathTan, 1, true); |
| 2179 SimpleInstallFunction(math, "tanh", Builtins::kMathTanh, 1, true); | 2210 SimpleInstallFunction(math, "tanh", Builtins::kMathTanh, 1, true); |
| 2180 SimpleInstallFunction(math, "trunc", Builtins::kMathTrunc, 1, true); | 2211 SimpleInstallFunction(math, "trunc", Builtins::kMathTrunc, 1, true); |
| 2181 | 2212 |
| 2182 // Install math constants. | 2213 // Install math constants. |
| 2183 double const kE = base::ieee754::exp(1.0); | 2214 double const kE = base::ieee754::exp(1.0); |
| 2184 double const kPI = 3.1415926535897932; | 2215 double const kPI = 3.1415926535897932; |
| 2185 JSObject::AddProperty( | 2216 InstallConstant(isolate, math, "E", factory->NewNumber(kE)); |
| 2186 math, factory->NewStringFromAsciiChecked("E"), factory->NewNumber(kE), | 2217 InstallConstant(isolate, math, "LN10", |
| 2187 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); | 2218 factory->NewNumber(base::ieee754::log(10.0))); |
| 2188 JSObject::AddProperty( | 2219 InstallConstant(isolate, math, "LN2", |
| 2189 math, factory->NewStringFromAsciiChecked("LN10"), | 2220 factory->NewNumber(base::ieee754::log(2.0))); |
| 2190 factory->NewNumber(base::ieee754::log(10.0)), | 2221 InstallConstant(isolate, math, "LOG10E", |
| 2191 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); | 2222 factory->NewNumber(base::ieee754::log10(kE))); |
| 2192 JSObject::AddProperty( | 2223 InstallConstant(isolate, math, "LOG2E", |
| 2193 math, factory->NewStringFromAsciiChecked("LN2"), | 2224 factory->NewNumber(base::ieee754::log2(kE))); |
| 2194 factory->NewNumber(base::ieee754::log(2.0)), | 2225 InstallConstant(isolate, math, "PI", factory->NewNumber(kPI)); |
| 2195 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); | 2226 InstallConstant(isolate, math, "SQRT1_2", |
| 2196 JSObject::AddProperty( | 2227 factory->NewNumber(std::sqrt(0.5))); |
| 2197 math, factory->NewStringFromAsciiChecked("LOG10E"), | 2228 InstallConstant(isolate, math, "SQRT2", factory->NewNumber(std::sqrt(2.0))); |
| 2198 factory->NewNumber(base::ieee754::log10(kE)), | |
| 2199 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); | |
| 2200 JSObject::AddProperty( | |
| 2201 math, factory->NewStringFromAsciiChecked("LOG2E"), | |
| 2202 factory->NewNumber(base::ieee754::log2(kE)), | |
| 2203 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); | |
| 2204 JSObject::AddProperty( | |
| 2205 math, factory->NewStringFromAsciiChecked("PI"), factory->NewNumber(kPI), | |
| 2206 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); | |
| 2207 JSObject::AddProperty( | |
| 2208 math, factory->NewStringFromAsciiChecked("SQRT1_2"), | |
| 2209 factory->NewNumber(std::sqrt(0.5)), | |
| 2210 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); | |
| 2211 JSObject::AddProperty( | |
| 2212 math, factory->NewStringFromAsciiChecked("SQRT2"), | |
| 2213 factory->NewNumber(std::sqrt(2.0)), | |
| 2214 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY)); | |
| 2215 JSObject::AddProperty( | 2229 JSObject::AddProperty( |
| 2216 math, factory->to_string_tag_symbol(), | 2230 math, factory->to_string_tag_symbol(), |
| 2217 factory->NewStringFromAsciiChecked("Math"), | 2231 factory->NewStringFromAsciiChecked("Math"), |
| 2218 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | 2232 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); |
| 2219 } | 2233 } |
| 2220 | 2234 |
| 2221 { // -- A r r a y B u f f e r | 2235 { // -- A r r a y B u f f e r |
| 2222 Handle<JSFunction> array_buffer_fun = InstallArrayBuffer( | 2236 Handle<JSFunction> array_buffer_fun = InstallArrayBuffer( |
| 2223 global, "ArrayBuffer", Builtins::kArrayBufferPrototypeGetByteLength, | 2237 global, "ArrayBuffer", Builtins::kArrayBufferPrototypeGetByteLength, |
| 2224 BuiltinFunctionId::kArrayBufferByteLength); | 2238 BuiltinFunctionId::kArrayBufferByteLength); |
| (...skipping 2354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4579 } | 4593 } |
| 4580 | 4594 |
| 4581 | 4595 |
| 4582 // Called when the top-level V8 mutex is destroyed. | 4596 // Called when the top-level V8 mutex is destroyed. |
| 4583 void Bootstrapper::FreeThreadResources() { | 4597 void Bootstrapper::FreeThreadResources() { |
| 4584 DCHECK(!IsActive()); | 4598 DCHECK(!IsActive()); |
| 4585 } | 4599 } |
| 4586 | 4600 |
| 4587 } // namespace internal | 4601 } // namespace internal |
| 4588 } // namespace v8 | 4602 } // namespace v8 |
| OLD | NEW |