diff options
author | 2021-05-18 14:40:37 -0700 | |
---|---|---|
committer | 2021-05-18 14:40:37 -0700 | |
commit | 7396fae4e2430eb474c6f2c2f5677faa567568e7 (patch) | |
tree | c4019f14cd6d65d718e8c0d558c94259d67e4a59 /src/js_parser | |
parent | 904bf17a5171eb9b450c5cada6450fed348c6358 (diff) | |
download | bun-7396fae4e2430eb474c6f2c2f5677faa567568e7.tar.gz bun-7396fae4e2430eb474c6f2c2f5677faa567568e7.tar.zst bun-7396fae4e2430eb474c6f2c2f5677faa567568e7.zip |
Fix DotDefine
Former-commit-id: 78fa4c4f87ca85191e045d88d49245f410506f74
Diffstat (limited to 'src/js_parser')
-rw-r--r-- | src/js_parser/js_parser.zig | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig index 2d1f78ba3..7fb347c19 100644 --- a/src/js_parser/js_parser.zig +++ b/src/js_parser/js_parser.zig @@ -9759,14 +9759,14 @@ pub const P = struct { } // // trim empty statements - // if (data.stmts.len == 0) { - // stmts.append(Stmt{ .data = Prefill.Data.SEmpty, .loc = stmt.loc }) catch unreachable; - // return; - // } else if (data.stmts.len == 1 and !statementCaresAboutScope(data.stmts[0])) { - // // Unwrap blocks containing a single statement - // stmts.append(data.stmts[0]) catch unreachable; - // return; - // } + if (data.stmts.len == 0) { + stmts.append(Stmt{ .data = Prefill.Data.SEmpty, .loc = stmt.loc }) catch unreachable; + return; + } else if (data.stmts.len == 1 and !statementCaresAboutScope(data.stmts[0])) { + // Unwrap blocks containing a single statement + stmts.append(data.stmts[0]) catch unreachable; + return; + } stmts.append(stmt.*) catch unreachable; return; }, @@ -9809,6 +9809,7 @@ pub const P = struct { data.no = p.visitSingleStmt(no, .none); } + // Trim unnecessary "else" clauses if (data.no != null and @as(Stmt.Tag, data.no.?.data) == .s_empty) { data.no = null; } @@ -10279,9 +10280,14 @@ pub const P = struct { switch (expr.data) { .e_dot => |ex| { if (parts.len > 1) { + if (ex.optional_chain != null) { + return false; + } + // Intermediates must be dot expressions const last = parts.len - 1; - return strings.eql(parts[last], ex.name) and ex.optional_chain == null and p.isDotDefineMatch(ex.target, parts[0..last]); + const is_tail_match = strings.eql(parts[last], ex.name); + return is_tail_match and p.isDotDefineMatch(ex.target, parts[0..last]); } }, .e_import_meta => |ex| { |