@@ -778,13 +778,13 @@ MaybeLocal<Object> InitializePrivateSymbols(Local<Context> context,
778778 Context::Scope context_scope (context);
779779
780780 Local<ObjectTemplate> private_symbols = ObjectTemplate::New (isolate);
781- Local<Object> private_symbols_object;
782781#define V (PropertyName, _ ) \
783782 private_symbols->Set (isolate, #PropertyName, isolate_data->PropertyName ());
784783
785784 PER_ISOLATE_PRIVATE_SYMBOL_PROPERTIES (V)
786785#undef V
787786
787+ Local<Object> private_symbols_object;
788788 if (!private_symbols->NewInstance (context).ToLocal (&private_symbols_object) ||
789789 private_symbols_object->SetPrototype (context, Null (isolate))
790790 .IsNothing ()) {
@@ -794,6 +794,32 @@ MaybeLocal<Object> InitializePrivateSymbols(Local<Context> context,
794794 return scope.Escape (private_symbols_object);
795795}
796796
797+ MaybeLocal<Object> InitializePerIsolateSymbols (Local<Context> context,
798+ IsolateData* isolate_data) {
799+ CHECK (isolate_data);
800+ Isolate* isolate = context->GetIsolate ();
801+ EscapableHandleScope scope (isolate);
802+ Context::Scope context_scope (context);
803+
804+ Local<ObjectTemplate> per_isolate_symbols = ObjectTemplate::New (isolate);
805+ #define V (PropertyName, _ ) \
806+ per_isolate_symbols->Set ( \
807+ isolate, #PropertyName, isolate_data->PropertyName ());
808+
809+ PER_ISOLATE_SYMBOL_PROPERTIES (V)
810+ #undef V
811+
812+ Local<Object> per_isolate_symbols_object;
813+ if (!per_isolate_symbols->NewInstance (context).ToLocal (
814+ &per_isolate_symbols_object) ||
815+ per_isolate_symbols_object->SetPrototype (context, Null (isolate))
816+ .IsNothing ()) {
817+ return MaybeLocal<Object>();
818+ }
819+
820+ return scope.Escape (per_isolate_symbols_object);
821+ }
822+
797823Maybe<void > InitializePrimordials (Local<Context> context,
798824 IsolateData* isolate_data) {
799825 // Run per-context JS files.
@@ -822,6 +848,12 @@ Maybe<void> InitializePrimordials(Local<Context> context,
822848 return Nothing<void >();
823849 }
824850
851+ Local<Object> per_isolate_symbols;
852+ if (!InitializePerIsolateSymbols (context, isolate_data)
853+ .ToLocal (&per_isolate_symbols)) {
854+ return Nothing<void >();
855+ }
856+
825857 static const char * context_files[] = {" internal/per_context/primordials" ,
826858 " internal/per_context/domexception" ,
827859 " internal/per_context/messageport" ,
@@ -837,7 +869,8 @@ Maybe<void> InitializePrimordials(Local<Context> context,
837869 builtin_loader.SetEagerCompile ();
838870
839871 for (const char ** module = context_files; *module != nullptr ; module ++) {
840- Local<Value> arguments[] = {exports, primordials, private_symbols};
872+ Local<Value> arguments[] = {
873+ exports, primordials, private_symbols, per_isolate_symbols};
841874
842875 if (builtin_loader
843876 .CompileAndCall (
0 commit comments