aboutsummaryrefslogtreecommitdiff
path: root/src/js_parser/js_parser.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-09 20:23:36 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-09 20:23:36 -0700
commit4de7978b2763d95ddcded6ccda9b7b80cca7e8f1 (patch)
treeb7a668a07db07a1e832ca805dc608ee5b34093cf /src/js_parser/js_parser.zig
parent696bb3b02609f6121863d475ba008f192808dadd (diff)
downloadbun-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.zig27
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 => {},
+ }
+ }
},
}
},