| 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/code-stubs.h" | 8 #include "src/code-stubs.h" |
| 9 #include "src/extensions/externalize-string-extension.h" | 9 #include "src/extensions/externalize-string-extension.h" |
| 10 #include "src/extensions/free-buffer-extension.h" | 10 #include "src/extensions/free-buffer-extension.h" |
| (...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 if (!proto_template->IsUndefined()) { | 762 if (!proto_template->IsUndefined()) { |
| 763 js_global_object_template = | 763 js_global_object_template = |
| 764 Handle<ObjectTemplateInfo>::cast(proto_template); | 764 Handle<ObjectTemplateInfo>::cast(proto_template); |
| 765 } | 765 } |
| 766 } | 766 } |
| 767 | 767 |
| 768 if (js_global_object_template.is_null()) { | 768 if (js_global_object_template.is_null()) { |
| 769 Handle<String> name = Handle<String>(heap()->empty_string()); | 769 Handle<String> name = Handle<String>(heap()->empty_string()); |
| 770 Handle<Code> code = Handle<Code>(isolate()->builtins()->builtin( | 770 Handle<Code> code = Handle<Code>(isolate()->builtins()->builtin( |
| 771 Builtins::kIllegal)); | 771 Builtins::kIllegal)); |
| 772 Handle<JSObject> prototype = factory()->NewFunctionPrototype( |
| 773 isolate()->object_function()); |
| 772 js_global_object_function = factory()->NewFunction( | 774 js_global_object_function = factory()->NewFunction( |
| 773 name, code, JS_GLOBAL_OBJECT_TYPE, JSGlobalObject::kSize); | 775 name, code, prototype, JS_GLOBAL_OBJECT_TYPE, JSGlobalObject::kSize); |
| 774 // Change the constructor property of the prototype of the | 776 #ifdef DEBUG |
| 775 // hidden global function to refer to the Object function. | 777 LookupIterator it(prototype, factory()->constructor_string(), |
| 776 Handle<JSObject> prototype = | 778 LookupIterator::CHECK_OWN_REAL); |
| 777 Handle<JSObject>( | 779 Handle<Object> value = JSReceiver::GetProperty(&it).ToHandleChecked(); |
| 778 JSObject::cast(js_global_object_function->instance_prototype())); | 780 ASSERT(it.IsFound()); |
| 779 JSObject::SetOwnPropertyIgnoreAttributes( | 781 ASSERT_EQ(*isolate()->object_function(), *value); |
| 780 prototype, factory()->constructor_string(), | 782 #endif |
| 781 isolate()->object_function(), NONE).Check(); | |
| 782 } else { | 783 } else { |
| 783 Handle<FunctionTemplateInfo> js_global_object_constructor( | 784 Handle<FunctionTemplateInfo> js_global_object_constructor( |
| 784 FunctionTemplateInfo::cast(js_global_object_template->constructor())); | 785 FunctionTemplateInfo::cast(js_global_object_template->constructor())); |
| 785 js_global_object_function = | 786 js_global_object_function = |
| 786 factory()->CreateApiFunction(js_global_object_constructor, | 787 factory()->CreateApiFunction(js_global_object_constructor, |
| 787 factory()->the_hole_value(), | 788 factory()->the_hole_value(), |
| 788 factory()->GlobalObjectType); | 789 factory()->GlobalObjectType); |
| 789 } | 790 } |
| 790 | 791 |
| 791 js_global_object_function->initial_map()->set_is_hidden_prototype(); | 792 js_global_object_function->initial_map()->set_is_hidden_prototype(); |
| (...skipping 1337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2129 BootstrapperActive active(this); | 2130 BootstrapperActive active(this); |
| 2130 SaveContext saved_context(isolate_); | 2131 SaveContext saved_context(isolate_); |
| 2131 isolate_->set_context(*native_context); | 2132 isolate_->set_context(*native_context); |
| 2132 return Genesis::InstallExtensions(native_context, extensions) && | 2133 return Genesis::InstallExtensions(native_context, extensions) && |
| 2133 Genesis::InstallSpecialObjects(native_context); | 2134 Genesis::InstallSpecialObjects(native_context); |
| 2134 } | 2135 } |
| 2135 | 2136 |
| 2136 | 2137 |
| 2137 bool Genesis::InstallSpecialObjects(Handle<Context> native_context) { | 2138 bool Genesis::InstallSpecialObjects(Handle<Context> native_context) { |
| 2138 Isolate* isolate = native_context->GetIsolate(); | 2139 Isolate* isolate = native_context->GetIsolate(); |
| 2140 // Don't install extensions into the snapshot. |
| 2141 if (isolate->serializer_enabled()) return true; |
| 2142 |
| 2139 Factory* factory = isolate->factory(); | 2143 Factory* factory = isolate->factory(); |
| 2140 HandleScope scope(isolate); | 2144 HandleScope scope(isolate); |
| 2141 Handle<JSGlobalObject> global(JSGlobalObject::cast( | 2145 Handle<JSGlobalObject> global(JSGlobalObject::cast( |
| 2142 native_context->global_object())); | 2146 native_context->global_object())); |
| 2147 |
| 2148 Handle<JSObject> Error = Handle<JSObject>::cast(Object::GetProperty( |
| 2149 isolate, global, "Error").ToHandleChecked()); |
| 2150 Handle<String> name = factory->InternalizeOneByteString( |
| 2151 STATIC_ASCII_VECTOR("stackTraceLimit")); |
| 2152 Handle<Smi> stack_trace_limit(Smi::FromInt(FLAG_stack_trace_limit), isolate); |
| 2153 JSObject::AddProperty(Error, name, stack_trace_limit, NONE); |
| 2154 |
| 2143 // Expose the natives in global if a name for it is specified. | 2155 // Expose the natives in global if a name for it is specified. |
| 2144 if (FLAG_expose_natives_as != NULL && strlen(FLAG_expose_natives_as) != 0) { | 2156 if (FLAG_expose_natives_as != NULL && strlen(FLAG_expose_natives_as) != 0) { |
| 2145 Handle<String> natives = | 2157 Handle<String> natives = |
| 2146 factory->InternalizeUtf8String(FLAG_expose_natives_as); | 2158 factory->InternalizeUtf8String(FLAG_expose_natives_as); |
| 2147 RETURN_ON_EXCEPTION_VALUE( | 2159 JSObject::AddProperty( |
| 2148 isolate, | 2160 global, natives, handle(global->builtins()), DONT_ENUM); |
| 2149 JSObject::SetOwnPropertyIgnoreAttributes( | |
| 2150 global, natives, Handle<JSObject>(global->builtins()), DONT_ENUM), | |
| 2151 false); | |
| 2152 } | |
| 2153 | |
| 2154 Handle<Object> Error = Object::GetProperty( | |
| 2155 isolate, global, "Error").ToHandleChecked(); | |
| 2156 if (Error->IsJSObject()) { | |
| 2157 Handle<String> name = factory->InternalizeOneByteString( | |
| 2158 STATIC_ASCII_VECTOR("stackTraceLimit")); | |
| 2159 Handle<Smi> stack_trace_limit( | |
| 2160 Smi::FromInt(FLAG_stack_trace_limit), isolate); | |
| 2161 RETURN_ON_EXCEPTION_VALUE( | |
| 2162 isolate, | |
| 2163 JSObject::SetOwnPropertyIgnoreAttributes( | |
| 2164 Handle<JSObject>::cast(Error), name, stack_trace_limit, NONE), | |
| 2165 false); | |
| 2166 } | 2161 } |
| 2167 | 2162 |
| 2168 // Expose the debug global object in global if a name for it is specified. | 2163 // Expose the debug global object in global if a name for it is specified. |
| 2169 if (FLAG_expose_debug_as != NULL && strlen(FLAG_expose_debug_as) != 0) { | 2164 if (FLAG_expose_debug_as != NULL && strlen(FLAG_expose_debug_as) != 0) { |
| 2170 // If loading fails we just bail out without installing the | 2165 // If loading fails we just bail out without installing the |
| 2171 // debugger but without tanking the whole context. | 2166 // debugger but without tanking the whole context. |
| 2172 Debug* debug = isolate->debug(); | 2167 Debug* debug = isolate->debug(); |
| 2173 if (!debug->Load()) return true; | 2168 if (!debug->Load()) return true; |
| 2174 Handle<Context> debug_context = debug->debug_context(); | 2169 Handle<Context> debug_context = debug->debug_context(); |
| 2175 // Set the security token for the debugger context to the same as | 2170 // Set the security token for the debugger context to the same as |
| 2176 // the shell native context to allow calling between these (otherwise | 2171 // the shell native context to allow calling between these (otherwise |
| 2177 // exposing debug global object doesn't make much sense). | 2172 // exposing debug global object doesn't make much sense). |
| 2178 debug_context->set_security_token(native_context->security_token()); | 2173 debug_context->set_security_token(native_context->security_token()); |
| 2179 Handle<String> debug_string = | 2174 Handle<String> debug_string = |
| 2180 factory->InternalizeUtf8String(FLAG_expose_debug_as); | 2175 factory->InternalizeUtf8String(FLAG_expose_debug_as); |
| 2181 Handle<Object> global_proxy(debug_context->global_proxy(), isolate); | 2176 Handle<Object> global_proxy(debug_context->global_proxy(), isolate); |
| 2182 RETURN_ON_EXCEPTION_VALUE( | 2177 JSObject::AddProperty(global, debug_string, global_proxy, DONT_ENUM); |
| 2183 isolate, | |
| 2184 JSObject::SetOwnPropertyIgnoreAttributes( | |
| 2185 global, debug_string, global_proxy, DONT_ENUM), | |
| 2186 false); | |
| 2187 } | 2178 } |
| 2188 return true; | 2179 return true; |
| 2189 } | 2180 } |
| 2190 | 2181 |
| 2191 | 2182 |
| 2192 static uint32_t Hash(RegisteredExtension* extension) { | 2183 static uint32_t Hash(RegisteredExtension* extension) { |
| 2193 return v8::internal::ComputePointerHash(extension); | 2184 return v8::internal::ComputePointerHash(extension); |
| 2194 } | 2185 } |
| 2195 | 2186 |
| 2196 | 2187 |
| (...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2690 return from + sizeof(NestingCounterType); | 2681 return from + sizeof(NestingCounterType); |
| 2691 } | 2682 } |
| 2692 | 2683 |
| 2693 | 2684 |
| 2694 // Called when the top-level V8 mutex is destroyed. | 2685 // Called when the top-level V8 mutex is destroyed. |
| 2695 void Bootstrapper::FreeThreadResources() { | 2686 void Bootstrapper::FreeThreadResources() { |
| 2696 ASSERT(!IsActive()); | 2687 ASSERT(!IsActive()); |
| 2697 } | 2688 } |
| 2698 | 2689 |
| 2699 } } // namespace v8::internal | 2690 } } // namespace v8::internal |
| OLD | NEW |