Skip to content

Commit

Permalink
fix(es/module): Fix handling of continuous assignments in systemjs (#…
Browse files Browse the repository at this point in the history
…7741)

**Description:**

Fix transpile the continuous assignment code like `d.a = d.b = d.c = d.d = ... = void 0;` to SystemJS may cause Infinite loop.

**Related issue:**

 - Closes #7143.
  • Loading branch information
thy486 authored Aug 3, 2023
1 parent 5afdd2e commit f713f6a
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
9 changes: 9 additions & 0 deletions crates/swc_ecma_transforms_module/src/system_js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,15 @@ impl Fold for SystemJs {
let assign_expr = AssignExpr {
right: match *assign.right {
Expr::Ident(ident) => Box::new(self.fold_module_name_ident(ident)),
Expr::Assign(AssignExpr {
op: AssignOp::Assign,
..
}) => {
return self.replace_assign_expr(AssignExpr {
right: assign.right,
..assign
});
}
_ => assign.right,
},
..assign
Expand Down
18 changes: 18 additions & 0 deletions crates/swc_ecma_transforms_module/tests/system_js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,24 @@ fn tr(_tester: &mut Tester<'_>, config: Config) -> impl Fold {
)
}

test!(
syntax(),
|tester| tr(tester, Default::default()),
allow_continuous_assignment,
r#"var e = {}; e.a = e.b = e.c = e.d = e.e = e.f = e.g = e.h = e.i = e.j = e.k = e.l = e.m = e.n = e.o = e.p = e.q = e.r = e.s = e.t = e.u = e.v = e.w = e.x = e.y = e.z = e.A = e.B = e.C = e.D = e.E = e.F = e.G = e.H = e.I = e.J = e.K = e.L = e.M = e.N = e.O = e.P = e.Q = e.R = e.S = void 0;"#,
r#"System.register([], function (_export, _context) {
"use strict";
var e;
return {
setters: [],
execute: function () {
e = {};
e.a = e.b = e.c = e.d = e.e = e.f = e.g = e.h = e.i = e.j = e.k = e.l = e.m = e.n = e.o = e.p = e.q = e.r = e.s = e.t = e.u = e.v = e.w = e.x = e.y = e.z = e.A = e.B = e.C = e.D = e.E = e.F = e.G = e.H = e.I = e.J = e.K = e.L = e.M = e.N = e.O = e.P = e.Q = e.R = e.S = void 0;
}
};
});"#
);

