mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-10-26 14:57:54 +03:00
LibJS/Bytecode: Get result from accumulator in PerformEval
This is how the JS REPL retrieves the result of executing bytecode.
This commit is contained in:
parent
fe2efbb2fc
commit
9e06fe4b3f
Notes:
sideshowbarker
2024-07-17 08:50:27 +09:00
Author: https://github.com/Lubrsi Commit: https://github.com/SerenityOS/serenity/commit/9e06fe4b3f Pull-request: https://github.com/SerenityOS/serenity/pull/14614 Reviewed-by: https://github.com/linusg ✅
@ -703,10 +703,13 @@ ThrowCompletionOr<Value> perform_eval(GlobalObject& global_object, Value x, Call
|
|||||||
executable->name = "eval"sv;
|
executable->name = "eval"sv;
|
||||||
if (Bytecode::g_dump_bytecode)
|
if (Bytecode::g_dump_bytecode)
|
||||||
executable->dump();
|
executable->dump();
|
||||||
eval_result = TRY(bytecode_interpreter->run(*executable));
|
auto result_or_error = bytecode_interpreter->run_and_return_frame(*executable, nullptr);
|
||||||
// Turn potentially empty JS::Value from the bytecode interpreter into an empty Optional
|
if (result_or_error.value.is_error())
|
||||||
if (eval_result.has_value() && eval_result->is_empty())
|
return result_or_error.value.release_error();
|
||||||
eval_result = {};
|
|
||||||
|
auto& result = result_or_error.frame->registers[0];
|
||||||
|
if (!result.is_empty())
|
||||||
|
eval_result = result;
|
||||||
} else {
|
} else {
|
||||||
auto& ast_interpreter = vm.interpreter();
|
auto& ast_interpreter = vm.interpreter();
|
||||||
eval_result = TRY(program->execute(ast_interpreter, global_object));
|
eval_result = TRY(program->execute(ast_interpreter, global_object));
|
||||||
|
Loading…
Reference in New Issue
Block a user