Skip to content

Commit c276a38

Browse files
authored
feat(es/minifier): Merge expression with empty return (#10283)
1 parent 4046d41 commit c276a38

File tree

42 files changed

+742
-1705
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+742
-1705
lines changed

.changeset/little-paws-shake.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
swc_core: minor
3+
swc_ecma_minifier: minor
4+
---
5+
6+
feat(es/minifier): Merge expression with empty return
+11-11
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
| File | Original Size | Compressed Size | Gzipped Size |
22
| --- | --- | --- | --- |
3-
| antd.js | 6.38 MiB | 2.05 MiB | 444.47 KiB |
4-
| d3.js | 542.74 KiB | 259.00 KiB | 85.06 KiB |
5-
| echarts.js | 3.41 MiB | 971.11 KiB | 313.35 KiB |
6-
| jquery.js | 280.89 KiB | 87.11 KiB | 30.15 KiB |
7-
| lodash.js | 531.35 KiB | 68.18 KiB | 24.52 KiB |
8-
| moment.js | 169.83 KiB | 57.04 KiB | 18.22 KiB |
3+
| antd.js | 6.38 MiB | 2.05 MiB | 444.50 KiB |
4+
| d3.js | 542.74 KiB | 259 KiB | 85.05 KiB |
5+
| echarts.js | 3.41 MiB | 971.25 KiB | 313.36 KiB |
6+
| jquery.js | 280.89 KiB | 87.08 KiB | 30.14 KiB |
7+
| lodash.js | 531.35 KiB | 68.18 KiB | 24.51 KiB |
8+
| moment.js | 169.83 KiB | 57.05 KiB | 18.22 KiB |
99
| react.js | 70.45 KiB | 22.28 KiB | 8.00 KiB |
10-
| terser.js | 1.08 MiB | 444.91 KiB | 120.44 KiB |
11-
| three.js | 1.19 MiB | 627.90 KiB | 154.58 KiB |
12-
| typescript.js | 10.45 MiB | 3.17 MiB | 846.04 KiB |
13-
| victory.js | 2.30 MiB | 689.65 KiB | 153.64 KiB |
14-
| vue.js | 334.13 KiB | 112.96 KiB | 41.69 KiB |
10+
| terser.js | 1.08 MiB | 444.95 KiB | 120.45 KiB |
11+
| three.js | 1.19 MiB | 627.99 KiB | 154.58 KiB |
12+
| typescript.js | 10.45 MiB | 3.17 MiB | 846.06 KiB |
13+
| victory.js | 2.30 MiB | 689.66 KiB | 153.64 KiB |
14+
| vue.js | 334.13 KiB | 112.98 KiB | 41.69 KiB |

crates/swc/tests/vercel/full/react-instantsearch/2/output/index.js

+39-47
Original file line numberDiff line numberDiff line change
@@ -83,62 +83,54 @@ export default function S(u) {
8383
};
8484
}
8585
if (Array.isArray(s.results)) {
86-
!function(a, n) {
87-
if (a.transporter) {
88-
a.transporter.responsesCache.set({
89-
method: "search",
90-
args: [
91-
n.reduce(function(e, t) {
92-
return e.concat(t.rawResults.map(function(e) {
93-
return {
94-
indexName: e.index,
95-
params: e.params
96-
};
97-
}));
98-
}, [])
99-
]
100-
}, {
101-
results: n.reduce(function(e, t) {
102-
return e.concat(t.rawResults);
103-
}, [])
104-
});
105-
return;
106-
}
107-
var s = "/1/indexes/*/queries_body_".concat(JSON.stringify({
108-
requests: n.reduce(function(e, t) {
86+
var c = a, u = s.results;
87+
if (c.transporter) return c.transporter.responsesCache.set({
88+
method: "search",
89+
args: [
90+
u.reduce(function(e, t) {
10991
return e.concat(t.rawResults.map(function(e) {
11092
return {
11193
indexName: e.index,
11294
params: e.params
11395
};
11496
}));
11597
}, [])
116-
}));
117-
a.cache = r(t({}, a.cache), e({}, s, JSON.stringify({
118-
results: n.reduce(function(e, t) {
119-
return e.concat(t.rawResults);
120-
}, [])
121-
})));
122-
}(a, s.results);
123-
return;
98+
]
99+
}, {
100+
results: u.reduce(function(e, t) {
101+
return e.concat(t.rawResults);
102+
}, [])
103+
});
104+
var o = "/1/indexes/*/queries_body_".concat(JSON.stringify({
105+
requests: u.reduce(function(e, t) {
106+
return e.concat(t.rawResults.map(function(e) {
107+
return {
108+
indexName: e.index,
109+
params: e.params
110+
};
111+
}));
112+
}, [])
113+
}));
114+
return c.cache = r(t({}, c.cache), e({}, o, JSON.stringify({
115+
results: u.reduce(function(e, t) {
116+
return e.concat(t.rawResults);
117+
}, [])
118+
})));
124119
}
125120
!function(a, n) {
126-
if (a.transporter) {
127-
a.transporter.responsesCache.set({
128-
method: "search",
129-
args: [
130-
n.rawResults.map(function(e) {
131-
return {
132-
indexName: e.index,
133-
params: e.params
134-
};
135-
})
136-
]
137-
}, {
138-
results: n.rawResults
139-
});
140-
return;
141-
}
121+
if (a.transporter) return a.transporter.responsesCache.set({
122+
method: "search",
123+
args: [
124+
n.rawResults.map(function(e) {
125+
return {
126+
indexName: e.index,
127+
params: e.params
128+
};
129+
})
130+
]
131+
}, {
132+
results: n.rawResults
133+
});
142134
var s = "/1/indexes/*/queries_body_".concat(JSON.stringify({
143135
requests: n.rawResults.map(function(e) {
144136
return {

crates/swc_ecma_minifier/src/compress/optimize/sequences.rs

+2-10
Original file line numberDiff line numberDiff line change
@@ -190,16 +190,8 @@ impl Optimizer<'_> {
190190
}
191191

192192
Stmt::Return(mut stmt @ ReturnStmt { arg: Some(..), .. }) => {
193-
match stmt.arg.as_deref_mut() {
194-
Some(e) => {
195-
e.prepend_exprs(take(&mut exprs));
196-
}
197-
_ => {
198-
let mut e = Expr::undefined(stmt.span);
199-
e.prepend_exprs(take(&mut exprs));
200-
201-
stmt.arg = Some(e);
202-
}
193+
if let Some(e) = stmt.arg.as_deref_mut() {
194+
e.prepend_exprs(take(&mut exprs));
203195
}
204196

205197
new_stmts.push(T::from(stmt.into()));

crates/swc_ecma_minifier/src/compress/pure/mod.rs

+24
Original file line numberDiff line numberDiff line change
@@ -1116,6 +1116,30 @@ impl VisitMut for Pure<'_> {
11161116
}
11171117
}
11181118

1119+
if let Stmt::Block(block) = s {
1120+
let span = block.span;
1121+
if let [Stmt::Expr(e), Stmt::Return(ReturnStmt { arg: None, .. })] =
1122+
&mut block.stmts[..]
1123+
{
1124+
// binary expression would need an extra paren
1125+
if !(e.expr.is_bin() || e.expr.is_assign() || e.expr.is_seq()) {
1126+
self.changed = true;
1127+
report_change!("sequences: Merge expression with return");
1128+
1129+
let e = e.expr.take();
1130+
1131+
*s = Stmt::Return(ReturnStmt {
1132+
span,
1133+
arg: Some(Box::new(Expr::Unary(UnaryExpr {
1134+
span: DUMMY_SP,
1135+
op: op!("void"),
1136+
arg: e,
1137+
}))),
1138+
})
1139+
}
1140+
}
1141+
}
1142+
11191143
debug_assert_valid(s);
11201144
}
11211145

crates/swc_ecma_minifier/tests/benches-full/d3.js

+1-4
Original file line numberDiff line numberDiff line change
@@ -3260,10 +3260,7 @@ function(global, factory) {
32603260
return contains;
32613261
}(ring, hole[i])) return c;
32623262
return 0;
3263-
}((polygon = polygons[i])[0], hole)) {
3264-
polygon.push(hole);
3265-
return;
3266-
}
3263+
}((polygon = polygons[i])[0], hole)) return void polygon.push(hole);
32673264
}), {
32683265
type: "MultiPolygon",
32693266
value: value,

0 commit comments

Comments
 (0)