LibJS/Bytecode: Turn UnaryMinus(NumericLiteral) into a constant

This commit is contained in:
Andreas Kling 2024-05-09 19:48:25 +02:00 committed by Alexander Kalenik
parent e37feaa196
commit 56a3ccde1a
Notes: sideshowbarker 2024-07-16 23:13:25 +09:00

View file

@ -269,6 +269,14 @@ Bytecode::CodeGenerationErrorOr<Optional<ScopedOperand>> LogicalExpression::gene
Bytecode::CodeGenerationErrorOr<Optional<ScopedOperand>> UnaryExpression::generate_bytecode(Bytecode::Generator& generator, Optional<ScopedOperand> preferred_dst) const
{
Bytecode::Generator::SourceLocationScope scope(generator, *this);
// OPTIMIZATION: Turn expressions like `-1` into a constant.
if (m_op == UnaryOp::Minus && is<NumericLiteral>(*m_lhs)) {
auto& numeric_literal = static_cast<NumericLiteral const&>(*m_lhs);
auto value = numeric_literal.value();
return generator.add_constant(Value(-value.as_double()));
}
if (m_op == UnaryOp::Delete)
return generator.emit_delete_reference(m_lhs);