소스 검색

LibJS: Make JS::Script keep the VM alive

Script has a Handle member (m_realm), and for handles to remain valid,
the VM must stay alive.
Andreas Kling 3 년 전
부모
커밋
f08a46bd9e
2개의 변경된 파일5개의 추가작업 그리고 1개의 파일을 삭제
  1. 2 1
      Userland/Libraries/LibJS/Script.cpp
  2. 3 0
      Userland/Libraries/LibJS/Script.h

+ 2 - 1
Userland/Libraries/LibJS/Script.cpp

@@ -30,7 +30,8 @@ NonnullRefPtr<Script> Script::parse(StringView source_text, Realm& realm, String
 }
 }
 
 
 Script::Script(Realm& realm, NonnullRefPtr<Program> parse_node)
 Script::Script(Realm& realm, NonnullRefPtr<Program> parse_node)
-    : m_realm(make_handle(&realm))
+    : m_vm(realm.vm())
+    , m_realm(make_handle(&realm))
     , m_parse_node(move(parse_node))
     , m_parse_node(move(parse_node))
 {
 {
 }
 }

+ 3 - 0
Userland/Libraries/LibJS/Script.h

@@ -26,6 +26,9 @@ public:
 private:
 private:
     Script(Realm&, NonnullRefPtr<Program>);
     Script(Realm&, NonnullRefPtr<Program>);
 
 
+    // Handles are not safe unless we keep the VM alive.
+    NonnullRefPtr<VM> m_vm;
+
     Handle<Realm> m_realm;               // [[Realm]]
     Handle<Realm> m_realm;               // [[Realm]]
     NonnullRefPtr<Program> m_parse_node; // [[ECMAScriptCode]]
     NonnullRefPtr<Program> m_parse_node; // [[ECMAScriptCode]]
 };
 };