Skip to content

Commit

Permalink
fix(es/compat): Insert the variable declaration nearest to the availa…
Browse files Browse the repository at this point in the history
…ble statements (#7067)

**Related issue:**

 - Closes #7064.
  • Loading branch information
magic-akari committed Mar 13, 2023
1 parent 136c498 commit ae348e3
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 4 deletions.
12 changes: 12 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7064/case1/input/.swcrc
@@ -0,0 +1,12 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"decorators": true
},
"target": "es2020"
},
"module": {
"type": "commonjs"
}
}
@@ -0,0 +1,7 @@
function method() {
const obj = {};
obj.prop ??= "x".repeat(10000000);
}

method();
// the large string should be eventually GCed along with the large string, but it will never happen in SWC+es2020
@@ -0,0 +1,7 @@
"use strict";
function method() {
var _obj;
const obj = {};
(_obj = obj).prop ?? (_obj.prop = "x".repeat(10000000));
}
method(); // the large string should be eventually GCed along with the large string, but it will never happen in SWC+es2020
Expand Up @@ -174,12 +174,12 @@ impl VisitMut for Operators {
}
}

fn visit_mut_module(&mut self, n: &mut Module) {
fn visit_mut_module_items(&mut self, n: &mut Vec<ModuleItem>) {
n.visit_mut_children_with(self);

if !self.vars.is_empty() {
prepend_stmt(
&mut n.body,
n,
VarDecl {
span: DUMMY_SP,
kind: VarDeclKind::Var,
Expand All @@ -191,12 +191,12 @@ impl VisitMut for Operators {
}
}

fn visit_mut_script(&mut self, n: &mut Script) {
fn visit_mut_stmts(&mut self, n: &mut Vec<Stmt>) {
n.visit_mut_children_with(self);

if !self.vars.is_empty() {
prepend_stmt(
&mut n.body,
n,
VarDecl {
span: DUMMY_SP,
kind: VarDeclKind::Var,
Expand Down

1 comment on commit ae348e3

@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: ae348e3 Previous: 085c6f3 Ratio
es/full/bugs-1 308238 ns/iter (± 9282) 310922 ns/iter (± 15072) 0.99
es/full/minify/libraries/antd 1642949034 ns/iter (± 20420748) 1583872974 ns/iter (± 19265292) 1.04
es/full/minify/libraries/d3 306321764 ns/iter (± 6737441) 303940064 ns/iter (± 6478043) 1.01
es/full/minify/libraries/echarts 1271377451 ns/iter (± 13248511) 1211151121 ns/iter (± 17223317) 1.05
es/full/minify/libraries/jquery 90791982 ns/iter (± 797386) 91904036 ns/iter (± 927395) 0.99
es/full/minify/libraries/lodash 106275660 ns/iter (± 1456645) 105988081 ns/iter (± 921534) 1.00
es/full/minify/libraries/moment 52758146 ns/iter (± 273702) 52643928 ns/iter (± 460575) 1.00
es/full/minify/libraries/react 19114296 ns/iter (± 141966) 19075496 ns/iter (± 254917) 1.00
es/full/minify/libraries/terser 246909477 ns/iter (± 3963900) 247298614 ns/iter (± 2992795) 1.00
es/full/minify/libraries/three 446695986 ns/iter (± 5794060) 438526083 ns/iter (± 4385154) 1.02
es/full/minify/libraries/typescript 3093519396 ns/iter (± 31718058) 2946143863 ns/iter (± 9287766) 1.05
es/full/minify/libraries/victory 686616303 ns/iter (± 10408336) 660286906 ns/iter (± 12372048) 1.04
es/full/minify/libraries/vue 133229240 ns/iter (± 1391838) 129881111 ns/iter (± 1380747) 1.03
es/full/codegen/es3 26557 ns/iter (± 59) 26512 ns/iter (± 51) 1.00
es/full/codegen/es5 26666 ns/iter (± 50) 26626 ns/iter (± 93) 1.00
es/full/codegen/es2015 26601 ns/iter (± 23) 26542 ns/iter (± 72) 1.00
es/full/codegen/es2016 26698 ns/iter (± 39) 26612 ns/iter (± 59) 1.00
es/full/codegen/es2017 26602 ns/iter (± 30) 26579 ns/iter (± 68) 1.00
es/full/codegen/es2018 26667 ns/iter (± 46) 26552 ns/iter (± 60) 1.00
es/full/codegen/es2019 26591 ns/iter (± 45) 26555 ns/iter (± 42) 1.00
es/full/codegen/es2020 26617 ns/iter (± 42) 26574 ns/iter (± 56) 1.00
es/full/all/es3 182960204 ns/iter (± 2200428) 182377662 ns/iter (± 3117790) 1.00
es/full/all/es5 174514755 ns/iter (± 2442579) 171167607 ns/iter (± 3903702) 1.02
es/full/all/es2015 137940301 ns/iter (± 3354166) 135489285 ns/iter (± 1772215) 1.02
es/full/all/es2016 135644468 ns/iter (± 1288281) 132580089 ns/iter (± 1359597) 1.02
es/full/all/es2017 134521261 ns/iter (± 1639240) 133910576 ns/iter (± 1734327) 1.00
es/full/all/es2018 129672231 ns/iter (± 1611493) 128413239 ns/iter (± 2008308) 1.01
es/full/all/es2019 127337975 ns/iter (± 1254386) 127352481 ns/iter (± 2560489) 1.00
es/full/all/es2020 120438703 ns/iter (± 1255975) 119233245 ns/iter (± 1821830) 1.01
es/full/parser 541648 ns/iter (± 10573) 536191 ns/iter (± 9324) 1.01
es/full/base/fixer 22687 ns/iter (± 43) 22234 ns/iter (± 43) 1.02
es/full/base/resolver_and_hygiene 81898 ns/iter (± 738) 82474 ns/iter (± 116) 0.99
serialization of ast node 124 ns/iter (± 0) 124 ns/iter (± 0) 1
serialization of serde 127 ns/iter (± 0) 126 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 28499965 ns/iter (± 198980) 28463226 ns/iter (± 132816) 1.00
css/visitor/compare/clone 2124639 ns/iter (± 16981) 2127427 ns/iter (± 2950) 1.00
css/visitor/compare/visit_mut_span 2296329 ns/iter (± 3574) 2333491 ns/iter (± 5739) 0.98
css/visitor/compare/visit_mut_span_panic 2350914 ns/iter (± 8937) 2352532 ns/iter (± 3592) 1.00
css/visitor/compare/fold_span 3048051 ns/iter (± 17363) 3110200 ns/iter (± 44717) 0.98
css/visitor/compare/fold_span_panic 3205505 ns/iter (± 17547) 3224560 ns/iter (± 16897) 0.99
css/lexer/bootstrap_5_1_3 5145345 ns/iter (± 12948) 5144926 ns/iter (± 2070) 1.00
css/lexer/foundation_6_7_4 4340210 ns/iter (± 2289) 4340395 ns/iter (± 791) 1.00
css/lexer/tailwind_3_1_1 822869 ns/iter (± 1488) 823548 ns/iter (± 429) 1.00
css/parser/bootstrap_5_1_3 21630626 ns/iter (± 93734) 21854024 ns/iter (± 98831) 0.99
css/parser/foundation_6_7_4 17258340 ns/iter (± 57623) 17294702 ns/iter (± 53600) 1.00
css/parser/tailwind_3_1_1 3296795 ns/iter (± 8077) 3304624 ns/iter (± 6594) 1.00
es/codegen/colors 329305 ns/iter (± 190443) 319924 ns/iter (± 179498) 1.03
es/codegen/large 1178596 ns/iter (± 601985) 1232273 ns/iter (± 640384) 0.96
es/codegen/with-parser/colors 46841 ns/iter (± 158) 46906 ns/iter (± 166) 1.00
es/codegen/with-parser/large 519363 ns/iter (± 1743) 516184 ns/iter (± 2065) 1.01
es/minify/libraries/antd 1444424274 ns/iter (± 17448991) 1362539744 ns/iter (± 30883280) 1.06
es/minify/libraries/d3 260851638 ns/iter (± 3302106) 259289990 ns/iter (± 4940662) 1.01
es/minify/libraries/echarts 1103573744 ns/iter (± 11740599) 1056045368 ns/iter (± 10852438) 1.05
es/minify/libraries/jquery 79010348 ns/iter (± 672988) 79941551 ns/iter (± 392248) 0.99
es/minify/libraries/lodash 94593600 ns/iter (± 1246956) 95370328 ns/iter (± 1229064) 0.99
es/minify/libraries/moment 46430060 ns/iter (± 302967) 46041438 ns/iter (± 403236) 1.01
es/minify/libraries/react 17101452 ns/iter (± 322710) 17015597 ns/iter (± 238504) 1.01
es/minify/libraries/terser 213479134 ns/iter (± 3468317) 213255632 ns/iter (± 4415519) 1.00
es/minify/libraries/three 396682209 ns/iter (± 14732820) 366196065 ns/iter (± 5698603) 1.08
es/minify/libraries/typescript 2664460252 ns/iter (± 12726933) 2512577077 ns/iter (± 12721114) 1.06
es/minify/libraries/victory 605181575 ns/iter (± 8894301) 575414969 ns/iter (± 15123458) 1.05
es/minify/libraries/vue 117444610 ns/iter (± 1860946) 117465449 ns/iter (± 1175487) 1.00
es/visitor/compare/clone 2350823 ns/iter (± 8160) 2298512 ns/iter (± 6625) 1.02
es/visitor/compare/visit_mut_span 2716497 ns/iter (± 5336) 2646455 ns/iter (± 5751) 1.03
es/visitor/compare/visit_mut_span_panic 2743051 ns/iter (± 5502) 2704848 ns/iter (± 5884) 1.01
es/visitor/compare/fold_span 3815373 ns/iter (± 14924) 3775427 ns/iter (± 12071) 1.01
es/visitor/compare/fold_span_panic 3976948 ns/iter (± 16504) 3962719 ns/iter (± 23063) 1.00
es/lexer/colors 15051 ns/iter (± 31) 15104 ns/iter (± 38) 1.00
es/lexer/angular 7375227 ns/iter (± 14308) 7371405 ns/iter (± 4551) 1.00
es/lexer/backbone 987040 ns/iter (± 1314) 984673 ns/iter (± 892) 1.00
es/lexer/jquery 5524780 ns/iter (± 10705) 5515260 ns/iter (± 13101) 1.00
es/lexer/jquery mobile 8498030 ns/iter (± 11879) 8500115 ns/iter (± 4076) 1.00
es/lexer/mootools 4343964 ns/iter (± 7586) 4344044 ns/iter (± 7933) 1.00
es/lexer/underscore 823898 ns/iter (± 1813) 824206 ns/iter (± 631) 1.00
es/lexer/three 25761217 ns/iter (± 40335) 25800544 ns/iter (± 21956) 1.00
es/lexer/yui 4592656 ns/iter (± 8857) 4605344 ns/iter (± 4065) 1.00
es/parser/colors 29488 ns/iter (± 57) 29576 ns/iter (± 61) 1.00
es/parser/angular 15279582 ns/iter (± 133405) 15368934 ns/iter (± 122620) 0.99
es/parser/backbone 2238745 ns/iter (± 11757) 2191547 ns/iter (± 11591) 1.02
es/parser/jquery 12140962 ns/iter (± 84773) 12008574 ns/iter (± 129320) 1.01
es/parser/jquery mobile 19106093 ns/iter (± 174280) 19006564 ns/iter (± 128557) 1.01
es/parser/mootools 9247171 ns/iter (± 34810) 9126675 ns/iter (± 23483) 1.01
es/parser/underscore 1895237 ns/iter (± 11304) 1859396 ns/iter (± 11385) 1.02
es/parser/three 56678889 ns/iter (± 295784) 55462717 ns/iter (± 302155) 1.02
es/parser/yui 9258454 ns/iter (± 63838) 9257475 ns/iter (± 50752) 1.00
es/preset-env/usage/builtin_type 144164 ns/iter (± 36596) 137616 ns/iter (± 32655) 1.05
es/preset-env/usage/property 21612 ns/iter (± 214) 21139 ns/iter (± 81) 1.02
es/resolver/typescript 112522543 ns/iter (± 2568054) 108094262 ns/iter (± 2220235) 1.04
es/fixer/typescript 87253323 ns/iter (± 861758) 78855235 ns/iter (± 1080802) 1.11
es/hygiene/typescript 188931166 ns/iter (± 1311236) 167923888 ns/iter (± 1146623) 1.13
es/resolver_with_hygiene/typescript 325646507 ns/iter (± 2091915) 308743209 ns/iter (± 2674840) 1.05
es/visitor/base-perf/module_clone 78795 ns/iter (± 1274) 79570 ns/iter (± 1335) 0.99
es/visitor/base-perf/fold_empty 89325 ns/iter (± 917) 90564 ns/iter (± 1539) 0.99
es/visitor/base-perf/fold_noop_impl_all 90023 ns/iter (± 1244) 91766 ns/iter (± 945) 0.98
es/visitor/base-perf/fold_noop_impl_vec 90218 ns/iter (± 1375) 91632 ns/iter (± 920) 0.98
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 57 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 54 ns/iter (± 0) 54 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 104 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_unboxed 99 ns/iter (± 0) 106 ns/iter (± 0) 0.93
es/visitor/base-perf/visit_contains_this 3638 ns/iter (± 76) 3539 ns/iter (± 29) 1.03
es/base/parallel/resolver/typescript 5898516959 ns/iter (± 431764543) 5442710885 ns/iter (± 400556319) 1.08
es/base/parallel/hygiene/typescript 2212827883 ns/iter (± 26789781) 1967103175 ns/iter (± 22200184) 1.12
misc/visitors/time-complexity/time 5 98 ns/iter (± 0) 93 ns/iter (± 0) 1.05
misc/visitors/time-complexity/time 10 323 ns/iter (± 0) 311 ns/iter (± 1) 1.04
misc/visitors/time-complexity/time 15 668 ns/iter (± 0) 606 ns/iter (± 10) 1.10
misc/visitors/time-complexity/time 20 1256 ns/iter (± 10) 1124 ns/iter (± 6) 1.12
misc/visitors/time-complexity/time 40 6751 ns/iter (± 2) 5979 ns/iter (± 30) 1.13
misc/visitors/time-complexity/time 60 17399 ns/iter (± 59) 15195 ns/iter (± 38) 1.15
es/full-target/es2016 249223 ns/iter (± 1708) 248448 ns/iter (± 412) 1.00
es/full-target/es2017 242790 ns/iter (± 281) 241361 ns/iter (± 491) 1.01
es/full-target/es2018 232481 ns/iter (± 321) 231074 ns/iter (± 236) 1.01
es2020_nullish_coalescing 90805 ns/iter (± 262) 90505 ns/iter (± 252) 1.00
es2020_optional_chaining 122870 ns/iter (± 622) 122714 ns/iter (± 302) 1.00
es2022_class_properties 146784 ns/iter (± 2103) 146337 ns/iter (± 196) 1.00
es2018_object_rest_spread 94787 ns/iter (± 166) 94431 ns/iter (± 203) 1.00
es2019_optional_catch_binding 84177 ns/iter (± 200) 83737 ns/iter (± 203) 1.01
es2017_async_to_generator 84676 ns/iter (± 229) 84679 ns/iter (± 261) 1.00
es2016_exponentiation 88649 ns/iter (± 146) 88283 ns/iter (± 154) 1.00
es2015_arrow 92921 ns/iter (± 225) 92579 ns/iter (± 133) 1.00
es2015_block_scoped_fn 90603 ns/iter (± 277) 90549 ns/iter (± 293) 1.00
es2015_block_scoping 169862 ns/iter (± 459) 169008 ns/iter (± 298) 1.01

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

Please sign in to comment.