LibJS/Bytecode: Always evaluate LHS first in assignment expressions

This fixes an issue where expressions like `a[i] = a[++i]` could
evaluate `++i` before `a[i]`.
This commit is contained in:
Andreas Kling 2024-03-05 09:48:13 +01:00
parent 1986693edc
commit 0f8c6dc9ad
Notes: sideshowbarker 2024-07-17 08:43:11 +09:00
3 changed files with 27 additions and 2 deletions

View file

@ -435,7 +435,9 @@ Bytecode::CodeGenerationErrorOr<Optional<Bytecode::Operand>> AssignmentExpressio
}
if (expression.is_computed()) {
computed_property = TRY(expression.property().generate_bytecode(generator)).value();
auto property = TRY(expression.property().generate_bytecode(generator)).value();
computed_property = Bytecode::Operand(generator.allocate_register());
generator.emit<Bytecode::Op::Mov>(*computed_property, property);
// To be continued later with PutByValue.
} else if (expression.property().is_identifier()) {