Ver código fonte

LibJS: Make Interpreter::run() a void function

With one small exception, this is how we've been using this API already,
and it makes sense: a Program is just a ScopeNode with any number of
statements, which are executed one by one. There's no explicit return
value at the end, only a completion value of the last value-producing
statement, which we then access using VM::last_value() if needed (e.g.
in the REPL).
Linus Groh 4 anos atrás
pai
commit
dadf2e8251

+ 2 - 3
Userland/Libraries/LibJS/Interpreter.cpp

@@ -54,7 +54,7 @@ Interpreter::~Interpreter()
 {
 }
 
-Value Interpreter::run(GlobalObject& global_object, const Program& program)
+void Interpreter::run(GlobalObject& global_object, const Program& program)
 {
     auto& vm = this->vm();
     VERIFY(!vm.exception());
@@ -71,9 +71,8 @@ Value Interpreter::run(GlobalObject& global_object, const Program& program)
     global_call_frame.is_strict_mode = program.is_strict_mode();
     vm.push_call_frame(global_call_frame, global_object);
     VERIFY(!vm.exception());
-    auto result = program.execute(*this, global_object);
+    program.execute(*this, global_object);
     vm.pop_call_frame();
-    return result;
 }
 
 GlobalObject& Interpreter::global_object()

+ 1 - 1
Userland/Libraries/LibJS/Interpreter.h

@@ -61,7 +61,7 @@ public:
 
     ~Interpreter();
 
-    Value run(GlobalObject&, const Program&);
+    void run(GlobalObject&, const Program&);
 
     GlobalObject& global_object();
     const GlobalObject& global_object() const;

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

@@ -555,10 +555,11 @@ JS::Value Document::run_javascript(const StringView& source, const StringView& f
         return JS::js_undefined();
     }
     auto& interpreter = document().interpreter();
-    auto result = interpreter.run(interpreter.global_object(), *program);
-    if (interpreter.exception())
-        interpreter.vm().clear_exception();
-    return result;
+    auto& vm = interpreter.vm();
+    interpreter.run(interpreter.global_object(), *program);
+    if (vm.exception())
+        vm.clear_exception();
+    return vm.last_value();
 }
 
 // https://dom.spec.whatwg.org/#dom-document-createelement