diff options
author | 2022-04-09 20:23:36 -0700 | |
---|---|---|
committer | 2022-04-09 20:23:36 -0700 | |
commit | 4de7978b2763d95ddcded6ccda9b7b80cca7e8f1 (patch) | |
tree | b7a668a07db07a1e832ca805dc608ee5b34093cf /src/js_parser/js_parser.zig | |
parent | 696bb3b02609f6121863d475ba008f192808dadd (diff) | |
download | bun-4de7978b2763d95ddcded6ccda9b7b80cca7e8f1.tar.gz bun-4de7978b2763d95ddcded6ccda9b7b80cca7e8f1.tar.zst bun-4de7978b2763d95ddcded6ccda9b7b80cca7e8f1.zip |
[JS Parser] Fix code simplification bug with `!` and unary expressions
Diffstat (limited to 'src/js_parser/js_parser.zig')
-rw-r--r-- | src/js_parser/js_parser.zig | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig index aa4219011..d6cb1523c 100644 --- a/src/js_parser/js_parser.zig +++ b/src/js_parser/js_parser.zig @@ -12892,6 +12892,8 @@ fn NewParser_( switch (e_.op) { .un_not => { + e_.value = SideEffects.simplifyBoolean(p, e_.value); + const side_effects = SideEffects.toBoolean(e_.value.data); if (side_effects.ok) { return p.e(E.Boolean{ .value = !side_effects.value }, expr.loc); @@ -12933,6 +12935,31 @@ fn NewParser_( }, else => {}, } + + // "-(a, b)" => "a, -b" + if (switch (e_.op) { + .un_delete, .un_typeof => false, + else => true, + }) { + switch (e_.value.data) { + .e_binary => |comma| { + if (comma.op == .bin_comma) { + return Expr.joinWithComma( + comma.left, + p.e( + E.Unary{ + .op = e_.op, + .value = comma.right, + }, + comma.right.loc, + ), + p.allocator, + ); + } + }, + else => {}, + } + } }, } }, |