Skip to content

Commit 8b3c1a7

Browse files
committed
feat(minifier): dce all conditional expressions
1 parent cb1af04 commit 8b3c1a7

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

crates/oxc_minifier/src/ast_passes/remove_dead_code.rs

+8-9
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,16 @@ impl<'a> RemoveDeadCode<'a> {
4444
}
4545
}
4646

47-
pub fn remove_conditional(&mut self, stmt: &mut Statement<'a>) {
48-
let Statement::ExpressionStatement(expression_stmt) = stmt else { return };
49-
let Expression::ConditionalExpression(conditional_expr) = &mut expression_stmt.expression
50-
else {
47+
pub fn remove_conditional(&mut self, expr: &mut Expression<'a>) {
48+
let Expression::ConditionalExpression(conditional_expr) = expr else {
5149
return;
5250
};
5351
match self.test_expression(&mut conditional_expr.test) {
5452
Some(true) => {
55-
expression_stmt.expression =
56-
self.ast.move_expression(&mut conditional_expr.consequent);
53+
*expr = self.ast.move_expression(&mut conditional_expr.consequent);
5754
}
5855
Some(false) => {
59-
expression_stmt.expression =
60-
self.ast.move_expression(&mut conditional_expr.alternate);
56+
*expr = self.ast.move_expression(&mut conditional_expr.alternate);
6157
}
6258
_ => {}
6359
}
@@ -67,7 +63,10 @@ impl<'a> RemoveDeadCode<'a> {
6763
impl<'a> VisitMut<'a> for RemoveDeadCode<'a> {
6864
fn visit_statement(&mut self, stmt: &mut Statement<'a>) {
6965
self.remove_if(stmt);
70-
self.remove_conditional(stmt);
7166
walk_mut::walk_statement(self, stmt);
7267
}
68+
69+
fn visit_expression(&mut self, expr: &mut Expression<'a>) {
70+
self.remove_conditional(expr);
71+
}
7372
}

crates/oxc_minifier/tests/oxc/remove_dead_code.rs

+3
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ fn remove_dead_code() {
4242
test("!!false ? foo : bar;", "bar");
4343
test("!!true ? foo : bar;", "foo");
4444

45+
test("const foo = true ? A : B", "const foo=A");
46+
test("const foo = false ? A : B", "const foo=B");
47+
4548
// Shadowed `undefined` as a variable should not be erased.
4649
test(
4750
"function foo(undefined) { if (!undefined) { } }",

0 commit comments

Comments
 (0)