Skip to content

Commit 382c7cb

Browse files
committed
fix(minifier): incorrect non-null object condition simplification with && and ||
1 parent 86fa667 commit 382c7cb

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

crates/oxc_minifier/src/peephole/substitute_alternate_syntax.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,9 @@ impl<'a> PeepholeOptimizations {
406406
let Expression::LogicalExpression(left) = &e.left else {
407407
return;
408408
};
409+
if left.operator != e.operator {
410+
return;
411+
}
409412
let Some(new_expr) = Self::try_compress_is_object_and_not_null_for_left_and_right(
410413
&left.right,
411414
&e.right,
@@ -2143,6 +2146,24 @@ mod test {
21432146
"var foo, bar; v = bar !== 1 && typeof foo === 'object' && foo !== null",
21442147
"var foo, bar; v = bar !== 1 && typeof foo == 'object' && !!foo",
21452148
);
2149+
test(
2150+
"var foo, bar; v = typeof foo === 'object' && foo !== null || bar !== 1",
2151+
"var foo, bar; v = typeof foo == 'object' && !!foo || bar !== 1",
2152+
);
2153+
test(
2154+
"var foo, bar; v = bar !== 1 || typeof foo === 'object' && foo !== null",
2155+
"var foo, bar; v = bar !== 1 || typeof foo == 'object' && !!foo",
2156+
);
2157+
test(
2158+
"var foo, bar; v = (typeof foo !== 'object' || foo === null) && bar !== 1",
2159+
"var foo, bar; v = (typeof foo != 'object' || !foo) && bar !== 1",
2160+
);
2161+
test(
2162+
"var foo, bar; v = bar !== 1 && (typeof foo !== 'object' || foo === null)",
2163+
"var foo, bar; v = bar !== 1 && (typeof foo != 'object' || !foo)",
2164+
);
2165+
test_same("var foo, bar; v = bar !== 1 && typeof foo != 'object' || foo === null");
2166+
test_same("var foo, bar; v = typeof foo != 'object' || foo === null && bar !== 1");
21462167
test_same("var foo; v = typeof foo.a == 'object' && foo.a !== null"); // cannot be folded because accessing foo.a might have a side effect
21472168
test_same("v = foo !== null && typeof foo == 'object'"); // cannot be folded because accessing foo might have a side effect
21482169
test_same("v = typeof foo == 'object' && foo !== null"); // cannot be folded because accessing foo might have a side effect

0 commit comments

Comments
 (0)