aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-01 14:41:36 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-01 14:41:36 -0800
commitd47e0de1750c9d234febdebeac4415470deea008 (patch)
treebefbde5c2f428023f263258800d98b9ed8244861
parent8c470194ce13781af550a74b2b4f2c1ed06670ac (diff)
downloadbun-d47e0de1750c9d234febdebeac4415470deea008.tar.gz
bun-d47e0de1750c9d234febdebeac4415470deea008.tar.zst
bun-d47e0de1750c9d234febdebeac4415470deea008.zip
[JS Printer] Fix printing edgecase with nested vars that use object destructuring
-rw-r--r--integration/snippets/multiple-var.js10
-rw-r--r--src/js_printer.zig14
2 files changed, 23 insertions, 1 deletions
diff --git a/integration/snippets/multiple-var.js b/integration/snippets/multiple-var.js
new file mode 100644
index 000000000..cd7a84109
--- /dev/null
+++ b/integration/snippets/multiple-var.js
@@ -0,0 +1,10 @@
+var foo = true;
+
+if (true) {
+ var { foo } = { foo: false };
+}
+
+export function test() {
+ console.assert(foo === false, "foo should be false");
+ return testDone(import.meta.url);
+}
diff --git a/src/js_printer.zig b/src/js_printer.zig
index 0300630dc..2da9703fb 100644
--- a/src/js_printer.zig
+++ b/src/js_printer.zig
@@ -2041,7 +2041,6 @@ pub fn NewPrinter(
p.printExpr(item.value.?, .comma, ExprFlag.None());
return;
}
- const _key = item.key orelse unreachable;
if (item.flags.is_static) {
p.print("static");
@@ -2082,8 +2081,21 @@ pub fn NewPrinter(
},
else => {},
}
+
+ // If var is declared in a parent scope and var is then written via destructuring pattern, key is null
+ // example:
+ // var foo = 1;
+ // if (true) {
+ // var { foo } = { foo: 2 };
+ // }
+ if (item.key == null) {
+ p.printExpr(val, .comma, ExprFlag.None());
+ return;
+ }
}
+ const _key = item.key.?;
+
if (item.flags.is_computed) {
p.print("[");
p.printExpr(_key, .comma, ExprFlag.None());