Skip to content

Commit

Permalink
fix(es/compat): Fix the position for temp var injection (#7171)
Browse files Browse the repository at this point in the history
  • Loading branch information
magic-akari committed Mar 30, 2023
1 parent 6a01555 commit 23fb8c5
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 4 deletions.
@@ -1,3 +1,5 @@
use std::mem;

use swc_common::{util::take::Take, DUMMY_SP};
use swc_ecma_ast::*;
use swc_ecma_transforms_base::perf::Parallel;
Expand Down Expand Up @@ -173,34 +175,44 @@ impl VisitMut for Operators {
}
}

/// [swc_ecma_ast::ModuleItem] is the top level Item in the current
/// implementation of JavaScript until the proposal for
/// [module-declarations] and [module-expressions] are officially added.
///
/// [module declarations]: https://github.com/tc39/proposal-module-declarations.
/// [module-expressions]: https://github.com/tc39/proposal-module-expressions
fn visit_mut_module_items(&mut self, n: &mut Vec<ModuleItem>) {
let vars = self.vars.take();
n.visit_mut_children_with(self);

if !self.vars.is_empty() {
let vars = mem::replace(&mut self.vars, vars);
if !vars.is_empty() {
prepend_stmt(
n,
VarDecl {
span: DUMMY_SP,
kind: VarDeclKind::Var,
declare: false,
decls: self.vars.take(),
decls: vars,
}
.into(),
)
}
}

fn visit_mut_stmts(&mut self, n: &mut Vec<Stmt>) {
let vars = self.vars.take();
n.visit_mut_children_with(self);

if !self.vars.is_empty() {
let vars = mem::replace(&mut self.vars, vars);
if !vars.is_empty() {
prepend_stmt(
n,
VarDecl {
span: DUMMY_SP,
kind: VarDeclKind::Var,
declare: false,
decls: self.vars.take(),
decls: vars,
}
.into(),
)
Expand Down
Expand Up @@ -79,6 +79,23 @@ test!(
"
);

test!(
syntax(),
|_| tr(),
issue_7169,
"function myFunc(options) {
options.context ||= {}
const closure = function() {}
}",
"
function myFunc(options) {
var _options;
(_options = options).context || (_options.context = {});
const closure = function() {};
}
"
);

test_exec!(
syntax(),
|_| tr(),
Expand Down

1 comment on commit 23fb8c5

@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: 23fb8c5 Previous: 065d11c Ratio
es/full/bugs-1 293737 ns/iter (± 12006) 310573 ns/iter (± 7616) 0.95
es/full/minify/libraries/antd 1467348958 ns/iter (± 21021114) 1655685673 ns/iter (± 15279300) 0.89
es/full/minify/libraries/d3 281687139 ns/iter (± 5722852) 305183655 ns/iter (± 6987096) 0.92
es/full/minify/libraries/echarts 1092316263 ns/iter (± 22563298) 1273011758 ns/iter (± 11514661) 0.86
es/full/minify/libraries/jquery 86667351 ns/iter (± 557185) 91481560 ns/iter (± 660085) 0.95
es/full/minify/libraries/lodash 101165870 ns/iter (± 1218798) 106271655 ns/iter (± 1135306) 0.95
es/full/minify/libraries/moment 50294067 ns/iter (± 477791) 52868094 ns/iter (± 360026) 0.95
es/full/minify/libraries/react 18591157 ns/iter (± 123254) 19380410 ns/iter (± 163680) 0.96
es/full/minify/libraries/terser 229216857 ns/iter (± 1927325) 251678979 ns/iter (± 3284225) 0.91
es/full/minify/libraries/three 398122032 ns/iter (± 5184361) 448765914 ns/iter (± 5268233) 0.89
es/full/minify/libraries/typescript 2810404541 ns/iter (± 22267082) 3120238668 ns/iter (± 16004181) 0.90
es/full/minify/libraries/victory 598273425 ns/iter (± 11597093) 698293530 ns/iter (± 8489142) 0.86
es/full/minify/libraries/vue 124943846 ns/iter (± 1295444) 133166982 ns/iter (± 619218) 0.94
es/full/codegen/es3 27454 ns/iter (± 189) 28476 ns/iter (± 55) 0.96
es/full/codegen/es5 28006 ns/iter (± 186) 28613 ns/iter (± 31) 0.98
es/full/codegen/es2015 27571 ns/iter (± 297) 28566 ns/iter (± 37) 0.97
es/full/codegen/es2016 27409 ns/iter (± 254) 28528 ns/iter (± 48) 0.96
es/full/codegen/es2017 27631 ns/iter (± 177) 28539 ns/iter (± 44) 0.97
es/full/codegen/es2018 27606 ns/iter (± 188) 28592 ns/iter (± 41) 0.97
es/full/codegen/es2019 27444 ns/iter (± 192) 28556 ns/iter (± 26) 0.96
es/full/codegen/es2020 27352 ns/iter (± 143) 28592 ns/iter (± 35) 0.96
es/full/all/es3 179147409 ns/iter (± 2724644) 184634738 ns/iter (± 2153135) 0.97
es/full/all/es5 173643822 ns/iter (± 3038060) 172542744 ns/iter (± 3141689) 1.01
es/full/all/es2015 130834299 ns/iter (± 2532076) 134825965 ns/iter (± 1579401) 0.97
es/full/all/es2016 129410769 ns/iter (± 1391938) 133230657 ns/iter (± 1102992) 0.97
es/full/all/es2017 126809517 ns/iter (± 1510682) 131357056 ns/iter (± 1643288) 0.97
es/full/all/es2018 123274994 ns/iter (± 1290563) 126875600 ns/iter (± 1155014) 0.97
es/full/all/es2019 121782056 ns/iter (± 1054058) 125695140 ns/iter (± 1832035) 0.97
es/full/all/es2020 116327599 ns/iter (± 923075) 118764557 ns/iter (± 662712) 0.98
es/full/parser 498502 ns/iter (± 7683) 522091 ns/iter (± 8342) 0.95
es/full/base/fixer 23356 ns/iter (± 179) 22653 ns/iter (± 33) 1.03
es/full/base/resolver_and_hygiene 81787 ns/iter (± 585) 84496 ns/iter (± 137) 0.97
serialization of serde 119 ns/iter (± 2) 126 ns/iter (± 0) 0.94
css/minify/libraries/bootstrap 26949968 ns/iter (± 298881) 28141315 ns/iter (± 162086) 0.96
css/visitor/compare/clone 2053791 ns/iter (± 23138) 2140557 ns/iter (± 42383) 0.96
css/visitor/compare/visit_mut_span 2259162 ns/iter (± 29669) 2315020 ns/iter (± 7648) 0.98
css/visitor/compare/visit_mut_span_panic 2329138 ns/iter (± 11996) 2382548 ns/iter (± 6482) 0.98
css/visitor/compare/fold_span 2961247 ns/iter (± 42737) 3084131 ns/iter (± 15389) 0.96
css/visitor/compare/fold_span_panic 3142937 ns/iter (± 26157) 3258936 ns/iter (± 10284) 0.96
css/lexer/bootstrap_5_1_3 5051710 ns/iter (± 46936) 5113849 ns/iter (± 1358) 0.99
css/lexer/foundation_6_7_4 4235611 ns/iter (± 28129) 4333383 ns/iter (± 1648) 0.98
css/lexer/tailwind_3_1_1 793568 ns/iter (± 4593) 819753 ns/iter (± 206) 0.97
css/parser/bootstrap_5_1_3 20061035 ns/iter (± 156867) 21133991 ns/iter (± 133033) 0.95
css/parser/foundation_6_7_4 15960424 ns/iter (± 84637) 16644967 ns/iter (± 57818) 0.96
css/parser/tailwind_3_1_1 3109506 ns/iter (± 21713) 3201637 ns/iter (± 3646) 0.97
es/codegen/colors 317439 ns/iter (± 180715) 325410 ns/iter (± 184498) 0.98
es/codegen/large 1191768 ns/iter (± 616978) 1092420 ns/iter (± 552959) 1.09
es/codegen/with-parser/colors 46147 ns/iter (± 387) 47269 ns/iter (± 81) 0.98
es/codegen/with-parser/large 489982 ns/iter (± 4473) 507926 ns/iter (± 2072) 0.96
es/minify/libraries/antd 1244742222 ns/iter (± 22999900) 1451031002 ns/iter (± 12940828) 0.86
es/minify/libraries/d3 240478029 ns/iter (± 2490936) 259422440 ns/iter (± 2764506) 0.93
es/minify/libraries/echarts 967658528 ns/iter (± 16397593) 1097567034 ns/iter (± 11992089) 0.88
es/minify/libraries/jquery 76109712 ns/iter (± 792885) 80752407 ns/iter (± 565357) 0.94
es/minify/libraries/lodash 93444141 ns/iter (± 984097) 96166360 ns/iter (± 773636) 0.97
es/minify/libraries/moment 44518841 ns/iter (± 348613) 46258310 ns/iter (± 383040) 0.96
es/minify/libraries/react 16679166 ns/iter (± 113963) 17125933 ns/iter (± 122407) 0.97
es/minify/libraries/terser 196120544 ns/iter (± 2701501) 217739793 ns/iter (± 2564270) 0.90
es/minify/libraries/three 329198603 ns/iter (± 3409965) 374754332 ns/iter (± 5188191) 0.88
es/minify/libraries/typescript 2380015024 ns/iter (± 18674618) 2675912407 ns/iter (± 17611453) 0.89
es/minify/libraries/victory 498687229 ns/iter (± 5108079) 592714094 ns/iter (± 9869612) 0.84
es/minify/libraries/vue 111231098 ns/iter (± 1399187) 116815636 ns/iter (± 1060100) 0.95
es/visitor/compare/clone 2295209 ns/iter (± 16896) 2347263 ns/iter (± 10761) 0.98
es/visitor/compare/visit_mut_span 2678885 ns/iter (± 23035) 2727461 ns/iter (± 4644) 0.98
es/visitor/compare/visit_mut_span_panic 2662789 ns/iter (± 40529) 2762658 ns/iter (± 4064) 0.96
es/visitor/compare/fold_span 3742449 ns/iter (± 33250) 3834399 ns/iter (± 6576) 0.98
es/visitor/compare/fold_span_panic 3873100 ns/iter (± 20570) 3939326 ns/iter (± 9108) 0.98
es/lexer/colors 12694 ns/iter (± 50) 12906 ns/iter (± 17) 0.98
es/lexer/angular 6302768 ns/iter (± 59361) 6316600 ns/iter (± 1752) 1.00
es/lexer/backbone 777480 ns/iter (± 5118) 777122 ns/iter (± 291) 1.00
es/lexer/jquery 4399174 ns/iter (± 32677) 4367738 ns/iter (± 2311) 1.01
es/lexer/jquery mobile 6918122 ns/iter (± 5168) 6805913 ns/iter (± 3954) 1.02
es/lexer/mootools 3455060 ns/iter (± 30703) 3413916 ns/iter (± 1115) 1.01
es/lexer/underscore 650594 ns/iter (± 1611) 643955 ns/iter (± 2227) 1.01
es/lexer/three 20493643 ns/iter (± 257692) 20682074 ns/iter (± 18182) 0.99
es/lexer/yui 3734099 ns/iter (± 29839) 3811512 ns/iter (± 15465) 0.98
es/parser/colors 28850 ns/iter (± 203) 29007 ns/iter (± 124) 0.99
es/parser/angular 14518674 ns/iter (± 126641) 15131606 ns/iter (± 153769) 0.96
es/parser/backbone 2076940 ns/iter (± 27134) 2146744 ns/iter (± 11918) 0.97
es/parser/jquery 11269029 ns/iter (± 93993) 12005720 ns/iter (± 179808) 0.94
es/parser/jquery mobile 17517300 ns/iter (± 123445) 19217572 ns/iter (± 258163) 0.91
es/parser/mootools 8629022 ns/iter (± 60505) 8934562 ns/iter (± 25957) 0.97
es/parser/underscore 1783947 ns/iter (± 12778) 1815985 ns/iter (± 9304) 0.98
es/parser/three 52204967 ns/iter (± 1765537) 55777560 ns/iter (± 326598) 0.94
es/parser/yui 8978863 ns/iter (± 115654) 9054058 ns/iter (± 80812) 0.99
es/preset-env/usage/builtin_type 140493 ns/iter (± 32926) 145565 ns/iter (± 34581) 0.97
es/preset-env/usage/property 19955 ns/iter (± 141) 21006 ns/iter (± 63) 0.95
es/resolver/typescript 110972229 ns/iter (± 2036118) 121375498 ns/iter (± 2609756) 0.91
es/fixer/typescript 75931051 ns/iter (± 919029) 87895778 ns/iter (± 1993675) 0.86
es/hygiene/typescript 174164572 ns/iter (± 6310119) 190054824 ns/iter (± 1070914) 0.92
es/resolver_with_hygiene/typescript 296876338 ns/iter (± 1771816) 330346195 ns/iter (± 2317008) 0.90
es/visitor/base-perf/module_clone 78877 ns/iter (± 484) 81143 ns/iter (± 507) 0.97
es/visitor/base-perf/fold_empty 88311 ns/iter (± 666) 90330 ns/iter (± 382) 0.98
es/visitor/base-perf/fold_noop_impl_all 88702 ns/iter (± 574) 90755 ns/iter (± 287) 0.98
es/visitor/base-perf/fold_noop_impl_vec 88535 ns/iter (± 1285) 90489 ns/iter (± 495) 0.98
es/visitor/base-perf/boxing_boxed_clone 54 ns/iter (± 0) 58 ns/iter (± 0) 0.93
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 43 ns/iter (± 0) 0.93
es/visitor/base-perf/boxing_boxed 98 ns/iter (± 0) 102 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed 75 ns/iter (± 0) 78 ns/iter (± 0) 0.96
es/visitor/base-perf/visit_contains_this 3476 ns/iter (± 50) 3446 ns/iter (± 67) 1.01
es/base/parallel/resolver/typescript 5966551437 ns/iter (± 500758070) 6266369265 ns/iter (± 568116739) 0.95
es/base/parallel/hygiene/typescript 1998097077 ns/iter (± 23932898) 2218254561 ns/iter (± 29379558) 0.90
misc/visitors/time-complexity/time 5 101 ns/iter (± 0) 102 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 335 ns/iter (± 10) 339 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 15 643 ns/iter (± 4) 659 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 20 1191 ns/iter (± 9) 1236 ns/iter (± 27) 0.96
misc/visitors/time-complexity/time 40 6542 ns/iter (± 108) 6715 ns/iter (± 44) 0.97
misc/visitors/time-complexity/time 60 16667 ns/iter (± 75) 17214 ns/iter (± 132) 0.97
es/full-target/es2016 253632 ns/iter (± 474) 252122 ns/iter (± 423) 1.01
es/full-target/es2017 246861 ns/iter (± 1067) 245040 ns/iter (± 444) 1.01
es/full-target/es2018 232643 ns/iter (± 1512) 235263 ns/iter (± 514) 0.99
es2020_nullish_coalescing 93112 ns/iter (± 624) 92571 ns/iter (± 173) 1.01
es2020_optional_chaining 123934 ns/iter (± 310) 124396 ns/iter (± 211) 1.00
es2022_class_properties 148459 ns/iter (± 963) 148573 ns/iter (± 315) 1.00
es2018_object_rest_spread 96517 ns/iter (± 382) 95984 ns/iter (± 224) 1.01
es2019_optional_catch_binding 85749 ns/iter (± 288) 85028 ns/iter (± 212) 1.01
es2017_async_to_generator 85478 ns/iter (± 729) 85440 ns/iter (± 150) 1.00
es2016_exponentiation 89470 ns/iter (± 701) 90448 ns/iter (± 279) 0.99
es2015_arrow 93142 ns/iter (± 445) 93830 ns/iter (± 277) 0.99
es2015_block_scoped_fn 91023 ns/iter (± 516) 91716 ns/iter (± 768) 0.99
es2015_block_scoping 169496 ns/iter (± 669) 166759 ns/iter (± 233) 1.02

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

Please sign in to comment.