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
commit 0f8c6dc9ad
Notes: sideshowbarker 2024-07-17 08:43:11 +09:00
3 changed files with 27 additions and 2 deletions

View file

@ -0,0 +1,21 @@
test("Assignment should always evaluate LHS first", () => {
function go(a) {
let i = 0;
a[i] = a[++i];
}
let a = [1, 2, 3];
go(a);
expect(a).toEqual([2, 2, 3]);
});
test("Binary assignment should always evaluate LHS first", () => {
function go(a) {
let i = 0;
a[i] |= a[++i];
}
let a = [1, 2];
go(a);
expect(a).toEqual([3, 2]);
});