Repository navigation
Commit a37d439
authored
refactor(es/minifier): simplify constant-false loop guards (#12293)
**Description:**
The constant-false `do...while` guard has an `allow_break_continue`
parameter whose value is `false` at every reachable call. Remove the
unused parameter and simplify the recursive checks while preserving the
guard's existing acceptance and rejection behavior.
Add regression coverage for control-flow targets, hoisted bindings,
condition side effects and exceptions, directives, parent rewrites, and
compression option boundaries. These fixtures protect the existing
conservative behavior when later transformations revisit the loop or its
ancestors.
The new opt-in Script checks execute the original source and each of two
successive minifications against independent expectations, using the
same compression and mangling options. They check stdout or typed
completion values, with dedicated cases validating distinctions such as
`undefined` versus a string and positive versus negative zero.
**Validation:**
Local validation on macOS aarch64 with Node v26.3.0:
- `cargo fmt --all`
- `cargo test -p swc_ecma_minifier`: 7,977 passed, 48 ignored.
- `cargo test -p swc_ecma_minifier --test compress`: independently
rerun; 3,074 passed, 27 ignored.
- `cargo test -p swc_ecma_minifier --features concurrent,debug --test
compress do_while_false`: 58 passed.
- `(cd crates/swc_ecma_minifier && ./scripts/exec.sh)`: 487 exec tests
and 2,128 terser_exec tests passed.
- `cargo clippy -p swc_ecma_minifier --all-targets -- -D warnings`
The code and tests are identical to those used for these checks. The
local `cargo clippy --all --all-targets -- -D warnings` run failed on
macOS because of the unchanged `noexec_mount_in` dead-code warning in
`crates/swc_native_addon/src/platform/unix.rs:117`. Its production
caller is Linux-only. GitHub Actions has independently passed the [CI
run](https://github.com/swc-project/swc/actions/runs/34212998202) for
the current PR head, including the minifier crate tests on the PR merge
commit and the configured Linux, macOS, Windows, and Wasm checks.
The [CodSpeed report for the current PR
head](#12293 (comment))
reports no significant performance changes across 200 compared
benchmarks in CPU Simulation. It uses fallback main commit `d602f58`;
the 61 skipped entries are historical benchmark identifiers already
unregistered at that baseline. The current SWC and minifier benchmark
targets completed their measurements and uploaded their data.
**Related issue (if exists):**
Follow-up to #12160.1 parent 4b4c135 commit a37d439
134 files changed
Lines changed: 1861 additions & 42 deletions
File tree
- .changeset
- crates/swc_ecma_minifier
- src/compress/pure
- tests
- fixture/issues
- do-while-false-hoisted-bindings
- do-while-false-terminal-jump
- completion
- assignment-break
- call-continue
- conditional-parent
- debugger-continue
- empty-break
- empty-continue
- guard-after-expression
- guard-before-expression
- typed-bigint
- typed-boolean
- typed-nan
- typed-negative-zero
- typed-null
- typed-positive-zero
- typed-string-number
- typed-string-undefined
- undefined-break
- unused-prefix-break
- unused-prefix-continue
- condition-exceptions
- defaults-mangle
- directive-barrier
- downstream-repro
- guarded-jump
- guarded-rejected
- labels-preserved
- labels
- loops-disabled
- module-suspension
- parent-rewrites
- rejected
- repeated-directive
- scope-directives
- side-effects
- simple
- skipped-scopes
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
265 | 265 | | |
266 | 266 | | |
267 | 267 | | |
268 | | - | |
269 | | - | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
270 | 272 | | |
271 | 273 | | |
272 | 274 | | |
| |||
308 | 310 | | |
309 | 311 | | |
310 | 312 | | |
311 | | - | |
| 313 | + | |
312 | 314 | | |
313 | | - | |
314 | | - | |
315 | | - | |
316 | | - | |
| 315 | + | |
317 | 316 | | |
318 | 317 | | |
319 | | - | |
| 318 | + | |
320 | 319 | | |
321 | 320 | | |
322 | | - | |
| 321 | + | |
323 | 322 | | |
324 | 323 | | |
325 | 324 | | |
326 | 325 | | |
327 | 326 | | |
328 | | - | |
329 | | - | |
330 | | - | |
331 | | - | |
332 | | - | |
333 | | - | |
334 | | - | |
335 | | - | |
| 327 | + | |
336 | 328 | | |
337 | | - | |
| 329 | + | |
338 | 330 | | |
339 | 331 | | |
340 | 332 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
144 | 144 | | |
145 | 145 | | |
146 | 146 | | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
147 | 161 | | |
148 | 162 | | |
149 | 163 | | |
150 | 164 | | |
151 | 165 | | |
152 | 166 | | |
153 | | - | |
154 | | - | |
155 | 167 | | |
156 | 168 | | |
157 | 169 | | |
| |||
250 | 262 | | |
251 | 263 | | |
252 | 264 | | |
253 | | - | |
254 | | - | |
255 | | - | |
256 | | - | |
257 | | - | |
| 265 | + | |
258 | 266 | | |
259 | 267 | | |
260 | 268 | | |
| |||
263 | 271 | | |
264 | 272 | | |
265 | 273 | | |
266 | | - | |
267 | | - | |
268 | | - | |
269 | | - | |
270 | | - | |
| 274 | + | |
271 | 275 | | |
272 | 276 | | |
273 | 277 | | |
| |||
306 | 310 | | |
307 | 311 | | |
308 | 312 | | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
309 | 326 | | |
310 | 327 | | |
311 | 328 | | |
| |||
317 | 334 | | |
318 | 335 | | |
319 | 336 | | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | | - | |
328 | | - | |
329 | | - | |
330 | | - | |
| 337 | + | |
331 | 338 | | |
332 | 339 | | |
333 | 340 | | |
| |||
368 | 375 | | |
369 | 376 | | |
370 | 377 | | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
371 | 492 | | |
372 | 493 | | |
373 | 494 | | |
| |||
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
Lines changed: 33 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
Lines changed: 29 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
0 commit comments