mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +00:00
feat(minifier): dce all conditional expressions (#4135)
This commit is contained in:
parent
cb1af043b8
commit
c6c16a5fc9
2 changed files with 11 additions and 9 deletions
|
|
@ -44,20 +44,16 @@ impl<'a> RemoveDeadCode<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn remove_conditional(&mut self, stmt: &mut Statement<'a>) {
|
||||
let Statement::ExpressionStatement(expression_stmt) = stmt else { return };
|
||||
let Expression::ConditionalExpression(conditional_expr) = &mut expression_stmt.expression
|
||||
else {
|
||||
pub fn remove_conditional(&mut self, expr: &mut Expression<'a>) {
|
||||
let Expression::ConditionalExpression(conditional_expr) = expr else {
|
||||
return;
|
||||
};
|
||||
match self.test_expression(&mut conditional_expr.test) {
|
||||
Some(true) => {
|
||||
expression_stmt.expression =
|
||||
self.ast.move_expression(&mut conditional_expr.consequent);
|
||||
*expr = self.ast.move_expression(&mut conditional_expr.consequent);
|
||||
}
|
||||
Some(false) => {
|
||||
expression_stmt.expression =
|
||||
self.ast.move_expression(&mut conditional_expr.alternate);
|
||||
*expr = self.ast.move_expression(&mut conditional_expr.alternate);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
@ -67,7 +63,10 @@ impl<'a> RemoveDeadCode<'a> {
|
|||
impl<'a> VisitMut<'a> for RemoveDeadCode<'a> {
|
||||
fn visit_statement(&mut self, stmt: &mut Statement<'a>) {
|
||||
self.remove_if(stmt);
|
||||
self.remove_conditional(stmt);
|
||||
walk_mut::walk_statement(self, stmt);
|
||||
}
|
||||
|
||||
fn visit_expression(&mut self, expr: &mut Expression<'a>) {
|
||||
self.remove_conditional(expr);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,9 @@ fn remove_dead_code() {
|
|||
test("!!false ? foo : bar;", "bar");
|
||||
test("!!true ? foo : bar;", "foo");
|
||||
|
||||
test("const foo = true ? A : B", "const foo=A");
|
||||
test("const foo = false ? A : B", "const foo=B");
|
||||
|
||||
// Shadowed `undefined` as a variable should not be erased.
|
||||
test(
|
||||
"function foo(undefined) { if (!undefined) { } }",
|
||||
|
|
|
|||
Loading…
Reference in a new issue