@@ -787,13 +787,13 @@ MaybeLocal<Object> InitializePrivateSymbols(Local<Context> context,
787787 Context::Scope context_scope (context);
788788
789789 Local<ObjectTemplate> private_symbols = ObjectTemplate::New (isolate);
790- Local<Object> private_symbols_object;
791790#define V (PropertyName, _ ) \
792791 private_symbols->Set (isolate, #PropertyName, isolate_data->PropertyName ());
793792
794793 PER_ISOLATE_PRIVATE_SYMBOL_PROPERTIES (V)
795794#undef V
796795
796+ Local<Object> private_symbols_object;
797797 if (!private_symbols->NewInstance (context).ToLocal (&private_symbols_object) ||
798798 private_symbols_object->SetPrototypeV2 (context, Null (isolate))
799799 .IsNothing ()) {
@@ -803,6 +803,32 @@ MaybeLocal<Object> InitializePrivateSymbols(Local<Context> context,
803803 return scope.Escape (private_symbols_object);
804804}
805805
806+ MaybeLocal<Object> InitializePerIsolateSymbols (Local<Context> context,
807+ IsolateData* isolate_data) {
808+ CHECK (isolate_data);
809+ Isolate* isolate = context->GetIsolate ();
810+ EscapableHandleScope scope (isolate);
811+ Context::Scope context_scope (context);
812+
813+ Local<ObjectTemplate> per_isolate_symbols = ObjectTemplate::New (isolate);
814+ #define V (PropertyName, _ ) \
815+ per_isolate_symbols->Set ( \
816+ isolate, #PropertyName, isolate_data->PropertyName ());
817+
818+ PER_ISOLATE_SYMBOL_PROPERTIES (V)
819+ #undef V
820+
821+ Local<Object> per_isolate_symbols_object;
822+ if (!per_isolate_symbols->NewInstance (context).ToLocal (
823+ &per_isolate_symbols_object) ||
824+ per_isolate_symbols_object->SetPrototypeV2 (context, Null (isolate))
825+ .IsNothing ()) {
826+ return MaybeLocal<Object>();
827+ }
828+
829+ return scope.Escape (per_isolate_symbols_object);
830+ }
831+
806832Maybe<void > InitializePrimordials (Local<Context> context,
807833 IsolateData* isolate_data) {
808834 // Run per-context JS files.
@@ -832,6 +858,12 @@ Maybe<void> InitializePrimordials(Local<Context> context,
832858 return Nothing<void >();
833859 }
834860
861+ Local<Object> per_isolate_symbols;
862+ if (!InitializePerIsolateSymbols (context, isolate_data)
863+ .ToLocal (&per_isolate_symbols)) {
864+ return Nothing<void >();
865+ }
866+
835867 static const char * context_files[] = {" internal/per_context/primordials" ,
836868 " internal/per_context/domexception" ,
837869 " internal/per_context/messageport" ,
@@ -847,7 +879,8 @@ Maybe<void> InitializePrimordials(Local<Context> context,
847879 builtin_loader.SetEagerCompile ();
848880
849881 for (const char ** module = context_files; *module != nullptr ; module ++) {
850- Local<Value> arguments[] = {exports, primordials, private_symbols};
882+ Local<Value> arguments[] = {
883+ exports, primordials, private_symbols, per_isolate_symbols};
851884
852885 if (builtin_loader
853886 .CompileAndCall (
0 commit comments