1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:37:35 +00:00

LibJS/Bytecode: Handle awkward initialization case for duplicate var

`var` declarations can have duplicates, but duplicate `let` or `const`
bindings are a syntax error.

Because of this, we can sink `let` and `const` directly into the
preferred_dst if available. This is not safe for `var` since the
preferred_dst may be used in the initializer.

This patch fixes the issue by simply skipping the preferred_dst
optimization for `var` declarations.
This commit is contained in:
Andreas Kling 2024-03-01 12:54:50 +01:00
parent 2bbdfe0fba
commit bc21ed151e
2 changed files with 23 additions and 3 deletions

View file

@ -33,3 +33,18 @@ test("Issue #8198 arrow function escapes function scope", () => {
f();
expect(b).toBe(3);
});
test("Referencing the declared var in the initializer of a duplicate var declaration", () => {
function c(e) {
e.foo;
}
function h() {}
function go() {
var p = true;
var p = h() || c(p);
return 0;
}
// It's all good as long as go() doesn't throw.
expect(go()).toBe(0);
});