diff options
author | 2023-04-09 05:07:07 -0700 | |
---|---|---|
committer | 2023-04-10 11:58:19 -0700 | |
commit | 517bbcbb2695b3bb5f63ca49e9449d991b34a212 (patch) | |
tree | 626fa240d5b4fc8d9ce8d6b95a62b0f898833722 | |
parent | e5c431f52ea2559b9c8cf6ac2496c1a62b8b1cf8 (diff) | |
download | bun-517bbcbb2695b3bb5f63ca49e9449d991b34a212.tar.gz bun-517bbcbb2695b3bb5f63ca49e9449d991b34a212.tar.zst bun-517bbcbb2695b3bb5f63ca49e9449d991b34a212.zip |
Lower for-in variable initializers
-rw-r--r-- | src/js_parser.zig | 22 |
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| { |