Skip to content

Commit 62781f4

Browse files
committed
LibJS: Use return_value register for "last completion" return values
This simplifies the epilogue in run_executable().
1 parent 5706831 commit 62781f4

File tree

1 file changed

+6
-13
lines changed

1 file changed

+6
-13
lines changed

Libraries/LibJS/Bytecode/Interpreter.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)