aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-09 05:07:07 -0700
committerGravatar Dylan Conway <dylan.conway567@gmail.com> 2023-04-10 11:58:19 -0700
commit517bbcbb2695b3bb5f63ca49e9449d991b34a212 (patch)
tree626fa240d5b4fc8d9ce8d6b95a62b0f898833722
parente5c431f52ea2559b9c8cf6ac2496c1a62b8b1cf8 (diff)
downloadbun-517bbcbb2695b3bb5f63ca49e9449d991b34a212.tar.gz
bun-517bbcbb2695b3bb5f63ca49e9449d991b34a212.tar.zst
bun-517bbcbb2695b3bb5f63ca49e9449d991b34a212.zip
Lower for-in variable initializers
-rw-r--r--src/js_parser.zig22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig
index 219aee8ad..afbc631b9 100644
--- a/src/js_parser.zig
+++ b/src/js_parser.zig
@@ -17623,6 +17623,28 @@ fn NewParser_(
data.value = p.visitExpr(data.value);
data.body = p.visitLoopBody(data.body);
+ // Check for a variable initializer
+ if (data.init.data == .s_local and data.init.data.s_local.kind == .k_var) {
+
+ // Lower for-in variable initializers in case the output is used in strict mode
+ var local = data.init.data.s_local;
+ if (local.decls.len == 1) {
+ var decl: *G.Decl = &local.decls[0];
+ if (decl.binding.data == .b_identifier) {
+ if (decl.value) |val| {
+ stmts.append(
+ Stmt.assign(
+ Expr.initIdentifier(decl.binding.data.b_identifier.ref, decl.binding.loc),
+ val,
+ p.allocator,
+ ),
+ ) catch unreachable;
+ decl.value = null;
+ }
+ }
+ }
+ }
+
if (data.init.data == .s_local and data.init.data.s_local.kind == .k_var) {
const relocate = p.maybeRelocateVarsToTopLevel(data.init.data.s_local.decls, RelocateVars.Mode.for_in_or_for_of);
if (relocate.stmt) |relocated_stmt| {