diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8844/input.js b/crates/swc_ecma_minifier/tests/fixture/issues/8844/input.js new file mode 100644 index 000000000000..b74e9da5b49e --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8844/input.js @@ -0,0 +1,7 @@ +const k = (() => { + let x; + switch (x) { + case x?.x?.(): + default: + } +})(); diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8844/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/8844/output.js new file mode 100644 index 000000000000..a6899ca3223a --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8844/output.js @@ -0,0 +1,2 @@ +let x; +x?.x?.(); diff --git a/crates/swc_ecma_utils/src/lib.rs b/crates/swc_ecma_utils/src/lib.rs index 0db4830d7c0d..8d92575df9cb 100644 --- a/crates/swc_ecma_utils/src/lib.rs +++ b/crates/swc_ecma_utils/src/lib.rs @@ -2520,11 +2520,6 @@ impl ExprCtx { to.push(Box::new(Expr::New(e))) } Expr::Member(_) | Expr::SuperProp(_) => to.push(Box::new(expr)), - Expr::OptChain(OptChainExpr { ref base, .. }) - if matches!(&**base, OptChainBase::Member(_)) => - { - to.push(Box::new(expr)) - } // We are at here because we could not determine value of test. //TODO: Drop values if it does not have side effects. @@ -2664,9 +2659,7 @@ impl ExprCtx { | Expr::TsSatisfies(TsSatisfiesExpr { expr, .. }) => { self.extract_side_effects_to(to, *expr) } - Expr::OptChain(OptChainExpr { base: child, .. }) => { - self.extract_side_effects_to(to, (*child).into()) - } + Expr::OptChain(..) => to.push(Box::new(expr)), Expr::Invalid(..) => unreachable!(), }