test!(
syntax(),
|tester| tr(
Expand Down

1 comment on commit f713f6a

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: f713f6a Previous: 3873f58 Ratio
es/full/bugs-1 297672 ns/iter (± 8126) 287356 ns/iter (± 10981) 1.04
es/full/minify/libraries/antd 1298989073 ns/iter (± 7706210) 1329133754 ns/iter (± 15543638) 0.98
es/full/minify/libraries/d3 274606689 ns/iter (± 2506294) 277076524 ns/iter (± 2516976) 0.99
es/full/minify/libraries/echarts 1047650119 ns/iter (± 4375872) 1070937114 ns/iter (± 15477932) 0.98
es/full/minify/libraries/jquery 84810567 ns/iter (± 89651) 84761841 ns/iter (± 137209) 1.00
es/full/minify/libraries/lodash 98342170 ns/iter (± 127172) 98010194 ns/iter (± 1381758) 1.00
es/full/minify/libraries/moment 49870395 ns/iter (± 96170) 49793355 ns/iter (± 218694) 1.00
es/full/minify/libraries/react 18043077 ns/iter (± 70881) 17957875 ns/iter (± 55394) 1.00
es/full/minify/libraries/terser 218155288 ns/iter (± 654584) 219797402 ns/iter (± 706515) 0.99
es/full/minify/libraries/three 382770020 ns/iter (± 1462543) 386233546 ns/iter (± 3516575) 0.99
es/full/minify/libraries/typescript 2649384985 ns/iter (± 6020087) 2683102064 ns/iter (± 10778812) 0.99
es/full/minify/libraries/victory 585155558 ns/iter (± 30363110) 572966330 ns/iter (± 4724079) 1.02
es/full/minify/libraries/vue 121303824 ns/iter (± 663480) 120905112 ns/iter (± 794759) 1.00
es/full/codegen/es3 33860 ns/iter (± 106) 35476 ns/iter (± 86) 0.95
es/full/codegen/es5 33879 ns/iter (± 97) 35279 ns/iter (± 83) 0.96
es/full/codegen/es2015 33693 ns/iter (± 155) 35285 ns/iter (± 97) 0.95
es/full/codegen/es2016 33706 ns/iter (± 142) 35208 ns/iter (± 560) 0.96
es/full/codegen/es2017 33669 ns/iter (± 209) 35253 ns/iter (± 61) 0.96
es/full/codegen/es2018 33690 ns/iter (± 133) 35155 ns/iter (± 113) 0.96
es/full/codegen/es2019 33767 ns/iter (± 73) 35369 ns/iter (± 136) 0.95
es/full/codegen/es2020 33841 ns/iter (± 94) 35172 ns/iter (± 92) 0.96
es/full/all/es3 172583695 ns/iter (± 6623637) 173665052 ns/iter (± 1625997) 0.99
es/full/all/es5 172878843 ns/iter (± 6011705) 165665140 ns/iter (± 952499) 1.04
es/full/all/es2015 124682147 ns/iter (± 1238974) 125742251 ns/iter (± 1176162) 0.99
es/full/all/es2016 124534895 ns/iter (± 2072810) 124509118 ns/iter (± 1078877) 1.00
es/full/all/es2017 122953694 ns/iter (± 1340767) 123706557 ns/iter (± 499359) 0.99
es/full/all/es2018 120934879 ns/iter (± 627068) 121495052 ns/iter (± 567533) 1.00
es/full/all/es2019 120775339 ns/iter (± 1337586) 120214867 ns/iter (± 647870) 1.00
es/full/all/es2020 116367034 ns/iter (± 1779315) 115880336 ns/iter (± 623543) 1.00
es/full/parser 531928 ns/iter (± 6143) 537019 ns/iter (± 7053) 0.99
es/full/base/fixer 20045 ns/iter (± 194) 18004 ns/iter (± 63) 1.11
es/full/base/resolver_and_hygiene 81124 ns/iter (± 169) 79433 ns/iter (± 183) 1.02
serialization of serde 298 ns/iter (± 0) 296 ns/iter (± 2) 1.01
css/minify/libraries/bootstrap 29401613 ns/iter (± 495498) 28635046 ns/iter (± 59486) 1.03
css/visitor/compare/clone 1649815 ns/iter (± 3134) 1634330 ns/iter (± 4888) 1.01
css/visitor/compare/visit_mut_span 1796267 ns/iter (± 42761) 1783981 ns/iter (± 6410) 1.01
css/visitor/compare/visit_mut_span_panic 1843322 ns/iter (± 7288) 1840146 ns/iter (± 3400) 1.00
css/visitor/compare/fold_span 2585638 ns/iter (± 38433) 2574420 ns/iter (± 12583) 1.00
css/visitor/compare/fold_span_panic 2807139 ns/iter (± 21427) 2765603 ns/iter (± 63956) 1.02
css/lexer/bootstrap_5_1_3 4450446 ns/iter (± 2588) 4413867 ns/iter (± 5494) 1.01
css/lexer/foundation_6_7_4 3751002 ns/iter (± 2107) 3730178 ns/iter (± 3412) 1.01
css/lexer/tailwind_3_1_1 711669 ns/iter (± 929) 708220 ns/iter (± 1147) 1.00
css/parser/bootstrap_5_1_3 20849504 ns/iter (± 322158) 19925756 ns/iter (± 28358) 1.05
css/parser/foundation_6_7_4 16483532 ns/iter (± 100060) 15845122 ns/iter (± 30354) 1.04
css/parser/tailwind_3_1_1 3108248 ns/iter (± 18160) 3026654 ns/iter (± 7741) 1.03
es/codegen/colors 733676 ns/iter (± 401241) 732042 ns/iter (± 402052) 1.00
es/codegen/large 3175281 ns/iter (± 1676154) 3143781 ns/iter (± 1678733) 1.01
es/codegen/with-parser/colors 44001 ns/iter (± 512) 43619 ns/iter (± 562) 1.01
es/codegen/with-parser/large 481560 ns/iter (± 758) 488121 ns/iter (± 1323) 0.99
es/minify/libraries/antd 1233853470 ns/iter (± 38117344) 1149717999 ns/iter (± 13615683) 1.07
es/minify/libraries/d3 240407064 ns/iter (± 602534) 241817018 ns/iter (± 714248) 0.99
es/minify/libraries/echarts 903325108 ns/iter (± 3556517) 910973930 ns/iter (± 8060445) 0.99
es/minify/libraries/jquery 74251814 ns/iter (± 1047351) 74137685 ns/iter (± 119164) 1.00
es/minify/libraries/lodash 88323400 ns/iter (± 397638) 88493721 ns/iter (± 332902) 1.00
es/minify/libraries/moment 43642213 ns/iter (± 72153) 43704111 ns/iter (± 85216) 1.00
es/minify/libraries/react 16209852 ns/iter (± 124855) 16053020 ns/iter (± 143840) 1.01
es/minify/libraries/terser 194234112 ns/iter (± 5636160) 187060813 ns/iter (± 2996554) 1.04
es/minify/libraries/three 337190980 ns/iter (± 10145174) 319686687 ns/iter (± 4396387) 1.05
es/minify/libraries/typescript 2230766136 ns/iter (± 19944209) 2245129264 ns/iter (± 9540205) 0.99
es/minify/libraries/victory 466566903 ns/iter (± 1197840) 469364432 ns/iter (± 3393745) 0.99
es/minify/libraries/vue 106968235 ns/iter (± 131687) 107648701 ns/iter (± 383317) 0.99
es/visitor/compare/clone 1938747 ns/iter (± 10831) 1939340 ns/iter (± 5340) 1.00
es/visitor/compare/visit_mut_span 2287681 ns/iter (± 4248) 2287514 ns/iter (± 5889) 1.00
es/visitor/compare/visit_mut_span_panic 2310949 ns/iter (± 3708) 2324361 ns/iter (± 9493) 0.99
es/visitor/compare/fold_span 3339800 ns/iter (± 8055) 3328849 ns/iter (± 34103) 1.00
es/visitor/compare/fold_span_panic 3470147 ns/iter (± 5894) 3470663 ns/iter (± 16808) 1.00
es/lexer/colors 12776 ns/iter (± 16) 12727 ns/iter (± 45) 1.00
es/lexer/angular 6135640 ns/iter (± 10755) 6139412 ns/iter (± 17270) 1.00
es/lexer/backbone 810317 ns/iter (± 2227) 802476 ns/iter (± 3564) 1.01
es/lexer/jquery 4498256 ns/iter (± 2811) 4547688 ns/iter (± 8054) 0.99
es/lexer/jquery mobile 6909404 ns/iter (± 6411) 7039865 ns/iter (± 19829) 0.98
es/lexer/mootools 3601675 ns/iter (± 3229) 3592900 ns/iter (± 14887) 1.00
es/lexer/underscore 678029 ns/iter (± 1243) 668133 ns/iter (± 6461) 1.01
es/lexer/three 21368283 ns/iter (± 35007) 21263745 ns/iter (± 113779) 1.00
es/lexer/yui 3835719 ns/iter (± 1169) 3903300 ns/iter (± 8094) 0.98
es/parser/colors 26234 ns/iter (± 47) 26497 ns/iter (± 80) 0.99
es/parser/angular 13543920 ns/iter (± 60235) 13363627 ns/iter (± 89164) 1.01
es/parser/backbone 2009757 ns/iter (± 6458) 1982499 ns/iter (± 9998) 1.01
es/parser/jquery 10934248 ns/iter (± 50610) 10772678 ns/iter (± 95071) 1.01
es/parser/jquery mobile 16760572 ns/iter (± 38186) 16518446 ns/iter (± 68526) 1.01
es/parser/mootools 8438346 ns/iter (± 12594) 8323986 ns/iter (± 22871) 1.01
es/parser/underscore 1726358 ns/iter (± 15796) 1714990 ns/iter (± 6884) 1.01
es/parser/three 46853154 ns/iter (± 200949) 46628486 ns/iter (± 315998) 1.00
es/parser/yui 8343960 ns/iter (± 42828) 8174020 ns/iter (± 28006) 1.02
es/preset-env/usage/builtin_type 136747 ns/iter (± 32364) 138399 ns/iter (± 32958) 0.99
es/preset-env/usage/property 16020 ns/iter (± 72) 16602 ns/iter (± 56) 0.96
es/resolver/typescript 87558562 ns/iter (± 1221275) 88887466 ns/iter (± 969627) 0.99
es/fixer/typescript 63004539 ns/iter (± 1373005) 64321402 ns/iter (± 560704) 0.98
es/hygiene/typescript 129214203 ns/iter (± 945274) 130740448 ns/iter (± 1039668) 0.99
es/resolver_with_hygiene/typescript 239127517 ns/iter (± 1563490) 242644027 ns/iter (± 1477267) 0.99
es/visitor/base-perf/module_clone 59493 ns/iter (± 483) 59443 ns/iter (± 281) 1.00
es/visitor/base-perf/fold_empty 64393 ns/iter (± 268) 63835 ns/iter (± 271) 1.01
es/visitor/base-perf/fold_noop_impl_all 65235 ns/iter (± 418) 64248 ns/iter (± 532) 1.02
es/visitor/base-perf/fold_noop_impl_vec 64095 ns/iter (± 687) 64498 ns/iter (± 383) 0.99
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 41 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 109 ns/iter (± 0) 109 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 78 ns/iter (± 0) 1
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2437 ns/iter (± 8) 2533 ns/iter (± 296) 0.96
es/base/parallel/resolver/typescript 3863983433 ns/iter (± 223443599) 4547723201 ns/iter (± 242332419) 0.85
es/base/parallel/hygiene/typescript 1427382715 ns/iter (± 18296764) 1419931506 ns/iter (± 14713305) 1.01
misc/visitors/time-complexity/time 5 136 ns/iter (± 1) 142 ns/iter (± 2) 0.96
misc/visitors/time-complexity/time 10 361 ns/iter (± 3) 393 ns/iter (± 4) 0.92
misc/visitors/time-complexity/time 15 735 ns/iter (± 2) 664 ns/iter (± 4) 1.11
misc/visitors/time-complexity/time 20 1042 ns/iter (± 9) 1041 ns/iter (± 3) 1.00
misc/visitors/time-complexity/time 40 3537 ns/iter (± 15) 3484 ns/iter (± 2) 1.02
misc/visitors/time-complexity/time 60 7239 ns/iter (± 26) 7237 ns/iter (± 23) 1.00
es/full-target/es2016 237217 ns/iter (± 743) 237562 ns/iter (± 1011) 1.00
es/full-target/es2017 226679 ns/iter (± 1148) 225596 ns/iter (± 832) 1.00
es/full-target/es2018 212753 ns/iter (± 788) 213298 ns/iter (± 429) 1.00
es2020_nullish_coalescing 71313 ns/iter (± 411) 70602 ns/iter (± 489) 1.01
es2020_optional_chaining 82276 ns/iter (± 263) 81032 ns/iter (± 344) 1.02
es2022_class_properties 121012 ns/iter (± 433) 120512 ns/iter (± 1538) 1.00
es2018_object_rest_spread 76170 ns/iter (± 1905) 76374 ns/iter (± 457) 1.00
es2019_optional_catch_binding 64890 ns/iter (± 163) 65712 ns/iter (± 225) 0.99
es2017_async_to_generator 63569 ns/iter (± 180) 65021 ns/iter (± 1323) 0.98
es2016_exponentiation 67970 ns/iter (± 230) 69052 ns/iter (± 134) 0.98
es2015_arrow 70887 ns/iter (± 165) 70852 ns/iter (± 1724) 1.00
es2015_block_scoped_fn 69717 ns/iter (± 312) 67839 ns/iter (± 163) 1.03
es2015_block_scoping 124055 ns/iter (± 611) 122004 ns/iter (± 420) 1.02

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.