@@ -428,7 +428,13 @@ void IsolateData::CreateProperties() {
428428 NODE_ASYNC_PROVIDER_TYPES (V)
429429#undef V
430430
431- // TODO(legendecas): eagerly create per isolate templates.
431+ Local<FunctionTemplate> templ = FunctionTemplate::New (isolate ());
432+ templ->InstanceTemplate ()->SetInternalFieldCount (
433+ BaseObject::kInternalFieldCount );
434+ templ->Inherit (BaseObject::GetConstructorTemplate (this ));
435+ set_binding_data_ctor_template (templ);
436+
437+ // TODO(legendecas): eagerly create more per-isolate templates.
432438}
433439
434440IsolateData::IsolateData (Isolate* isolate,
@@ -578,17 +584,6 @@ std::unique_ptr<v8::BackingStore> Environment::release_managed_buffer(
578584 return bs;
579585}
580586
581- void Environment::CreateProperties () {
582- HandleScope handle_scope (isolate_);
583-
584- Local<FunctionTemplate> templ = FunctionTemplate::New (isolate ());
585- templ->InstanceTemplate ()->SetInternalFieldCount (
586- BaseObject::kInternalFieldCount );
587- templ->Inherit (BaseObject::GetConstructorTemplate (this ));
588-
589- set_binding_data_ctor_template (templ);
590- }
591-
592587std::string GetExecPath (const std::vector<std::string>& argv) {
593588 char exec_path_buf[2 * PATH_MAX];
594589 size_t exec_path_len = sizeof (exec_path_buf);
@@ -725,15 +720,10 @@ Environment::Environment(IsolateData* isolate_data,
725720void Environment::InitializeMainContext (Local<Context> context,
726721 const EnvSerializeInfo* env_info) {
727722 principal_realm_ = std::make_unique<Realm>(
728- isolate_data_,
729- this ,
730- context,
731- env_info == nullptr ? nullptr : &env_info->principal_realm );
723+ isolate_data_, this , context, MAYBE_FIELD_PTR (env_info, principal_realm));
732724 AssignToContext (context, ContextInfo (" " ));
733725 if (env_info != nullptr ) {
734726 DeserializeProperties (env_info);
735- } else {
736- CreateProperties ();
737727 }
738728
739729 if (!options_->force_async_hooks_checks ) {
@@ -2015,12 +2005,14 @@ bool BaseObject::IsRootNode() const {
20152005 return !persistent_handle_.IsWeak ();
20162006}
20172007
2018- Local<FunctionTemplate> BaseObject::GetConstructorTemplate (Environment* env) {
2019- Local<FunctionTemplate> tmpl = env->base_object_ctor_template ();
2008+ Local<FunctionTemplate> BaseObject::GetConstructorTemplate (
2009+ IsolateData* isolate_data) {
2010+ Local<FunctionTemplate> tmpl = isolate_data->base_object_ctor_template ();
20202011 if (tmpl.IsEmpty ()) {
2021- tmpl = NewFunctionTemplate (env->isolate (), nullptr );
2022- tmpl->SetClassName (FIXED_ONE_BYTE_STRING (env->isolate (), " BaseObject" ));
2023- env->set_base_object_ctor_template (tmpl);
2012+ tmpl = NewFunctionTemplate (isolate_data->isolate (), nullptr );
2013+ tmpl->SetClassName (
2014+ FIXED_ONE_BYTE_STRING (isolate_data->isolate (), " BaseObject" ));
2015+ isolate_data->set_base_object_ctor_template (tmpl);
20242016 }
20252017 return tmpl;
20262018}
0 commit comments