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
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); 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)); 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.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; return value;
} }

View file

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

View file

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