From 59b3864591f0e2e167ac8619f700bc5fc7235dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Mon, 19 Dec 2022 14:55:44 +0900 Subject: [PATCH 1/4] Add a test --- crates/swc_ecma_minifier/tests/exec.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/crates/swc_ecma_minifier/tests/exec.rs b/crates/swc_ecma_minifier/tests/exec.rs index a00ad7941c36..c609814dd320 100644 --- a/crates/swc_ecma_minifier/tests/exec.rs +++ b/crates/swc_ecma_minifier/tests/exec.rs @@ -10394,3 +10394,16 @@ fn issue_6528() { "###, ) } + +#[test] +fn issue_6641() { + run_default_exec_test( + r###" + const iota = (i => () => 1 << ++i)(-1); + + const a = iota(), b = iota(); + + console.log(a, b); + "###, + ) +} From 2e5950365458dce0b412d6fb505f5bf69ef58398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Mon, 19 Dec 2022 15:00:53 +0900 Subject: [PATCH 2/4] fix --- crates/swc_ecma_minifier/src/compress/optimize/inline.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/swc_ecma_minifier/src/compress/optimize/inline.rs b/crates/swc_ecma_minifier/src/compress/optimize/inline.rs index 51e37a4c977f..f463702119ee 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/inline.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/inline.rs @@ -733,6 +733,11 @@ where }) .cloned() { + if !matches!(&*value, Expr::Ident(..) | Expr::Member(..)) && self.ctx.is_update_arg + { + return; + } + self.changed = true; report_change!("inline: Replacing a variable `{}` with cheap expression", i); From 6ce420206274556751cd1e04c86db2655b611a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Mon, 19 Dec 2022 15:05:21 +0900 Subject: [PATCH 3/4] ctx --- crates/swc_ecma_minifier/src/compress/optimize/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/swc_ecma_minifier/src/compress/optimize/mod.rs b/crates/swc_ecma_minifier/src/compress/optimize/mod.rs index b508e20edc3f..779b9df73dd3 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/mod.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/mod.rs @@ -2184,6 +2184,7 @@ where let ctx = Ctx { in_obj_of_non_computed_member: !n.prop.is_computed(), is_exact_lhs_of_assign: false, + is_update_arg: false, ..self.ctx }; n.obj.visit_mut_with(&mut *self.with_ctx(ctx)); @@ -2192,6 +2193,7 @@ where let ctx = Ctx { is_exact_lhs_of_assign: false, is_lhs_of_assign: false, + is_update_arg: false, ..self.ctx }; c.visit_mut_with(&mut *self.with_ctx(ctx)); From 4368f3e2847341f7a18c68a38a30633eee99eb77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Mon, 19 Dec 2022 15:07:41 +0900 Subject: [PATCH 4/4] ctx --- crates/swc_ecma_minifier/src/compress/optimize/mod.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/swc_ecma_minifier/src/compress/optimize/mod.rs b/crates/swc_ecma_minifier/src/compress/optimize/mod.rs index 779b9df73dd3..a3e2200f4601 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/mod.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/mod.rs @@ -1536,6 +1536,7 @@ where }, is_lhs_of_assign: false, is_exact_lhs_of_assign: false, + is_update_arg: false, ..self.ctx }; e.callee.visit_mut_with(&mut *self.with_ctx(ctx)); @@ -1566,6 +1567,7 @@ where is_this_aware_callee: false, is_lhs_of_assign: false, is_exact_lhs_of_assign: false, + is_update_arg: false, ..self.ctx }; // TODO: Prevent inline if callee is unknown. @@ -1583,6 +1585,7 @@ where { let ctx = Ctx { dont_invoke_iife: true, + is_update_arg: false, ..self.ctx }; n.super_class.visit_mut_with(&mut *self.with_ctx(ctx)); @@ -1591,6 +1594,7 @@ where { let ctx = Ctx { in_strict: true, + is_update_arg: false, ..self.ctx }; n.body.visit_mut_with(&mut *self.with_ctx(ctx));