From ab63cb7d7ca304b05c27b561d8f280e044944cff Mon Sep 17 00:00:00 2001 From: YunfeiHe Date: Tue, 3 Jan 2023 00:14:21 +0800 Subject: [PATCH 1/4] fix(es/transforms_optimization): should capture hoisted variables correctly --- .../src/simplify/branch/tests.rs | 30 +++++++++++++++++++ crates/swc_ecma_utils/src/lib.rs | 4 +-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/branch/tests.rs b/crates/swc_ecma_transforms_optimization/src/simplify/branch/tests.rs index ef2905a3697b..f6cf3aeef90f 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/branch/tests.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/branch/tests.rs @@ -1815,3 +1815,33 @@ fn issue_1825() { fn issue_1851_1() { test("x ?? (x = 'abc');", "x ?? (x = 'abc');"); } + +#[test] +fn issue_6732_1() { + test( + " + if (false) { + foo(function () { + var module = {}; + return module; + }); + } + ", + "", + ); +} + +#[test] +fn issue_6732_2() { + test( + " + if (false) { + function foo() { + var module = {}; + return module; + }; + } + ", + "var foo;", + ); +} diff --git a/crates/swc_ecma_utils/src/lib.rs b/crates/swc_ecma_utils/src/lib.rs index c11d36ebb596..e98cf48895ad 100644 --- a/crates/swc_ecma_utils/src/lib.rs +++ b/crates/swc_ecma_utils/src/lib.rs @@ -494,8 +494,6 @@ impl Visit for Hoister { fn visit_fn_decl(&mut self, f: &FnDecl) { self.vars.push(f.ident.clone()); - - f.visit_children_with(self) } fn visit_pat(&mut self, p: &Pat) { @@ -513,6 +511,8 @@ impl Visit for Hoister { v.visit_children_with(self) } + + fn visit_fn_expr(&mut self, _n: &FnExpr) {} } #[derive(Debug, Clone)] From 6b15af87a00a1cb28c4f107044bd249789b4c19b Mon Sep 17 00:00:00 2001 From: YunfeiHe Date: Tue, 3 Jan 2023 00:59:36 +0800 Subject: [PATCH 2/4] Update tests --- .../terser/compress/dead_code/dead_code_2_should_warn/output.js | 2 +- .../compress/dead_code/dead_code_2_should_warn_strict/output.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/swc_ecma_minifier/tests/terser/compress/dead_code/dead_code_2_should_warn/output.js b/crates/swc_ecma_minifier/tests/terser/compress/dead_code/dead_code_2_should_warn/output.js index e17475289f4f..6250b8b91e28 100644 --- a/crates/swc_ecma_minifier/tests/terser/compress/dead_code/dead_code_2_should_warn/output.js +++ b/crates/swc_ecma_minifier/tests/terser/compress/dead_code/dead_code_2_should_warn/output.js @@ -1,5 +1,5 @@ function f() { - var x, g, q, y; + var x, g; g(); x = 10; throw Error("foo"); diff --git a/crates/swc_ecma_minifier/tests/terser/compress/dead_code/dead_code_2_should_warn_strict/output.js b/crates/swc_ecma_minifier/tests/terser/compress/dead_code/dead_code_2_should_warn_strict/output.js index 275bbb11bc67..dc2a7837aef9 100644 --- a/crates/swc_ecma_minifier/tests/terser/compress/dead_code/dead_code_2_should_warn_strict/output.js +++ b/crates/swc_ecma_minifier/tests/terser/compress/dead_code/dead_code_2_should_warn_strict/output.js @@ -1,6 +1,6 @@ "use strict"; function f() { - var x, g, q, y; + var x, g; g(); x = 10; throw Error("foo"); From 6712b20e26618844182114bae6e359d851c5a9df Mon Sep 17 00:00:00 2001 From: YunfeiHe Date: Tue, 3 Jan 2023 01:08:00 +0800 Subject: [PATCH 3/4] Rerun CI --- crates/swc_ecma_utils/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/swc_ecma_utils/src/lib.rs b/crates/swc_ecma_utils/src/lib.rs index e98cf48895ad..a8d13cd81d62 100644 --- a/crates/swc_ecma_utils/src/lib.rs +++ b/crates/swc_ecma_utils/src/lib.rs @@ -482,6 +482,8 @@ pub struct Hoister { impl Visit for Hoister { noop_visit_type!(); + fn visit_fn_expr(&mut self, _n: &FnExpr) {} + fn visit_assign_expr(&mut self, node: &AssignExpr) { node.right.visit_children_with(self); } @@ -511,8 +513,6 @@ impl Visit for Hoister { v.visit_children_with(self) } - - fn visit_fn_expr(&mut self, _n: &FnExpr) {} } #[derive(Debug, Clone)] From e489aee4c3ff375be1e9738fbed0f0f6274ba1d1 Mon Sep 17 00:00:00 2001 From: YunfeiHe Date: Tue, 3 Jan 2023 01:29:43 +0800 Subject: [PATCH 4/4] Rerun CI --- crates/swc_ecma_utils/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/swc_ecma_utils/src/lib.rs b/crates/swc_ecma_utils/src/lib.rs index a8d13cd81d62..e98cf48895ad 100644 --- a/crates/swc_ecma_utils/src/lib.rs +++ b/crates/swc_ecma_utils/src/lib.rs @@ -482,8 +482,6 @@ pub struct Hoister { impl Visit for Hoister { noop_visit_type!(); - fn visit_fn_expr(&mut self, _n: &FnExpr) {} - fn visit_assign_expr(&mut self, node: &AssignExpr) { node.right.visit_children_with(self); } @@ -513,6 +511,8 @@ impl Visit for Hoister { v.visit_children_with(self) } + + fn visit_fn_expr(&mut self, _n: &FnExpr) {} } #[derive(Debug, Clone)]