diff options
author | Linus Groh <mail@linusgroh.de> | 2020-09-11 22:47:43 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-12 09:31:16 +0200 |
commit | ec43f73b74e70ff79403855edad8ff464c4bb64d (patch) | |
tree | 3ac3b2ed8945756ffc74d27bc29b178436c38fa3 /Libraries/LibJS/AST.cpp | |
parent | bd6390d8cbb2a9011c9351a8f78a43a544f31f96 (diff) | |
download | serenity-ec43f73b74e70ff79403855edad8ff464c4bb64d.zip |
LibJS: Extract most of Interpreter's run() into execute_statement()
Interpreter::run() was so far being used both as the "public API entry
point" for running a JS::Program as well as internally to execute
JS::Statement|s of all kinds - this is now more distinctly separated.
A program as returned by the parser is still going through run(), which
is responsible for creating the initial global call frame, but all other
statements are executed via execute_statement() directly.
Fixes #3437, a regression introduced by adding ASSERT(!exception()) to
run() without considering the effects that would have on internal usage.
Diffstat (limited to 'Libraries/LibJS/AST.cpp')
-rw-r--r-- | Libraries/LibJS/AST.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/Libraries/LibJS/AST.cpp b/Libraries/LibJS/AST.cpp index bd7fa5ee38..02dcfa7006 100644 --- a/Libraries/LibJS/AST.cpp +++ b/Libraries/LibJS/AST.cpp @@ -76,7 +76,7 @@ static String get_function_name(Interpreter& interpreter, Value value) Value ScopeNode::execute(Interpreter& interpreter, GlobalObject& global_object) const { - return interpreter.run(global_object, *this); + return interpreter.execute_statement(global_object, *this); } Value FunctionDeclaration::execute(Interpreter&, GlobalObject&) const @@ -225,10 +225,10 @@ Value IfStatement::execute(Interpreter& interpreter, GlobalObject& global_object return {}; if (predicate_result.to_boolean()) - return interpreter.run(global_object, *m_consequent); + return interpreter.execute_statement(global_object, *m_consequent); if (m_alternate) - return interpreter.run(global_object, *m_alternate); + return interpreter.execute_statement(global_object, *m_alternate); return js_undefined(); } @@ -239,7 +239,7 @@ Value WhileStatement::execute(Interpreter& interpreter, GlobalObject& global_obj while (m_test->execute(interpreter, global_object).to_boolean()) { if (interpreter.exception()) return {}; - last_value = interpreter.run(global_object, *m_body); + last_value = interpreter.execute_statement(global_object, *m_body); if (interpreter.exception()) return {}; } @@ -253,7 +253,7 @@ Value DoWhileStatement::execute(Interpreter& interpreter, GlobalObject& global_o do { if (interpreter.exception()) return {}; - last_value = interpreter.run(global_object, *m_body); + last_value = interpreter.execute_statement(global_object, *m_body); if (interpreter.exception()) return {}; } while (m_test->execute(interpreter, global_object).to_boolean()); @@ -293,7 +293,7 @@ Value ForStatement::execute(Interpreter& interpreter, GlobalObject& global_objec return {}; if (!test_result.to_boolean()) break; - last_value = interpreter.run(global_object, *m_body); + last_value = interpreter.execute_statement(global_object, *m_body); if (interpreter.exception()) return {}; if (interpreter.should_unwind()) { @@ -314,7 +314,7 @@ Value ForStatement::execute(Interpreter& interpreter, GlobalObject& global_objec } } else { while (true) { - last_value = interpreter.run(global_object, *m_body); + last_value = interpreter.execute_statement(global_object, *m_body); if (interpreter.exception()) return {}; if (interpreter.should_unwind()) { @@ -381,7 +381,7 @@ Value ForInStatement::execute(Interpreter& interpreter, GlobalObject& global_obj interpreter.set_variable(variable_name, property_name.value_and_attributes(object).value, global_object); if (interpreter.exception()) return {}; - last_value = interpreter.run(global_object, *m_body); + last_value = interpreter.execute_statement(global_object, *m_body); if (interpreter.exception()) return {}; if (interpreter.should_unwind()) { @@ -421,7 +421,7 @@ Value ForOfStatement::execute(Interpreter& interpreter, GlobalObject& global_obj get_iterator_values(global_object, rhs_result, [&](Value value) { interpreter.set_variable(variable_name, value, global_object); - last_value = interpreter.run(global_object, *m_body); + last_value = interpreter.execute_statement(global_object, *m_body); if (interpreter.exception()) return IterationDecision::Break; if (interpreter.should_unwind()) { @@ -1777,12 +1777,12 @@ void ThrowStatement::dump(int indent) const Value TryStatement::execute(Interpreter& interpreter, GlobalObject& global_object) const { - interpreter.run(global_object, block(), {}, ScopeType::Try); + interpreter.execute_statement(global_object, m_block, {}, ScopeType::Try); if (auto* exception = interpreter.exception()) { if (m_handler) { interpreter.clear_exception(); ArgumentVector arguments { { m_handler->parameter(), exception->value() } }; - interpreter.run(global_object, m_handler->body(), move(arguments)); + interpreter.execute_statement(global_object, m_handler->body(), move(arguments)); } } |