Skip to content

Commit d65fba1

Browse files
authored
fix(es/minifier): Fix infection analysis of sequential inliner (#6053)
**Description:** This PR fixes the callee issue by fixing the infection analyzer. **Related issue:** - Closes #6047
1 parent 62dd127 commit d65fba1

File tree

40 files changed

+571
-428
lines changed

40 files changed

+571
-428
lines changed

crates/swc/tests/tsc-references/importsNotUsedAsValues_error.2.minified.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ console.log(A, void 0);
2727
export { };
2828
//// [/f.ts]
2929
import { C } from "./a";
30-
C.One, console.log(C.Two, C.Two);
30+
C.One;
31+
var c = C.Two, d = C.Two;
32+
console.log(c, d);
3133
//// [/g.ts]
3234
console.log(void 0, void 0);
3335
export { };

crates/swc_ecma_minifier/src/alias/mod.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ mod ctx;
1616
pub(crate) struct AliasConfig {
1717
pub marks: Option<Marks>,
1818
pub ignore_nested: bool,
19+
/// TODO(kdy1): This field is used for sequential inliner.
20+
/// It should be renamed to some correct name.
21+
pub need_all: bool,
1922
}
2023

2124
pub(crate) trait InfectableNode {
@@ -200,15 +203,15 @@ impl Visit for InfectionCollector<'_> {
200203
fn visit_member_expr(&mut self, n: &MemberExpr) {
201204
{
202205
let ctx = Ctx {
203-
track_expr_ident: false,
206+
track_expr_ident: self.config.need_all,
204207
..self.ctx
205208
};
206209
n.obj.visit_with(&mut *self.with_ctx(ctx));
207210
}
208211

209212
{
210213
let ctx = Ctx {
211-
track_expr_ident: false,
214+
track_expr_ident: self.config.need_all,
212215
..self.ctx
213216
};
214217
n.prop.visit_with(&mut *self.with_ctx(ctx));

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

+1
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,7 @@ where
534534
AliasConfig {
535535
marks: Some(self.marks),
536536
ignore_nested: false,
537+
need_all: true,
537538
},
538539
) {
539540
if let Some(usage) = self.data.vars.get_mut(&i) {

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

+2
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,7 @@ where
995995
AliasConfig {
996996
marks: Some(self.marks),
997997
ignore_nested: true,
998+
need_all: true,
998999
},
9991000
)
10001001
}),
@@ -1011,6 +1012,7 @@ where
10111012
AliasConfig {
10121013
marks: Some(self.marks),
10131014
ignore_nested: true,
1015+
need_all: true,
10141016
},
10151017
))
10161018
} else {

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

+7-7
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@
184184
for(; tz[m - 1] > x1;)tz.pop(), --m;
185185
var bin, bins = Array(m + 1);
186186
for(i = 0; i <= m; ++i)(bin = bins[i] = []).x0 = i > 0 ? tz[i - 1] : x0, bin.x1 = i < m ? tz[i] : x1;
187-
for(i = 0; i < n; ++i)x0 <= (x = values[i]) && x <= x1 && bins[bisectRight(tz, x, 0, m)].push(data[i]);
187+
for(i = 0; i < n; ++i)x = values[i], x0 <= x && x <= x1 && bins[bisectRight(tz, x, 0, m)].push(data[i]);
188188
return bins;
189189
}
190190
return histogram.value = function(_) {
@@ -4577,11 +4577,11 @@
45774577
phi * radians$1
45784578
]);
45794579
if (p0) {
4580-
var normal = cartesianCross(p0, p), inflection = cartesianCross([
4580+
var normal = cartesianCross(p0, p), equatorial = [
45814581
normal[1],
45824582
-normal[0],
45834583
0
4584-
], normal);
4584+
], inflection = cartesianCross(equatorial, normal);
45854585
cartesianNormalizeInPlace(inflection);
45864586
var phii, delta = lambda - lambda2, sign = delta > 0 ? 1 : -1, lambdai = (inflection = spherical(inflection))[0] * degrees$2 * sign, antimeridian = abs$2(delta) > 180;
45874587
antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda) ? (phii = inflection[1] * degrees$2) > phi1 && (phi1 = phii) : antimeridian ^ (sign * lambda2 < (lambdai = (lambdai + 360) % 360 - 180) && lambdai < sign * lambda) ? (phii = -inflection[1] * degrees$2) < phi0 && (phi0 = phii) : (phi < phi0 && (phi0 = phi), phi > phi1 && (phi1 = phi)), antimeridian ? lambda < lambda2 ? angle(lambda0$1, lambda) > angle(lambda0$1, lambda1) && (lambda1 = lambda) : angle(lambda, lambda1) > angle(lambda0$1, lambda1) && (lambda0$1 = lambda) : lambda1 >= lambda0$1 ? (lambda < lambda0$1 && (lambda0$1 = lambda), lambda > lambda1 && (lambda1 = lambda)) : lambda > lambda2 ? angle(lambda0$1, lambda) > angle(lambda0$1, lambda1) && (lambda1 = lambda) : angle(lambda, lambda1) > angle(lambda0$1, lambda1) && (lambda0$1 = lambda);
@@ -6685,7 +6685,7 @@
66856685
var transform, untransform, unknown, piecewise, output, input, domain = unit, range = unit, interpolate$1 = interpolate, clamp = identity$6;
66866686
function rescale() {
66876687
var a, b, t, n = Math.min(domain.length, range.length);
6688-
return clamp !== identity$6 && ((a = domain[0]) > (b = domain[n - 1]) && (t = a, a = b, b = t), clamp = function(x) {
6688+
return clamp !== identity$6 && (a = domain[0], b = domain[n - 1], a > b && (t = a, a = b, b = t), clamp = function(x) {
66896689
return Math.max(a, Math.min(b, x));
66906690
}), piecewise = n > 2 ? polymap : bimap, output = input = null, scale;
66916691
}
@@ -9582,7 +9582,7 @@
95829582
},
95839583
find: function(x, y, radius) {
95849584
var dx, dy, d2, node, closest, i = 0, n = nodes.length;
9585-
for(null == radius ? radius = 1 / 0 : radius *= radius, i = 0; i < n; ++i)(d2 = (dx = x - (node = nodes[i]).x) * dx + (dy = y - node.y) * dy) < radius && (closest = node, radius = d2);
9585+
for(null == radius ? radius = 1 / 0 : radius *= radius, i = 0; i < n; ++i)node = nodes[i], (d2 = (dx = x - node.x) * dx + (dy = y - node.y) * dy) < radius && (closest = node, radius = d2);
95869586
return closest;
95879587
},
95889588
on: function(name, _) {
@@ -9757,7 +9757,7 @@
97579757
if (phi1 = lambda1 = -(lambda0$1 = phi0 = 1 / 0), ranges = [], geoStream(feature, boundsStream), n = ranges.length) {
97589758
for(ranges.sort(rangeCompare), i = 1, merged = [
97599759
a = ranges[0]
9760-
]; i < n; ++i)rangeContains(a, (b = ranges[i])[0]) || rangeContains(a, b[1]) ? (angle(a[0], b[1]) > angle(a[0], a[1]) && (a[1] = b[1]), angle(b[0], a[1]) > angle(a[0], a[1]) && (a[0] = b[0])) : merged.push(a = b);
9760+
]; i < n; ++i)b = ranges[i], rangeContains(a, b[0]) || rangeContains(a, b[1]) ? (angle(a[0], b[1]) > angle(a[0], a[1]) && (a[1] = b[1]), angle(b[0], a[1]) > angle(a[0], a[1]) && (a[0] = b[0])) : merged.push(a = b);
97619761
for(deltaMax = -1 / 0, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i)b = merged[i], (delta = angle(a[1], b[0])) > deltaMax && (deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]);
97629762
}
97639763
return ranges = range$1 = null, lambda0$1 === 1 / 0 || phi0 === 1 / 0 ? [
@@ -10165,7 +10165,7 @@
1016510165
return sortValues(arcs[i], arcs[j]);
1016610166
}) : null != sort && index.sort(function(i, j) {
1016710167
return sort(data[i], data[j]);
10168-
}), i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1)a1 = a0 + ((v = arcs[j = index[i]]) > 0 ? v * k : 0) + pa, arcs[j] = {
10168+
}), i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1)v = arcs[j = index[i]], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
1016910169
data: data[j],
1017010170
index: i,
1017110171
value: v,

0 commit comments

Comments
 (0)