Chromium Code Reviews| 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 1024 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1035 PropertyAttributes attribs = DONT_ENUM; | 1035 PropertyAttributes attribs = DONT_ENUM; |
| 1036 Handle<AccessorInfo> error_stack = | 1036 Handle<AccessorInfo> error_stack = |
| 1037 Accessors::ErrorStackInfo(isolate, attribs); | 1037 Accessors::ErrorStackInfo(isolate, attribs); |
| 1038 { | 1038 { |
| 1039 AccessorConstantDescriptor d(Handle<Name>(Name::cast(error_stack->name())), | 1039 AccessorConstantDescriptor d(Handle<Name>(Name::cast(error_stack->name())), |
| 1040 error_stack, attribs); | 1040 error_stack, attribs); |
| 1041 initial_map->AppendDescriptor(&d); | 1041 initial_map->AppendDescriptor(&d); |
| 1042 } | 1042 } |
| 1043 } | 1043 } |
| 1044 | 1044 |
| 1045 static void InstallMakeError(Isolate* isolate, Handle<Code> code, | |
| 1046 int context_index) { | |
| 1047 Handle<JSFunction> function = | |
| 1048 isolate->factory()->NewFunction(isolate->factory()->empty_string(), code, | |
| 1049 JS_OBJECT_TYPE, JSObject::kHeaderSize); | |
| 1050 function->shared()->DontAdaptArguments(); | |
| 1051 isolate->native_context()->set(context_index, *function); | |
| 1052 } | |
| 1053 | |
| 1045 // This is only called if we are not using snapshots. The equivalent | 1054 // This is only called if we are not using snapshots. The equivalent |
| 1046 // work in the snapshot case is done in HookUpGlobalObject. | 1055 // work in the snapshot case is done in HookUpGlobalObject. |
| 1047 void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, | 1056 void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, |
| 1048 Handle<JSFunction> empty_function, | 1057 Handle<JSFunction> empty_function, |
| 1049 GlobalContextType context_type) { | 1058 GlobalContextType context_type) { |
| 1050 // --- N a t i v e C o n t e x t --- | 1059 // --- N a t i v e C o n t e x t --- |
| 1051 // Use the empty function as closure (no scope info). | 1060 // Use the empty function as closure (no scope info). |
| 1052 native_context()->set_closure(*empty_function); | 1061 native_context()->set_closure(*empty_function); |
| 1053 native_context()->set_previous(NULL); | 1062 native_context()->set_previous(NULL); |
| 1054 // Set extension and global object. | 1063 // Set extension and global object. |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1584 static const int num_fields = JSRegExp::kInObjectFieldCount; | 1593 static const int num_fields = JSRegExp::kInObjectFieldCount; |
| 1585 initial_map->SetInObjectProperties(num_fields); | 1594 initial_map->SetInObjectProperties(num_fields); |
| 1586 initial_map->set_unused_property_fields(0); | 1595 initial_map->set_unused_property_fields(0); |
| 1587 initial_map->set_instance_size(initial_map->instance_size() + | 1596 initial_map->set_instance_size(initial_map->instance_size() + |
| 1588 num_fields * kPointerSize); | 1597 num_fields * kPointerSize); |
| 1589 } | 1598 } |
| 1590 | 1599 |
| 1591 { // -- E r r o r | 1600 { // -- E r r o r |
| 1592 InstallError(isolate, global, factory->Error_string(), | 1601 InstallError(isolate, global, factory->Error_string(), |
| 1593 Context::ERROR_FUNCTION_INDEX); | 1602 Context::ERROR_FUNCTION_INDEX); |
| 1603 InstallMakeError(isolate, isolate->builtins()->MakeError(), | |
| 1604 Context::MAKE_ERROR_INDEX); | |
| 1594 } | 1605 } |
| 1595 | 1606 |
| 1596 { // -- E v a l E r r o r | 1607 { // -- E v a l E r r o r |
| 1597 InstallError(isolate, global, factory->EvalError_string(), | 1608 InstallError(isolate, global, factory->EvalError_string(), |
| 1598 Context::EVAL_ERROR_FUNCTION_INDEX); | 1609 Context::EVAL_ERROR_FUNCTION_INDEX); |
| 1599 } | 1610 } |
| 1600 | 1611 |
| 1601 { // -- R a n g e E r r o r | 1612 { // -- R a n g e E r r o r |
| 1602 InstallError(isolate, global, factory->RangeError_string(), | 1613 InstallError(isolate, global, factory->RangeError_string(), |
| 1603 Context::RANGE_ERROR_FUNCTION_INDEX); | 1614 Context::RANGE_ERROR_FUNCTION_INDEX); |
| 1615 InstallMakeError(isolate, isolate->builtins()->MakeRangeError(), | |
| 1616 Context::MAKE_RANGE_ERROR_INDEX); | |
| 1604 } | 1617 } |
| 1605 | 1618 |
| 1606 { // -- R e f e r e n c e E r r o r | 1619 { // -- R e f e r e n c e E r r o r |
| 1607 InstallError(isolate, global, factory->ReferenceError_string(), | 1620 InstallError(isolate, global, factory->ReferenceError_string(), |
| 1608 Context::REFERENCE_ERROR_FUNCTION_INDEX); | 1621 Context::REFERENCE_ERROR_FUNCTION_INDEX); |
| 1609 } | 1622 } |
| 1610 | 1623 |
| 1611 { // -- S y n t a x E r r o r | 1624 { // -- S y n t a x E r r o r |
| 1612 InstallError(isolate, global, factory->SyntaxError_string(), | 1625 InstallError(isolate, global, factory->SyntaxError_string(), |
| 1613 Context::SYNTAX_ERROR_FUNCTION_INDEX); | 1626 Context::SYNTAX_ERROR_FUNCTION_INDEX); |
| 1627 InstallMakeError(isolate, isolate->builtins()->MakeSyntaxError(), | |
| 1628 Context::MAKE_SYNTAX_ERROR_INDEX); | |
| 1614 } | 1629 } |
| 1615 | 1630 |
| 1616 { // -- T y p e E r r o r | 1631 { // -- T y p e E r r o r |
| 1617 InstallError(isolate, global, factory->TypeError_string(), | 1632 InstallError(isolate, global, factory->TypeError_string(), |
| 1618 Context::TYPE_ERROR_FUNCTION_INDEX); | 1633 Context::TYPE_ERROR_FUNCTION_INDEX); |
| 1634 InstallMakeError(isolate, isolate->builtins()->MakeTypeError(), | |
| 1635 Context::MAKE_TYPE_ERROR_INDEX); | |
| 1619 } | 1636 } |
| 1620 | 1637 |
| 1621 { // -- U R I E r r o r | 1638 { // -- U R I E r r o r |
| 1622 InstallError(isolate, global, factory->URIError_string(), | 1639 InstallError(isolate, global, factory->URIError_string(), |
| 1623 Context::URI_ERROR_FUNCTION_INDEX); | 1640 Context::URI_ERROR_FUNCTION_INDEX); |
| 1641 InstallMakeError(isolate, isolate->builtins()->MakeURIError(), | |
| 1642 Context::MAKE_URI_ERROR_INDEX); | |
| 1624 } | 1643 } |
| 1625 | 1644 |
| 1626 // Initialize the embedder data slot. | 1645 // Initialize the embedder data slot. |
| 1627 Handle<FixedArray> embedder_data = factory->NewFixedArray(3); | 1646 Handle<FixedArray> embedder_data = factory->NewFixedArray(3); |
| 1628 native_context()->set_embedder_data(*embedder_data); | 1647 native_context()->set_embedder_data(*embedder_data); |
| 1629 | 1648 |
| 1630 { // -- J S O N | 1649 { // -- J S O N |
| 1631 Handle<String> name = factory->InternalizeUtf8String("JSON"); | 1650 Handle<String> name = factory->InternalizeUtf8String("JSON"); |
| 1632 Handle<JSFunction> cons = factory->NewFunction(name); | 1651 Handle<JSFunction> cons = factory->NewFunction(name); |
| 1633 JSFunction::SetInstancePrototype(cons, | 1652 JSFunction::SetInstancePrototype(cons, |
| (...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2461 Handle<JSFunction> map_iterator_function = InstallFunction( | 2480 Handle<JSFunction> map_iterator_function = InstallFunction( |
| 2462 container, "MapIterator", JS_MAP_ITERATOR_TYPE, JSMapIterator::kSize, | 2481 container, "MapIterator", JS_MAP_ITERATOR_TYPE, JSMapIterator::kSize, |
| 2463 map_iterator_prototype, Builtins::kIllegal); | 2482 map_iterator_prototype, Builtins::kIllegal); |
| 2464 native_context->set_map_iterator_map(map_iterator_function->initial_map()); | 2483 native_context->set_map_iterator_map(map_iterator_function->initial_map()); |
| 2465 } | 2484 } |
| 2466 | 2485 |
| 2467 { // -- S c r i p t | 2486 { // -- S c r i p t |
| 2468 // Builtin functions for Script. | 2487 // Builtin functions for Script. |
| 2469 Handle<JSFunction> script_fun = InstallFunction( | 2488 Handle<JSFunction> script_fun = InstallFunction( |
| 2470 container, "Script", JS_VALUE_TYPE, JSValue::kSize, | 2489 container, "Script", JS_VALUE_TYPE, JSValue::kSize, |
| 2471 isolate->initial_object_prototype(), Builtins::kIllegal); | 2490 isolate->initial_object_prototype(), Builtins::kUnsupportedThrower); |
| 2472 Handle<JSObject> prototype = | 2491 Handle<JSObject> prototype = |
|
Yang
2016/08/08 15:14:09
I would keep it the old way. We would crash in deb
jgruber
2016/08/09 06:59:15
I'm not completely sure what you mean. This should
| |
| 2473 factory->NewJSObject(isolate->object_function(), TENURED); | 2492 factory->NewJSObject(isolate->object_function(), TENURED); |
| 2474 Accessors::FunctionSetPrototype(script_fun, prototype).Assert(); | 2493 Accessors::FunctionSetPrototype(script_fun, prototype).Assert(); |
| 2475 native_context->set_script_function(*script_fun); | 2494 native_context->set_script_function(*script_fun); |
| 2476 | 2495 |
| 2477 Handle<Map> script_map = Handle<Map>(script_fun->initial_map()); | 2496 Handle<Map> script_map = Handle<Map>(script_fun->initial_map()); |
| 2478 Map::EnsureDescriptorSlack(script_map, 15); | 2497 Map::EnsureDescriptorSlack(script_map, 15); |
| 2479 | 2498 |
| 2480 PropertyAttributes attribs = | 2499 PropertyAttributes attribs = |
| 2481 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); | 2500 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); |
| 2482 | 2501 |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2698 | 2717 |
| 2699 Handle<JSFunction> fun; | 2718 Handle<JSFunction> fun; |
| 2700 for (const FunctionInfo& info : infos) { | 2719 for (const FunctionInfo& info : infos) { |
| 2701 fun = SimpleInstallFunction(proto, info.name, info.id, 0, true, attrs); | 2720 fun = SimpleInstallFunction(proto, info.name, info.id, 0, true, attrs); |
| 2702 fun->shared()->set_native(true); | 2721 fun->shared()->set_native(true); |
| 2703 } | 2722 } |
| 2704 | 2723 |
| 2705 Accessors::FunctionSetPrototype(callsite_fun, proto).Assert(); | 2724 Accessors::FunctionSetPrototype(callsite_fun, proto).Assert(); |
| 2706 } | 2725 } |
| 2707 } | 2726 } |
| 2708 | |
| 2709 { // -- E r r o r | |
| 2710 Handle<JSFunction> make_err_fun = InstallFunction( | |
| 2711 container, "make_generic_error", JS_OBJECT_TYPE, JSObject::kHeaderSize, | |
| 2712 isolate->initial_object_prototype(), Builtins::kMakeGenericError); | |
| 2713 make_err_fun->shared()->DontAdaptArguments(); | |
| 2714 } | |
| 2715 } | 2727 } |
| 2716 | 2728 |
| 2717 | 2729 |
| 2718 void Bootstrapper::ExportExperimentalFromRuntime(Isolate* isolate, | 2730 void Bootstrapper::ExportExperimentalFromRuntime(Isolate* isolate, |
| 2719 Handle<JSObject> container) { | 2731 Handle<JSObject> container) { |
| 2720 HandleScope scope(isolate); | 2732 HandleScope scope(isolate); |
| 2721 | 2733 |
| 2722 #define INITIALIZE_FLAG(FLAG) \ | 2734 #define INITIALIZE_FLAG(FLAG) \ |
| 2723 { \ | 2735 { \ |
| 2724 Handle<String> name = \ | 2736 Handle<String> name = \ |
| (...skipping 1352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4077 } | 4089 } |
| 4078 | 4090 |
| 4079 | 4091 |
| 4080 // Called when the top-level V8 mutex is destroyed. | 4092 // Called when the top-level V8 mutex is destroyed. |
| 4081 void Bootstrapper::FreeThreadResources() { | 4093 void Bootstrapper::FreeThreadResources() { |
| 4082 DCHECK(!IsActive()); | 4094 DCHECK(!IsActive()); |
| 4083 } | 4095 } |
| 4084 | 4096 |
| 4085 } // namespace internal | 4097 } // namespace internal |
| 4086 } // namespace v8 | 4098 } // namespace v8 |
| OLD | NEW |