Skip to content

Commit 358f2fc

Browse files
authored
fix(minifier): remove continue in for-in / for-of (#14151)
fix: #14063
1 parent e9a14d1 commit 358f2fc

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

crates/oxc_minifier/src/peephole/minimize_statements.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -643,8 +643,9 @@ impl<'a> PeepholeOptimizations {
643643
let mut optimize_implicit_jump = false;
644644
// "while (x) { if (y) continue; z(); }" => "while (x) { if (!y) z(); }"
645645
// "while (x) { if (y) continue; else z(); w(); }" => "while (x) { if (!y) { z(); w(); } }" => "for (; x;) !y && (z(), w());"
646-
if ctx.ancestors().nth(1).is_some_and(Ancestor::is_for_statement)
647-
&& let Statement::ContinueStatement(continue_stmt) = &if_stmt.consequent
646+
if ctx.ancestors().nth(1).is_some_and(|v| {
647+
v.is_for_statement() || v.is_for_in_statement() || v.is_for_of_statement()
648+
}) && let Statement::ContinueStatement(continue_stmt) = &if_stmt.consequent
648649
&& continue_stmt.label.is_none()
649650
{
650651
optimize_implicit_jump = true;
@@ -1808,4 +1809,11 @@ mod test {
18081809
"function _() { for (var x = j, i = 0; i < 10; i++) { let j = k; console.log(i, j, j) } }",
18091810
);
18101811
}
1812+
1813+
#[test]
1814+
fn test_for_continue_in_for() {
1815+
test("for( a of b ){ if(c) { continue; } d() }", "for ( a of b ) c || d();");
1816+
test("for( a in b ){ if(c) { continue; } d() }", "for ( a in b ) c || d();");
1817+
test("for( ; ; ){ if(c) { continue; } d() }", "for ( ; ; ) c || d();");
1818+
}
18111819
}

tasks/minsize/minsize.snap

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,23 @@ Original | minified | minified | gzip | gzip | Iterations | Fi
55

66
173.90 kB | 59.44 kB | 59.82 kB | 19.16 kB | 19.33 kB | 2 | moment.js
77

8-
287.63 kB | 89.27 kB | 90.07 kB | 30.91 kB | 31.95 kB | 2 | jquery.js
8+
287.63 kB | 89.26 kB | 90.07 kB | 30.91 kB | 31.95 kB | 2 | jquery.js
99

1010
342.15 kB | 117 kB | 118.14 kB | 43.19 kB | 44.37 kB | 2 | vue.js
1111

1212
544.10 kB | 71.15 kB | 72.48 kB | 25.85 kB | 26.20 kB | 2 | lodash.js
1313

14-
555.77 kB | 267.47 kB | 270.13 kB | 88.05 kB | 90.80 kB | 2 | d3.js
14+
555.77 kB | 267.45 kB | 270.13 kB | 88.05 kB | 90.80 kB | 2 | d3.js
1515

1616
1.01 MB | 439.53 kB | 458.89 kB | 122.13 kB | 126.71 kB | 2 | bundle.min.js
1717

18-
1.25 MB | 642.80 kB | 646.76 kB | 159.41 kB | 163.73 kB | 2 | three.js
18+
1.25 MB | 642.77 kB | 646.76 kB | 159.40 kB | 163.73 kB | 2 | three.js
1919

20-
2.14 MB | 712.13 kB | 724.14 kB | 160.90 kB | 181.07 kB | 2 | victory.js
20+
2.14 MB | 712.11 kB | 724.14 kB | 160.89 kB | 181.07 kB | 2 | victory.js
2121

2222
3.20 MB | 1.00 MB | 1.01 MB | 323.05 kB | 331.56 kB | 3 | echarts.js
2323

2424
6.69 MB | 2.22 MB | 2.31 MB | 458.81 kB | 488.28 kB | 4 | antd.js
2525

26-
10.95 MB | 3.34 MB | 3.49 MB | 855.11 kB | 915.50 kB | 4 | typescript.js
26+
10.95 MB | 3.34 MB | 3.49 MB | 855.09 kB | 915.50 kB | 4 | typescript.js
2727

tasks/track_memory_allocations/allocs_minifier.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
File | File size || Sys allocs | Sys reallocs || Arena allocs | Arena reallocs | Arena bytes
22
-------------------------------------------------------------------------------------------------------------------------------------------
3-
checker.ts | 2.92 MB || 84076 | 14190 || 153733 | 29463
3+
checker.ts | 2.92 MB || 84078 | 14191 || 153771 | 29399
44

55
cal.com.tsx | 1.06 MB || 40528 | 3033 || 37173 | 4736
66

77
RadixUIAdoptionSection.jsx | 2.52 kB || 85 | 9 || 30 | 6
88

9-
pdf.mjs | 567.30 kB || 19825 | 2900 || 47404 | 7781
9+
pdf.mjs | 567.30 kB || 19825 | 2900 || 47465 | 7754
1010

1111
antd.js | 6.69 MB || 99749 | 13523 || 331957 | 69885
1212

0 commit comments

Comments
 (0)