LibJS: Make Op::Return value required

It turns out we do not have any scenario where this is not provided.
This commit is contained in:
Shannon Booth 2025-05-16 12:28:51 +12:00 committed by Alexander Kalenik
parent 17364c6d36
commit 20dba8f1ab
Notes: github-actions[bot] 2025-05-23 01:27:06 +00:00
3 changed files with 8 additions and 13 deletions

View file

@ -3456,8 +3456,9 @@ Bytecode::CodeGenerationErrorOr<Optional<ScopedOperand>> ClassFieldInitializerSt
{
Bytecode::Generator::SourceLocationScope scope(generator, *this);
auto value = TRY(generator.emit_named_evaluation_if_anonymous_function(*m_expression, generator.intern_identifier(m_class_field_identifier_name), preferred_dst));
VERIFY(value.has_value());
generator.perform_needed_unwinds<Bytecode::Op::Return>();
generator.emit<Bytecode::Op::Return>(value.has_value() ? value->operand() : Optional<Operand> {});
generator.emit<Bytecode::Op::Return>(value->operand());
return value;
}

View file

@ -2925,10 +2925,7 @@ void NewFunction::execute_impl(Bytecode::Interpreter& interpreter) const
void Return::execute_impl(Bytecode::Interpreter& interpreter) const
{
if (m_value.has_value())
interpreter.do_return(interpreter.get(*m_value));
else
interpreter.do_return(js_undefined());
interpreter.do_return(interpreter.get(m_value));
}
ThrowCompletionOr<void> Increment::execute_impl(Bytecode::Interpreter& interpreter) const
@ -3781,9 +3778,7 @@ ByteString NewClass::to_byte_string_impl(Bytecode::Executable const& executable)
ByteString Return::to_byte_string_impl(Bytecode::Executable const& executable) const
{
if (m_value.has_value())
return ByteString::formatted("Return {}", format_operand("value"sv, m_value.value(), executable));
return "Return";
return ByteString::formatted("Return {}", format_operand("value"sv, m_value, executable));
}
ByteString Increment::to_byte_string_impl(Bytecode::Executable const& executable) const

View file

@ -2176,7 +2176,7 @@ class Return final : public Instruction {
public:
constexpr static bool IsTerminator = true;
explicit Return(Optional<Operand> value = {})
explicit Return(Operand value)
: Instruction(Type::Return)
, m_value(value)
{
@ -2186,14 +2186,13 @@ public:
ByteString to_byte_string_impl(Bytecode::Executable const&) const;
void visit_operands_impl(Function<void(Operand&)> visitor)
{
if (m_value.has_value())
visitor(m_value.value());
visitor(m_value);
}
Optional<Operand> const& value() const { return m_value; }
Operand const& value() const { return m_value; }
private:
Optional<Operand> m_value;
Operand m_value;
};
class Increment final : public Instruction {