Jelajahi Sumber

LibJS: Support creation of global object in Realm::set_global_object()

Linus Groh 3 tahun lalu
induk
melakukan
885004abee
1 mengubah file dengan 5 tambahan dan 2 penghapusan
  1. 5 2
      Userland/Libraries/LibJS/Runtime/Realm.cpp

+ 5 - 2
Userland/Libraries/LibJS/Runtime/Realm.cpp

@@ -75,8 +75,11 @@ void Realm::set_global_object(GlobalObject* global_object, GlobalObject* this_va
 {
     // 1. If globalObj is undefined, then
     if (global_object == nullptr) {
-        // NOTE: Step 1 is not supported, the global object must be allocated elsewhere.
-        VERIFY_NOT_REACHED();
+        // a. Let intrinsics be realmRec.[[Intrinsics]].
+        // b. Set globalObj to OrdinaryObjectCreate(intrinsics.[[%Object.prototype%]]).
+        // NOTE: We allocate a proper GlobalObject directly as this plain object is
+        //       turned into one via SetDefaultGlobalBindings in the spec.
+        global_object = heap().allocate_without_global_object<GlobalObject>(*this);
     }
 
     // 2. Assert: Type(globalObj) is Object.