Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(673)

Side by Side Diff: src/bootstrapper.cc

Issue 1655833002: Remove the template magic from types.(h|cc), remove types-inl.h. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Undo whitespace change Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/bootstrapper.h ('k') | src/code-stubs.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/extensions/externalize-string-extension.h" 10 #include "src/extensions/externalize-string-extension.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 ExperimentalExtraNatives::GetSourceCache(isolate_->heap())); 127 ExperimentalExtraNatives::GetSourceCache(isolate_->heap()));
128 128
129 extensions_cache_.Initialize(isolate_, false); // Yes, symmetrical 129 extensions_cache_.Initialize(isolate_, false); // Yes, symmetrical
130 } 130 }
131 131
132 132
133 class Genesis BASE_EMBEDDED { 133 class Genesis BASE_EMBEDDED {
134 public: 134 public:
135 Genesis(Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy, 135 Genesis(Isolate* isolate, MaybeHandle<JSGlobalProxy> maybe_global_proxy,
136 v8::Local<v8::ObjectTemplate> global_proxy_template, 136 v8::Local<v8::ObjectTemplate> global_proxy_template,
137 v8::ExtensionConfiguration* extensions, ContextType context_type); 137 v8::ExtensionConfiguration* extensions,
138 GlobalContextType context_type);
138 ~Genesis() { } 139 ~Genesis() { }
139 140
140 Isolate* isolate() const { return isolate_; } 141 Isolate* isolate() const { return isolate_; }
141 Factory* factory() const { return isolate_->factory(); } 142 Factory* factory() const { return isolate_->factory(); }
142 Heap* heap() const { return isolate_->heap(); } 143 Heap* heap() const { return isolate_->heap(); }
143 144
144 Handle<Context> result() { return result_; } 145 Handle<Context> result() { return result_; }
145 146
146 private: 147 private:
147 Handle<Context> native_context() { return native_context_; } 148 Handle<Context> native_context() { return native_context_; }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 // passed through the API. The global from the snapshot is detached from the 181 // passed through the API. The global from the snapshot is detached from the
181 // other objects in the snapshot. 182 // other objects in the snapshot.
182 void HookUpGlobalObject(Handle<JSGlobalObject> global_object); 183 void HookUpGlobalObject(Handle<JSGlobalObject> global_object);
183 // The native context has a ScriptContextTable that store declarative bindings 184 // The native context has a ScriptContextTable that store declarative bindings
184 // made in script scopes. Add a "this" binding to that table pointing to the 185 // made in script scopes. Add a "this" binding to that table pointing to the
185 // global proxy. 186 // global proxy.
186 void InstallGlobalThisBinding(); 187 void InstallGlobalThisBinding();
187 // New context initialization. Used for creating a context from scratch. 188 // New context initialization. Used for creating a context from scratch.
188 void InitializeGlobal(Handle<JSGlobalObject> global_object, 189 void InitializeGlobal(Handle<JSGlobalObject> global_object,
189 Handle<JSFunction> empty_function, 190 Handle<JSFunction> empty_function,
190 ContextType context_type); 191 GlobalContextType context_type);
191 void InitializeExperimentalGlobal(); 192 void InitializeExperimentalGlobal();
192 // Depending on the situation, expose and/or get rid of the utils object. 193 // Depending on the situation, expose and/or get rid of the utils object.
193 void ConfigureUtilsObject(ContextType context_type); 194 void ConfigureUtilsObject(GlobalContextType context_type);
194 195
195 #define DECLARE_FEATURE_INITIALIZATION(id, descr) \ 196 #define DECLARE_FEATURE_INITIALIZATION(id, descr) \
196 void InitializeGlobal_##id(); 197 void InitializeGlobal_##id();
197 198
198 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) 199 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION)
199 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) 200 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION)
200 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) 201 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION)
201 DECLARE_FEATURE_INITIALIZATION(promise_extra, "") 202 DECLARE_FEATURE_INITIALIZATION(promise_extra, "")
202 #undef DECLARE_FEATURE_INITIALIZATION 203 #undef DECLARE_FEATURE_INITIALIZATION
203 204
204 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target, 205 Handle<JSFunction> InstallArrayBuffer(Handle<JSObject> target,
205 const char* name); 206 const char* name);
206 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target, 207 Handle<JSFunction> InstallInternalArray(Handle<JSObject> target,
207 const char* name, 208 const char* name,
208 ElementsKind elements_kind); 209 ElementsKind elements_kind);
209 bool InstallNatives(ContextType context_type); 210 bool InstallNatives(GlobalContextType context_type);
210 211
211 void InstallTypedArray(const char* name, ElementsKind elements_kind, 212 void InstallTypedArray(const char* name, ElementsKind elements_kind,
212 Handle<JSFunction>* fun); 213 Handle<JSFunction>* fun);
213 bool InstallExperimentalNatives(); 214 bool InstallExperimentalNatives();
214 bool InstallExtraNatives(); 215 bool InstallExtraNatives();
215 bool InstallExperimentalExtraNatives(); 216 bool InstallExperimentalExtraNatives();
216 bool InstallDebuggerNatives(); 217 bool InstallDebuggerNatives();
217 void InstallBuiltinFunctionIds(); 218 void InstallBuiltinFunctionIds();
218 void InstallExperimentalBuiltinFunctionIds(); 219 void InstallExperimentalBuiltinFunctionIds();
219 void InitializeNormalizedMapCaches(); 220 void InitializeNormalizedMapCaches();
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 BootstrapperActive active_; 312 BootstrapperActive active_;
312 friend class Bootstrapper; 313 friend class Bootstrapper;
313 }; 314 };
314 315
315 316
316 void Bootstrapper::Iterate(ObjectVisitor* v) { 317 void Bootstrapper::Iterate(ObjectVisitor* v) {
317 extensions_cache_.Iterate(v); 318 extensions_cache_.Iterate(v);
318 v->Synchronize(VisitorSynchronization::kExtensions); 319 v->Synchronize(VisitorSynchronization::kExtensions);
319 } 320 }
320 321
321
322 Handle<Context> Bootstrapper::CreateEnvironment( 322 Handle<Context> Bootstrapper::CreateEnvironment(
323 MaybeHandle<JSGlobalProxy> maybe_global_proxy, 323 MaybeHandle<JSGlobalProxy> maybe_global_proxy,
324 v8::Local<v8::ObjectTemplate> global_proxy_template, 324 v8::Local<v8::ObjectTemplate> global_proxy_template,
325 v8::ExtensionConfiguration* extensions, ContextType context_type) { 325 v8::ExtensionConfiguration* extensions, GlobalContextType context_type) {
326 HandleScope scope(isolate_); 326 HandleScope scope(isolate_);
327 Genesis genesis(isolate_, maybe_global_proxy, global_proxy_template, 327 Genesis genesis(isolate_, maybe_global_proxy, global_proxy_template,
328 extensions, context_type); 328 extensions, context_type);
329 Handle<Context> env = genesis.result(); 329 Handle<Context> env = genesis.result();
330 if (env.is_null() || 330 if (env.is_null() ||
331 (context_type != THIN_CONTEXT && !InstallExtensions(env, extensions))) { 331 (context_type != THIN_CONTEXT && !InstallExtensions(env, extensions))) {
332 return Handle<Context>(); 332 return Handle<Context>();
333 } 333 }
334 return scope.CloseAndEscape(env); 334 return scope.CloseAndEscape(env);
335 } 335 }
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 JSObject::AddProperty( 1059 JSObject::AddProperty(
1060 function, isolate->factory()->native_context_index_symbol(), index, NONE); 1060 function, isolate->factory()->native_context_index_symbol(), index, NONE);
1061 isolate->native_context()->set(context_index, *function); 1061 isolate->native_context()->set(context_index, *function);
1062 } 1062 }
1063 1063
1064 1064
1065 // This is only called if we are not using snapshots. The equivalent 1065 // This is only called if we are not using snapshots. The equivalent
1066 // work in the snapshot case is done in HookUpGlobalObject. 1066 // work in the snapshot case is done in HookUpGlobalObject.
1067 void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, 1067 void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
1068 Handle<JSFunction> empty_function, 1068 Handle<JSFunction> empty_function,
1069 ContextType context_type) { 1069 GlobalContextType context_type) {
1070 // --- N a t i v e C o n t e x t --- 1070 // --- N a t i v e C o n t e x t ---
1071 // Use the empty function as closure (no scope info). 1071 // Use the empty function as closure (no scope info).
1072 native_context()->set_closure(*empty_function); 1072 native_context()->set_closure(*empty_function);
1073 native_context()->set_previous(NULL); 1073 native_context()->set_previous(NULL);
1074 // Set extension and global object. 1074 // Set extension and global object.
1075 native_context()->set_extension(*global_object); 1075 native_context()->set_extension(*global_object);
1076 // Security setup: Set the security token of the native context to the global 1076 // Security setup: Set the security token of the native context to the global
1077 // object. This makes the security check between two different contexts fail 1077 // object. This makes the security check between two different contexts fail
1078 // by default even in case of global object reinitialization. 1078 // by default even in case of global object reinitialization.
1079 native_context()->set_security_token(*global_object); 1079 native_context()->set_security_token(*global_object);
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after
1986 Handle<JSFunction> function = Handle<JSFunction>::cast(object); 1986 Handle<JSFunction> function = Handle<JSFunction>::cast(object);
1987 return Handle<JSObject>(JSObject::cast(function->prototype())); 1987 return Handle<JSObject>(JSObject::cast(function->prototype()));
1988 } 1988 }
1989 Handle<String> inner_string = factory->InternalizeUtf8String(inner); 1989 Handle<String> inner_string = factory->InternalizeUtf8String(inner);
1990 DCHECK(!inner_string.is_null()); 1990 DCHECK(!inner_string.is_null());
1991 Handle<Object> value = 1991 Handle<Object> value =
1992 Object::GetProperty(object, inner_string).ToHandleChecked(); 1992 Object::GetProperty(object, inner_string).ToHandleChecked();
1993 return Handle<JSObject>::cast(value); 1993 return Handle<JSObject>::cast(value);
1994 } 1994 }
1995 1995
1996 1996 void Genesis::ConfigureUtilsObject(GlobalContextType context_type) {
1997 void Genesis::ConfigureUtilsObject(ContextType context_type) {
1998 switch (context_type) { 1997 switch (context_type) {
1999 // We still need the utils object to find debug functions. 1998 // We still need the utils object to find debug functions.
2000 case DEBUG_CONTEXT: 1999 case DEBUG_CONTEXT:
2001 return; 2000 return;
2002 // Expose the natives in global if a valid name for it is specified. 2001 // Expose the natives in global if a valid name for it is specified.
2003 case FULL_CONTEXT: { 2002 case FULL_CONTEXT: {
2004 // We still need the utils object after deserialization. 2003 // We still need the utils object after deserialization.
2005 if (isolate()->serializer_enabled()) return; 2004 if (isolate()->serializer_enabled()) return;
2006 if (FLAG_expose_natives_as == NULL) break; 2005 if (FLAG_expose_natives_as == NULL) break;
2007 if (strlen(FLAG_expose_natives_as) == 0) break; 2006 if (strlen(FLAG_expose_natives_as) == 0) break;
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after
2600 Accessors::ArrayLengthInfo(isolate(), attribs); 2599 Accessors::ArrayLengthInfo(isolate(), attribs);
2601 { // Add length. 2600 { // Add length.
2602 AccessorConstantDescriptor d(Handle<Name>(Name::cast(array_length->name())), 2601 AccessorConstantDescriptor d(Handle<Name>(Name::cast(array_length->name())),
2603 array_length, attribs); 2602 array_length, attribs);
2604 initial_map->AppendDescriptor(&d); 2603 initial_map->AppendDescriptor(&d);
2605 } 2604 }
2606 2605
2607 return array_function; 2606 return array_function;
2608 } 2607 }
2609 2608
2610 2609 bool Genesis::InstallNatives(GlobalContextType context_type) {
2611 bool Genesis::InstallNatives(ContextType context_type) {
2612 HandleScope scope(isolate()); 2610 HandleScope scope(isolate());
2613 2611
2614 // Set up the utils object as shared container between native scripts. 2612 // Set up the utils object as shared container between native scripts.
2615 Handle<JSObject> utils = factory()->NewJSObject(isolate()->object_function()); 2613 Handle<JSObject> utils = factory()->NewJSObject(isolate()->object_function());
2616 JSObject::NormalizeProperties(utils, CLEAR_INOBJECT_PROPERTIES, 16, 2614 JSObject::NormalizeProperties(utils, CLEAR_INOBJECT_PROPERTIES, 16,
2617 "utils container for native scripts"); 2615 "utils container for native scripts");
2618 native_context()->set_natives_utils_object(*utils); 2616 native_context()->set_natives_utils_object(*utils);
2619 2617
2620 // Set up the extras utils object as a shared container between native 2618 // Set up the extras utils object as a shared container between native
2621 // scripts and extras. (Extras consume things added there by native scripts.) 2619 // scripts and extras. (Extras consume things added there by native scripts.)
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after
3483 if (enabled_) { 3481 if (enabled_) {
3484 FLAG_track_double_fields = flag_; 3482 FLAG_track_double_fields = flag_;
3485 } 3483 }
3486 } 3484 }
3487 3485
3488 private: 3486 private:
3489 bool flag_; 3487 bool flag_;
3490 bool enabled_; 3488 bool enabled_;
3491 }; 3489 };
3492 3490
3493
3494 Genesis::Genesis(Isolate* isolate, 3491 Genesis::Genesis(Isolate* isolate,
3495 MaybeHandle<JSGlobalProxy> maybe_global_proxy, 3492 MaybeHandle<JSGlobalProxy> maybe_global_proxy,
3496 v8::Local<v8::ObjectTemplate> global_proxy_template, 3493 v8::Local<v8::ObjectTemplate> global_proxy_template,
3497 v8::ExtensionConfiguration* extensions, 3494 v8::ExtensionConfiguration* extensions,
3498 ContextType context_type) 3495 GlobalContextType context_type)
3499 : isolate_(isolate), active_(isolate->bootstrapper()) { 3496 : isolate_(isolate), active_(isolate->bootstrapper()) {
3500 NoTrackDoubleFieldsForSerializerScope disable_scope(isolate); 3497 NoTrackDoubleFieldsForSerializerScope disable_scope(isolate);
3501 result_ = Handle<Context>::null(); 3498 result_ = Handle<Context>::null();
3502 // Before creating the roots we must save the context and restore it 3499 // Before creating the roots we must save the context and restore it
3503 // on all function exits. 3500 // on all function exits.
3504 SaveContext saved_context(isolate); 3501 SaveContext saved_context(isolate);
3505 3502
3506 // During genesis, the boilerplate for stack overflow won't work until the 3503 // During genesis, the boilerplate for stack overflow won't work until the
3507 // environment has been at least partially initialized. Add a stack check 3504 // environment has been at least partially initialized. Add a stack check
3508 // before entering JS code to catch overflow early. 3505 // before entering JS code to catch overflow early.
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
3631 } 3628 }
3632 3629
3633 3630
3634 // Called when the top-level V8 mutex is destroyed. 3631 // Called when the top-level V8 mutex is destroyed.
3635 void Bootstrapper::FreeThreadResources() { 3632 void Bootstrapper::FreeThreadResources() {
3636 DCHECK(!IsActive()); 3633 DCHECK(!IsActive());
3637 } 3634 }
3638 3635
3639 } // namespace internal 3636 } // namespace internal
3640 } // namespace v8 3637 } // namespace v8
OLDNEW
« no previous file with comments | « src/bootstrapper.h ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698