Ver código fonte

LibWeb: Replace ScriptExecutionContext::interpreter() with realm()

Here goes another step towards Document not having a JS::Interpreter.
Andreas Kling 3 anos atrás
pai
commit
e649144a90

+ 2 - 3
Userland/Libraries/LibWeb/Bindings/ScriptExecutionContext.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
@@ -16,8 +16,7 @@ class ScriptExecutionContext {
 public:
     virtual ~ScriptExecutionContext();
 
-    // FIXME: This should not work this way long-term, interpreters should be on the stack.
-    virtual JS::Interpreter& interpreter() = 0;
+    virtual JS::Realm& realm() = 0;
 };
 
 }

+ 5 - 0
Userland/Libraries/LibWeb/DOM/Document.cpp

@@ -630,6 +630,11 @@ Color Document::visited_link_color() const
     return page()->palette().visited_link();
 }
 
+JS::Realm& Document::realm()
+{
+    return interpreter().realm();
+}
+
 JS::Interpreter& Document::interpreter()
 {
     if (!m_interpreter) {

+ 2 - 1
Userland/Libraries/LibWeb/DOM/Document.h

@@ -173,7 +173,8 @@ public:
     const String& source() const { return m_source; }
     void set_source(const String& source) { m_source = source; }
 
-    virtual JS::Interpreter& interpreter() override;
+    JS::Realm& realm();
+    JS::Interpreter& interpreter();
 
     JS::Value run_javascript(const StringView& source, const StringView& filename = "(unknown)");
 

+ 1 - 1
Userland/Libraries/LibWeb/DOM/EventTarget.cpp

@@ -133,7 +133,7 @@ void EventTarget::set_event_handler_attribute(FlyString const& name, HTML::Event
             dbgln("Failed to parse script in event handler attribute '{}'", name);
             return;
         }
-        auto* function = JS::OrdinaryFunctionObject::create(target->script_execution_context()->interpreter().global_object(), name, program->body(), program->parameters(), program->function_length(), nullptr, JS::FunctionKind::Regular, false, false);
+        auto* function = JS::OrdinaryFunctionObject::create(target->script_execution_context()->realm().global_object(), name, program->body(), program->parameters(), program->function_length(), nullptr, JS::FunctionKind::Regular, false, false);
         VERIFY(function);
         listener = adopt_ref(*new DOM::EventListener(JS::make_handle(static_cast<JS::FunctionObject*>(function))));
     }