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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 | 137 |
138 extensions_cache_.Initialize(isolate_, false); // Yes, symmetrical | 138 extensions_cache_.Initialize(isolate_, false); // Yes, symmetrical |
139 } | 139 } |
140 | 140 |
141 | 141 |
142 class Genesis BASE_EMBEDDED { | 142 class Genesis BASE_EMBEDDED { |
143 public: | 143 public: |
144 Genesis(Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy, | 144 Genesis(Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy, |
145 v8::Local<v8::ObjectTemplate> global_proxy_template, | 145 v8::Local<v8::ObjectTemplate> global_proxy_template, |
146 size_t context_snapshot_index, | 146 size_t context_snapshot_index, |
147 v8::DeserializeInternalFieldsCallback internal_fields_deserializer, | 147 v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer, |
148 GlobalContextType context_type); | 148 GlobalContextType context_type); |
149 Genesis(Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy, | 149 Genesis(Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy, |
150 v8::Local<v8::ObjectTemplate> global_proxy_template); | 150 v8::Local<v8::ObjectTemplate> global_proxy_template); |
151 ~Genesis() { } | 151 ~Genesis() { } |
152 | 152 |
153 Isolate* isolate() const { return isolate_; } | 153 Isolate* isolate() const { return isolate_; } |
154 Factory* factory() const { return isolate_->factory(); } | 154 Factory* factory() const { return isolate_->factory(); } |
155 Heap* heap() const { return isolate_->heap(); } | 155 Heap* heap() const { return isolate_->heap(); } |
156 | 156 |
157 Handle<Context> result() { return result_; } | 157 Handle<Context> result() { return result_; } |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 | 309 |
310 void Bootstrapper::Iterate(ObjectVisitor* v) { | 310 void Bootstrapper::Iterate(ObjectVisitor* v) { |
311 extensions_cache_.Iterate(v); | 311 extensions_cache_.Iterate(v); |
312 v->Synchronize(VisitorSynchronization::kExtensions); | 312 v->Synchronize(VisitorSynchronization::kExtensions); |
313 } | 313 } |
314 | 314 |
315 Handle<Context> Bootstrapper::CreateEnvironment( | 315 Handle<Context> Bootstrapper::CreateEnvironment( |
316 MaybeHandle<JSGlobalProxy> maybe_global_proxy, | 316 MaybeHandle<JSGlobalProxy> maybe_global_proxy, |
317 v8::Local<v8::ObjectTemplate> global_proxy_template, | 317 v8::Local<v8::ObjectTemplate> global_proxy_template, |
318 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index, | 318 v8::ExtensionConfiguration* extensions, size_t context_snapshot_index, |
319 v8::DeserializeInternalFieldsCallback internal_fields_deserializer, | 319 v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer, |
320 GlobalContextType context_type) { | 320 GlobalContextType context_type) { |
321 HandleScope scope(isolate_); | 321 HandleScope scope(isolate_); |
322 Genesis genesis(isolate_, maybe_global_proxy, global_proxy_template, | 322 Genesis genesis(isolate_, maybe_global_proxy, global_proxy_template, |
323 context_snapshot_index, internal_fields_deserializer, | 323 context_snapshot_index, embedder_fields_deserializer, |
324 context_type); | 324 context_type); |
325 Handle<Context> env = genesis.result(); | 325 Handle<Context> env = genesis.result(); |
326 if (env.is_null() || !InstallExtensions(env, extensions)) { | 326 if (env.is_null() || !InstallExtensions(env, extensions)) { |
327 return Handle<Context>(); | 327 return Handle<Context>(); |
328 } | 328 } |
329 return scope.CloseAndEscape(env); | 329 return scope.CloseAndEscape(env); |
330 } | 330 } |
331 | 331 |
332 Handle<JSGlobalProxy> Bootstrapper::NewRemoteContext( | 332 Handle<JSGlobalProxy> Bootstrapper::NewRemoteContext( |
333 MaybeHandle<JSGlobalProxy> maybe_global_proxy, | 333 MaybeHandle<JSGlobalProxy> maybe_global_proxy, |
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1015 Handle<JSGlobalObject> global_object = | 1015 Handle<JSGlobalObject> global_object = |
1016 factory()->NewJSGlobalObject(js_global_object_function); | 1016 factory()->NewJSGlobalObject(js_global_object_function); |
1017 | 1017 |
1018 // Step 2: (re)initialize the global proxy object. | 1018 // Step 2: (re)initialize the global proxy object. |
1019 Handle<JSFunction> global_proxy_function; | 1019 Handle<JSFunction> global_proxy_function; |
1020 if (global_proxy_template.IsEmpty()) { | 1020 if (global_proxy_template.IsEmpty()) { |
1021 Handle<String> name = Handle<String>(heap()->empty_string()); | 1021 Handle<String> name = Handle<String>(heap()->empty_string()); |
1022 Handle<Code> code = isolate()->builtins()->Illegal(); | 1022 Handle<Code> code = isolate()->builtins()->Illegal(); |
1023 global_proxy_function = | 1023 global_proxy_function = |
1024 factory()->NewFunction(name, code, JS_GLOBAL_PROXY_TYPE, | 1024 factory()->NewFunction(name, code, JS_GLOBAL_PROXY_TYPE, |
1025 JSGlobalProxy::SizeWithInternalFields(0)); | 1025 JSGlobalProxy::SizeWithEmbedderFields(0)); |
1026 } else { | 1026 } else { |
1027 Handle<ObjectTemplateInfo> data = | 1027 Handle<ObjectTemplateInfo> data = |
1028 v8::Utils::OpenHandle(*global_proxy_template); | 1028 v8::Utils::OpenHandle(*global_proxy_template); |
1029 Handle<FunctionTemplateInfo> global_constructor( | 1029 Handle<FunctionTemplateInfo> global_constructor( |
1030 FunctionTemplateInfo::cast(data->constructor())); | 1030 FunctionTemplateInfo::cast(data->constructor())); |
1031 global_proxy_function = ApiNatives::CreateApiFunction( | 1031 global_proxy_function = ApiNatives::CreateApiFunction( |
1032 isolate(), global_constructor, factory()->the_hole_value(), | 1032 isolate(), global_constructor, factory()->the_hole_value(), |
1033 ApiNatives::GlobalProxyType); | 1033 ApiNatives::GlobalProxyType); |
1034 } | 1034 } |
1035 Handle<String> global_name = factory()->global_string(); | 1035 Handle<String> global_name = factory()->global_string(); |
(...skipping 1605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2641 InstallWithIntrinsicDefaultProto( | 2641 InstallWithIntrinsicDefaultProto( |
2642 isolate, construct_by_buffer, | 2642 isolate, construct_by_buffer, |
2643 Context::TYPED_ARRAY_CONSTRUCT_BY_ARRAY_BUFFER_INDEX); | 2643 Context::TYPED_ARRAY_CONSTRUCT_BY_ARRAY_BUFFER_INDEX); |
2644 } | 2644 } |
2645 | 2645 |
2646 { // -- D a t a V i e w | 2646 { // -- D a t a V i e w |
2647 Handle<JSObject> prototype = | 2647 Handle<JSObject> prototype = |
2648 factory->NewJSObject(isolate->object_function(), TENURED); | 2648 factory->NewJSObject(isolate->object_function(), TENURED); |
2649 Handle<JSFunction> data_view_fun = | 2649 Handle<JSFunction> data_view_fun = |
2650 InstallFunction(global, "DataView", JS_DATA_VIEW_TYPE, | 2650 InstallFunction(global, "DataView", JS_DATA_VIEW_TYPE, |
2651 JSDataView::kSizeWithInternalFields, prototype, | 2651 JSDataView::kSizeWithEmbedderFields, prototype, |
2652 Builtins::kDataViewConstructor); | 2652 Builtins::kDataViewConstructor); |
2653 InstallWithIntrinsicDefaultProto(isolate, data_view_fun, | 2653 InstallWithIntrinsicDefaultProto(isolate, data_view_fun, |
2654 Context::DATA_VIEW_FUN_INDEX); | 2654 Context::DATA_VIEW_FUN_INDEX); |
2655 data_view_fun->shared()->SetConstructStub( | 2655 data_view_fun->shared()->SetConstructStub( |
2656 *isolate->builtins()->DataViewConstructor_ConstructStub()); | 2656 *isolate->builtins()->DataViewConstructor_ConstructStub()); |
2657 data_view_fun->shared()->set_length(3); | 2657 data_view_fun->shared()->set_length(3); |
2658 data_view_fun->shared()->DontAdaptArguments(); | 2658 data_view_fun->shared()->DontAdaptArguments(); |
2659 | 2659 |
2660 // Install the @@toStringTag property on the {prototype}. | 2660 // Install the @@toStringTag property on the {prototype}. |
2661 JSObject::AddProperty( | 2661 JSObject::AddProperty( |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3030 Handle<JSObject> global = Handle<JSObject>(native_context()->global_object()); | 3030 Handle<JSObject> global = Handle<JSObject>(native_context()->global_object()); |
3031 | 3031 |
3032 Handle<JSObject> typed_array_prototype = | 3032 Handle<JSObject> typed_array_prototype = |
3033 Handle<JSObject>(isolate()->typed_array_prototype()); | 3033 Handle<JSObject>(isolate()->typed_array_prototype()); |
3034 Handle<JSFunction> typed_array_function = | 3034 Handle<JSFunction> typed_array_function = |
3035 Handle<JSFunction>(isolate()->typed_array_function()); | 3035 Handle<JSFunction>(isolate()->typed_array_function()); |
3036 | 3036 |
3037 Handle<JSObject> prototype = | 3037 Handle<JSObject> prototype = |
3038 factory()->NewJSObject(isolate()->object_function(), TENURED); | 3038 factory()->NewJSObject(isolate()->object_function(), TENURED); |
3039 Handle<JSFunction> result = InstallFunction( | 3039 Handle<JSFunction> result = InstallFunction( |
3040 global, name, JS_TYPED_ARRAY_TYPE, JSTypedArray::kSizeWithInternalFields, | 3040 global, name, JS_TYPED_ARRAY_TYPE, JSTypedArray::kSizeWithEmbedderFields, |
3041 prototype, Builtins::kIllegal); | 3041 prototype, Builtins::kIllegal); |
3042 result->initial_map()->set_elements_kind(elements_kind); | 3042 result->initial_map()->set_elements_kind(elements_kind); |
3043 | 3043 |
3044 CHECK(JSObject::SetPrototype(result, typed_array_function, false, | 3044 CHECK(JSObject::SetPrototype(result, typed_array_function, false, |
3045 Object::DONT_THROW) | 3045 Object::DONT_THROW) |
3046 .FromJust()); | 3046 .FromJust()); |
3047 | 3047 |
3048 CHECK(JSObject::SetPrototype(prototype, typed_array_prototype, false, | 3048 CHECK(JSObject::SetPrototype(prototype, typed_array_prototype, false, |
3049 Object::DONT_THROW) | 3049 Object::DONT_THROW) |
3050 .FromJust()); | 3050 .FromJust()); |
(...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3926 // Setup the {prototype} with the given {name} for @@toStringTag. | 3926 // Setup the {prototype} with the given {name} for @@toStringTag. |
3927 Handle<JSObject> prototype = | 3927 Handle<JSObject> prototype = |
3928 factory()->NewJSObject(isolate()->object_function(), TENURED); | 3928 factory()->NewJSObject(isolate()->object_function(), TENURED); |
3929 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(), | 3929 JSObject::AddProperty(prototype, factory()->to_string_tag_symbol(), |
3930 factory()->NewStringFromAsciiChecked(name), | 3930 factory()->NewStringFromAsciiChecked(name), |
3931 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | 3931 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); |
3932 | 3932 |
3933 // Allocate the constructor with the given {prototype}. | 3933 // Allocate the constructor with the given {prototype}. |
3934 Handle<JSFunction> array_buffer_fun = | 3934 Handle<JSFunction> array_buffer_fun = |
3935 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE, | 3935 InstallFunction(target, name, JS_ARRAY_BUFFER_TYPE, |
3936 JSArrayBuffer::kSizeWithInternalFields, prototype, | 3936 JSArrayBuffer::kSizeWithEmbedderFields, prototype, |
3937 Builtins::kArrayBufferConstructor); | 3937 Builtins::kArrayBufferConstructor); |
3938 array_buffer_fun->shared()->SetConstructStub( | 3938 array_buffer_fun->shared()->SetConstructStub( |
3939 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub()); | 3939 *isolate()->builtins()->ArrayBufferConstructor_ConstructStub()); |
3940 array_buffer_fun->shared()->DontAdaptArguments(); | 3940 array_buffer_fun->shared()->DontAdaptArguments(); |
3941 array_buffer_fun->shared()->set_length(1); | 3941 array_buffer_fun->shared()->set_length(1); |
3942 | 3942 |
3943 // Install the "constructor" property on the {prototype}. | 3943 // Install the "constructor" property on the {prototype}. |
3944 JSObject::AddProperty(prototype, factory()->constructor_string(), | 3944 JSObject::AddProperty(prototype, factory()->constructor_string(), |
3945 array_buffer_fun, DONT_ENUM); | 3945 array_buffer_fun, DONT_ENUM); |
3946 | 3946 |
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4830 | 4830 |
4831 private: | 4831 private: |
4832 bool flag_; | 4832 bool flag_; |
4833 bool enabled_; | 4833 bool enabled_; |
4834 }; | 4834 }; |
4835 | 4835 |
4836 Genesis::Genesis( | 4836 Genesis::Genesis( |
4837 Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy, | 4837 Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy, |
4838 v8::Local<v8::ObjectTemplate> global_proxy_template, | 4838 v8::Local<v8::ObjectTemplate> global_proxy_template, |
4839 size_t context_snapshot_index, | 4839 size_t context_snapshot_index, |
4840 v8::DeserializeInternalFieldsCallback internal_fields_deserializer, | 4840 v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer, |
4841 GlobalContextType context_type) | 4841 GlobalContextType context_type) |
4842 : isolate_(isolate), active_(isolate->bootstrapper()) { | 4842 : isolate_(isolate), active_(isolate->bootstrapper()) { |
4843 NoTrackDoubleFieldsForSerializerScope disable_scope(isolate); | 4843 NoTrackDoubleFieldsForSerializerScope disable_scope(isolate); |
4844 result_ = Handle<Context>::null(); | 4844 result_ = Handle<Context>::null(); |
4845 global_proxy_ = Handle<JSGlobalProxy>::null(); | 4845 global_proxy_ = Handle<JSGlobalProxy>::null(); |
4846 | 4846 |
4847 // Before creating the roots we must save the context and restore it | 4847 // Before creating the roots we must save the context and restore it |
4848 // on all function exits. | 4848 // on all function exits. |
4849 SaveContext saved_context(isolate); | 4849 SaveContext saved_context(isolate); |
4850 | 4850 |
(...skipping 13 matching lines...) Expand all Loading... |
4864 if (!maybe_global_proxy.ToHandle(&global_proxy)) { | 4864 if (!maybe_global_proxy.ToHandle(&global_proxy)) { |
4865 int instance_size = 0; | 4865 int instance_size = 0; |
4866 if (context_snapshot_index > 0) { | 4866 if (context_snapshot_index > 0) { |
4867 // The global proxy function to reinitialize this global proxy is in the | 4867 // The global proxy function to reinitialize this global proxy is in the |
4868 // context that is yet to be deserialized. We need to prepare a global | 4868 // context that is yet to be deserialized. We need to prepare a global |
4869 // proxy of the correct size. | 4869 // proxy of the correct size. |
4870 Object* size = isolate->heap()->serialized_global_proxy_sizes()->get( | 4870 Object* size = isolate->heap()->serialized_global_proxy_sizes()->get( |
4871 static_cast<int>(context_snapshot_index) - 1); | 4871 static_cast<int>(context_snapshot_index) - 1); |
4872 instance_size = Smi::cast(size)->value(); | 4872 instance_size = Smi::cast(size)->value(); |
4873 } else { | 4873 } else { |
4874 instance_size = JSGlobalProxy::SizeWithInternalFields( | 4874 instance_size = JSGlobalProxy::SizeWithEmbedderFields( |
4875 global_proxy_template.IsEmpty() | 4875 global_proxy_template.IsEmpty() |
4876 ? 0 | 4876 ? 0 |
4877 : global_proxy_template->InternalFieldCount()); | 4877 : global_proxy_template->InternalFieldCount()); |
4878 } | 4878 } |
4879 global_proxy = | 4879 global_proxy = |
4880 isolate->factory()->NewUninitializedJSGlobalProxy(instance_size); | 4880 isolate->factory()->NewUninitializedJSGlobalProxy(instance_size); |
4881 } | 4881 } |
4882 | 4882 |
4883 // We can only de-serialize a context if the isolate was initialized from | 4883 // We can only de-serialize a context if the isolate was initialized from |
4884 // a snapshot. Otherwise we have to build the context from scratch. | 4884 // a snapshot. Otherwise we have to build the context from scratch. |
4885 // Also create a context from scratch to expose natives, if required by flag. | 4885 // Also create a context from scratch to expose natives, if required by flag. |
4886 if (!isolate->initialized_from_snapshot() || | 4886 if (!isolate->initialized_from_snapshot() || |
4887 !Snapshot::NewContextFromSnapshot(isolate, global_proxy, | 4887 !Snapshot::NewContextFromSnapshot(isolate, global_proxy, |
4888 context_snapshot_index, | 4888 context_snapshot_index, |
4889 internal_fields_deserializer) | 4889 embedder_fields_deserializer) |
4890 .ToHandle(&native_context_)) { | 4890 .ToHandle(&native_context_)) { |
4891 native_context_ = Handle<Context>(); | 4891 native_context_ = Handle<Context>(); |
4892 } | 4892 } |
4893 | 4893 |
4894 if (!native_context().is_null()) { | 4894 if (!native_context().is_null()) { |
4895 AddToWeakNativeContextList(*native_context()); | 4895 AddToWeakNativeContextList(*native_context()); |
4896 isolate->set_context(*native_context()); | 4896 isolate->set_context(*native_context()); |
4897 isolate->counters()->contexts_created_by_snapshot()->Increment(); | 4897 isolate->counters()->contexts_created_by_snapshot()->Increment(); |
4898 #if TRACE_MAPS | 4898 #if TRACE_MAPS |
4899 if (FLAG_trace_maps) { | 4899 if (FLAG_trace_maps) { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4990 | 4990 |
4991 // During genesis, the boilerplate for stack overflow won't work until the | 4991 // During genesis, the boilerplate for stack overflow won't work until the |
4992 // environment has been at least partially initialized. Add a stack check | 4992 // environment has been at least partially initialized. Add a stack check |
4993 // before entering JS code to catch overflow early. | 4993 // before entering JS code to catch overflow early. |
4994 StackLimitCheck check(isolate); | 4994 StackLimitCheck check(isolate); |
4995 if (check.HasOverflowed()) { | 4995 if (check.HasOverflowed()) { |
4996 isolate->StackOverflow(); | 4996 isolate->StackOverflow(); |
4997 return; | 4997 return; |
4998 } | 4998 } |
4999 | 4999 |
5000 const int proxy_size = JSGlobalProxy::SizeWithInternalFields( | 5000 const int proxy_size = JSGlobalProxy::SizeWithEmbedderFields( |
5001 global_proxy_template->InternalFieldCount()); | 5001 global_proxy_template->InternalFieldCount()); |
5002 | 5002 |
5003 Handle<JSGlobalProxy> global_proxy; | 5003 Handle<JSGlobalProxy> global_proxy; |
5004 if (!maybe_global_proxy.ToHandle(&global_proxy)) { | 5004 if (!maybe_global_proxy.ToHandle(&global_proxy)) { |
5005 global_proxy = factory()->NewUninitializedJSGlobalProxy(proxy_size); | 5005 global_proxy = factory()->NewUninitializedJSGlobalProxy(proxy_size); |
5006 } | 5006 } |
5007 | 5007 |
5008 // Create a remote object as the global object. | 5008 // Create a remote object as the global object. |
5009 Handle<ObjectTemplateInfo> global_proxy_data = | 5009 Handle<ObjectTemplateInfo> global_proxy_data = |
5010 Utils::OpenHandle(*global_proxy_template); | 5010 Utils::OpenHandle(*global_proxy_template); |
5011 Handle<FunctionTemplateInfo> global_constructor( | 5011 Handle<FunctionTemplateInfo> global_constructor( |
5012 FunctionTemplateInfo::cast(global_proxy_data->constructor())); | 5012 FunctionTemplateInfo::cast(global_proxy_data->constructor())); |
5013 | 5013 |
5014 Handle<ObjectTemplateInfo> global_object_template( | 5014 Handle<ObjectTemplateInfo> global_object_template( |
5015 ObjectTemplateInfo::cast(global_constructor->prototype_template())); | 5015 ObjectTemplateInfo::cast(global_constructor->prototype_template())); |
5016 Handle<JSObject> global_object = | 5016 Handle<JSObject> global_object = |
5017 ApiNatives::InstantiateRemoteObject( | 5017 ApiNatives::InstantiateRemoteObject( |
5018 global_object_template).ToHandleChecked(); | 5018 global_object_template).ToHandleChecked(); |
5019 | 5019 |
5020 // (Re)initialize the global proxy object. | 5020 // (Re)initialize the global proxy object. |
5021 DCHECK_EQ(global_proxy_data->internal_field_count(), | 5021 DCHECK_EQ(global_proxy_data->embedder_field_count(), |
5022 global_proxy_template->InternalFieldCount()); | 5022 global_proxy_template->InternalFieldCount()); |
5023 Handle<Map> global_proxy_map = isolate->factory()->NewMap( | 5023 Handle<Map> global_proxy_map = isolate->factory()->NewMap( |
5024 JS_GLOBAL_PROXY_TYPE, proxy_size, FAST_HOLEY_SMI_ELEMENTS); | 5024 JS_GLOBAL_PROXY_TYPE, proxy_size, FAST_HOLEY_SMI_ELEMENTS); |
5025 global_proxy_map->set_is_access_check_needed(true); | 5025 global_proxy_map->set_is_access_check_needed(true); |
5026 global_proxy_map->set_has_hidden_prototype(true); | 5026 global_proxy_map->set_has_hidden_prototype(true); |
5027 | 5027 |
5028 // A remote global proxy has no native context. | 5028 // A remote global proxy has no native context. |
5029 global_proxy->set_native_context(heap()->null_value()); | 5029 global_proxy->set_native_context(heap()->null_value()); |
5030 | 5030 |
5031 // Configure the hidden prototype chain of the global proxy. | 5031 // Configure the hidden prototype chain of the global proxy. |
(...skipping 29 matching lines...) Expand all Loading... |
5061 } | 5061 } |
5062 | 5062 |
5063 | 5063 |
5064 // Called when the top-level V8 mutex is destroyed. | 5064 // Called when the top-level V8 mutex is destroyed. |
5065 void Bootstrapper::FreeThreadResources() { | 5065 void Bootstrapper::FreeThreadResources() { |
5066 DCHECK(!IsActive()); | 5066 DCHECK(!IsActive()); |
5067 } | 5067 } |
5068 | 5068 |
5069 } // namespace internal | 5069 } // namespace internal |
5070 } // namespace v8 | 5070 } // namespace v8 |
OLD | NEW |