Skip to content

Commit 8263da1

Browse files
authoredOct 7, 2024
fix(es/minifier): Compress consecutive return statements properly (#9620)
**Description:** Compress consecutive return statements properly. **Related issue:** - Closes #9619
1 parent 7b98bb5 commit 8263da1

File tree

5 files changed

+82
-0
lines changed

5 files changed

+82
-0
lines changed
 

‎.changeset/famous-keys-shake.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
swc_core: patch
3+
swc_ecma_minifier: patch
4+
---
5+
6+
fix: compress consecutive return statements properly

‎crates/swc_ecma_minifier/src/compress/optimize/if_return.rs

+10
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,16 @@ impl Optimizer<'_> {
219219
}
220220
},
221221

222+
(
223+
Some(Stmt::Block(BlockStmt { stmts: s1, .. })),
224+
Some(Stmt::Block(BlockStmt { stmts: s2, .. })),
225+
) if s1.iter().any(|s| matches!(s, Stmt::Return(..)))
226+
&& s2.iter().any(|s| matches!(s, Stmt::Return(..))) =>
227+
{
228+
log_abort!("if_return: [x] Aborting because early return is observed");
229+
return;
230+
}
231+
222232
_ => {}
223233
}
224234
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"arguments": false,
3+
"arrows": false,
4+
"booleans": false,
5+
"booleans_as_integers": false,
6+
"collapse_vars": false,
7+
"comparisons": false,
8+
"computed_props": false,
9+
"conditionals": false,
10+
"dead_code": true,
11+
"directives": false,
12+
"drop_console": false,
13+
"drop_debugger": false,
14+
"evaluate": false,
15+
"expression": false,
16+
"hoist_funs": false,
17+
"hoist_props": false,
18+
"hoist_vars": false,
19+
"if_return": true,
20+
"join_vars": false,
21+
"keep_classnames": false,
22+
"keep_fargs": false,
23+
"keep_fnames": false,
24+
"keep_infinity": false,
25+
"loops": false,
26+
"negate_iife": false,
27+
"properties": false,
28+
"reduce_funcs": false,
29+
"reduce_vars": false,
30+
"side_effects": false,
31+
"switches": true,
32+
"typeofs": false,
33+
"unsafe": false,
34+
"unsafe_arrows": false,
35+
"unsafe_comps": false,
36+
"unsafe_Function": false,
37+
"unsafe_math": false,
38+
"unsafe_symbols": false,
39+
"unsafe_methods": false,
40+
"unsafe_proto": false,
41+
"unsafe_regexp": false,
42+
"unsafe_undefined": false,
43+
"unused": true,
44+
"const_to_let": false,
45+
"pristine_globals": false,
46+
"passes": 1
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
var a = (() => {
2+
switch ("production") {
3+
case "production":
4+
return "expected";
5+
default:
6+
return "unexpected1";
7+
}
8+
9+
switch ("production") {
10+
case "production":
11+
return "unexpected2";
12+
default:
13+
return "unexpected3";
14+
}
15+
})();
16+
17+
console.log(a);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
var a = (()=>"expected")();
2+
console.log(a);

0 commit comments

Comments
 (0)