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:
Luke Wilde 2022-07-17 19:26:43 +01:00 committed by Linus Groh
parent fe2efbb2fc
commit 9e06fe4b3f
Notes: sideshowbarker 2024-07-17 08:50:27 +09:00

View File

@ -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));