@@ -380,7 +380,7 @@ FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point)
380380
381381 handle_End: {
382382 auto & instruction = *reinterpret_cast <Op::End const *>(&bytecode[program_counter]);
383- accumulator ( ) = get (instruction.value ());
383+ reg ( Register::return_value () ) = get (instruction.value ());
384384 return ;
385385 }
386386
@@ -720,7 +720,6 @@ ThrowCompletionOr<Value> Interpreter::run_executable(ExecutionContext& context,
720720 context.registers_and_constants_and_locals_arguments = context.registers_and_constants_and_locals_and_arguments_span ();
721721
722722 reg (Register::accumulator ()) = initial_accumulator_value;
723- reg (Register::return_value ()) = js_special_empty_value ();
724723
725724 // NOTE: We only copy the `this` value from ExecutionContext if it's not already set.
726725 // If we are re-entering an async/generator context, the `this` value
@@ -749,22 +748,16 @@ ThrowCompletionOr<Value> Interpreter::run_executable(ExecutionContext& context,
749748 }
750749 }
751750
752- Value return_value;
753- if (auto return_register_value = reg (Register::return_value ()); !return_register_value.is_special_empty_value ())
754- return_value = return_register_value;
755- else {
756- return_value = reg (Register::accumulator ());
757- if (return_value.is_special_empty_value ())
758- return_value = js_undefined ();
759- }
760-
761- auto exception = reg (Register::exception ());
762-
763751 vm ().run_queued_promise_jobs ();
764752 vm ().finish_execution_generation ();
765753
754+ auto exception = reg (Register::exception ());
766755 if (!exception.is_special_empty_value ()) [[unlikely]]
767756 return throw_completion (exception);
757+
758+ auto return_value = reg (Register::return_value ());
759+ if (return_value.is_special_empty_value ())
760+ return_value = js_undefined ();
768761 return return_value;
769762}
770763
0 commit comments