Skip to content

Commit

Permalink
fix(es/minifier): Report is_fn_local even if var is hoisted (#7876)
Browse files Browse the repository at this point in the history
**Related issue:**
 - Closes #7847
  • Loading branch information
Austaras committed Aug 29, 2023
1 parent c31f05a commit 87a47bf
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ impl Optimizer<'_> {

// We only handle identifiers on lhs for now.
if let Some(lhs) = assign.left.as_ident() {
//
if self
.data
.vars
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_minifier/src/program_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ impl Storage for ProgramData {
}
}
ScopeKind::Block => {
if var_info.used_in_non_child_fn {
if e.get().used_in_non_child_fn {
e.get_mut().is_fn_local = false;
e.get_mut().used_in_non_child_fn = true;
}
Expand Down
17 changes: 17 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/7847/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
function requireState() {
if (hasRequiredState) return state;
hasRequiredState = 1;
return state = {
getHighWaterMark: function(o) {
return o.objectMode ? 16 : 16384;
}
};
}
if (g()) {
var state, hasRequiredState;
const a = requireState()
console.log(a.getHighWaterMark())

const b = requireState()
console.log(b.getHighWaterMark())
}
14 changes: 14 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/7847/output.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function requireState() {
return hasRequiredState ? state : (hasRequiredState = 1, state = {
getHighWaterMark: function(o) {
return o.objectMode ? 16 : 16384;
}
});
}
if (g()) {
var state, hasRequiredState;
const a = requireState();
console.log(a.getHighWaterMark());
const b = requireState();
console.log(b.getHighWaterMark());
}

1 comment on commit 87a47bf

@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: 87a47bf Previous: 4b33d41 Ratio
es/full/bugs-1 280521 ns/iter (± 10904) 284121 ns/iter (± 7856) 0.99
es/full/minify/libraries/antd 1382944484 ns/iter (± 20127286) 1340191977 ns/iter (± 9309604) 1.03
es/full/minify/libraries/d3 281325827 ns/iter (± 5135455) 282717171 ns/iter (± 3731227) 1.00
es/full/minify/libraries/echarts 1111263229 ns/iter (± 5073030) 1094872664 ns/iter (± 21300696) 1.01
es/full/minify/libraries/jquery 85189053 ns/iter (± 112995) 84068208 ns/iter (± 259870) 1.01
es/full/minify/libraries/lodash 98208874 ns/iter (± 276555) 97606336 ns/iter (± 342719) 1.01
es/full/minify/libraries/moment 50316784 ns/iter (± 614603) 49839576 ns/iter (± 218339) 1.01
es/full/minify/libraries/react 18099921 ns/iter (± 47432) 18142544 ns/iter (± 156850) 1.00
es/full/minify/libraries/terser 227345972 ns/iter (± 3333644) 224190702 ns/iter (± 4666589) 1.01
es/full/minify/libraries/three 402114353 ns/iter (± 1740664) 405068954 ns/iter (± 14221761) 0.99
es/full/minify/libraries/typescript 2730144519 ns/iter (± 11465944) 2740477063 ns/iter (± 43451146) 1.00
es/full/minify/libraries/victory 594376189 ns/iter (± 5982262) 611895605 ns/iter (± 11843132) 0.97
es/full/minify/libraries/vue 121704355 ns/iter (± 690087) 124675747 ns/iter (± 1886866) 0.98
es/full/codegen/es3 34347 ns/iter (± 103) 35312 ns/iter (± 61) 0.97
es/full/codegen/es5 34423 ns/iter (± 80) 35310 ns/iter (± 195) 0.97
es/full/codegen/es2015 34499 ns/iter (± 44) 35318 ns/iter (± 80) 0.98
es/full/codegen/es2016 34461 ns/iter (± 84) 35315 ns/iter (± 108) 0.98
es/full/codegen/es2017 34445 ns/iter (± 58) 35331 ns/iter (± 309) 0.97
es/full/codegen/es2018 34510 ns/iter (± 402) 35350 ns/iter (± 62) 0.98
es/full/codegen/es2019 34504 ns/iter (± 114) 35256 ns/iter (± 45) 0.98
es/full/codegen/es2020 34469 ns/iter (± 63) 35293 ns/iter (± 98) 0.98
es/full/all/es3 167167498 ns/iter (± 1037949) 171500106 ns/iter (± 1327009) 0.97
es/full/all/es5 160012929 ns/iter (± 1222452) 162370254 ns/iter (± 1168677) 0.99
es/full/all/es2015 120092080 ns/iter (± 868763) 120994136 ns/iter (± 606286) 0.99
es/full/all/es2016 119294778 ns/iter (± 726228) 120577779 ns/iter (± 568005) 0.99
es/full/all/es2017 118098725 ns/iter (± 1714645) 120049998 ns/iter (± 627620) 0.98
es/full/all/es2018 116254671 ns/iter (± 701768) 117723480 ns/iter (± 827805) 0.99
es/full/all/es2019 115590517 ns/iter (± 680237) 116768165 ns/iter (± 308619) 0.99
es/full/all/es2020 111833069 ns/iter (± 512645) 112169735 ns/iter (± 543188) 1.00
es/full/parser 490341 ns/iter (± 8169) 493071 ns/iter (± 5532) 0.99
es/full/base/fixer 18673 ns/iter (± 75) 17402 ns/iter (± 102) 1.07
es/full/base/resolver_and_hygiene 80660 ns/iter (± 203) 79774 ns/iter (± 212) 1.01
serialization of serde 290 ns/iter (± 0) 291 ns/iter (± 3) 1.00
css/minify/libraries/bootstrap 29135902 ns/iter (± 115956) 29229806 ns/iter (± 194376) 1.00
css/visitor/compare/clone 1625122 ns/iter (± 9706) 1653504 ns/iter (± 20340) 0.98
css/visitor/compare/visit_mut_span 1771745 ns/iter (± 6772) 1783900 ns/iter (± 15756) 0.99
css/visitor/compare/visit_mut_span_panic 1837496 ns/iter (± 2975) 1859793 ns/iter (± 7127) 0.99
css/visitor/compare/fold_span 2557131 ns/iter (± 10836) 2599967 ns/iter (± 25261) 0.98
css/visitor/compare/fold_span_panic 2755292 ns/iter (± 10000) 2786982 ns/iter (± 17764) 0.99
css/lexer/bootstrap_5_1_3 4426982 ns/iter (± 4789) 4506390 ns/iter (± 19663) 0.98
css/lexer/foundation_6_7_4 3731947 ns/iter (± 4766) 3787057 ns/iter (± 6347) 0.99
css/lexer/tailwind_3_1_1 711082 ns/iter (± 1036) 721350 ns/iter (± 2289) 0.99
css/parser/bootstrap_5_1_3 20409509 ns/iter (± 262150) 19997067 ns/iter (± 85460) 1.02
css/parser/foundation_6_7_4 16413296 ns/iter (± 131352) 16224174 ns/iter (± 191854) 1.01
css/parser/tailwind_3_1_1 3089095 ns/iter (± 21233) 3081842 ns/iter (± 5007) 1.00
es/codegen/colors 738218 ns/iter (± 403264) 728150 ns/iter (± 396422) 1.01
es/codegen/large 2891692 ns/iter (± 1524442) 2905229 ns/iter (± 1531182) 1.00
es/codegen/with-parser/colors 45725 ns/iter (± 208) 45721 ns/iter (± 266) 1.00
es/codegen/with-parser/large 492998 ns/iter (± 1033) 496069 ns/iter (± 869) 0.99
es/minify/libraries/antd 1200020091 ns/iter (± 13757323) 1223766934 ns/iter (± 22033676) 0.98
es/minify/libraries/d3 249318977 ns/iter (± 1095101) 248912815 ns/iter (± 2695670) 1.00
es/minify/libraries/echarts 955129921 ns/iter (± 9018481) 985014493 ns/iter (± 15103597) 0.97
es/minify/libraries/jquery 75261126 ns/iter (± 1530348) 74863426 ns/iter (± 834606) 1.01
es/minify/libraries/lodash 88186126 ns/iter (± 361152) 88711143 ns/iter (± 491604) 0.99
es/minify/libraries/moment 43900581 ns/iter (± 169257) 43794265 ns/iter (± 231441) 1.00
es/minify/libraries/react 16040473 ns/iter (± 41515) 16092557 ns/iter (± 80998) 1.00
es/minify/libraries/terser 192154564 ns/iter (± 1095882) 201349726 ns/iter (± 3856912) 0.95
es/minify/libraries/three 341319139 ns/iter (± 4729274) 351561037 ns/iter (± 8129563) 0.97
es/minify/libraries/typescript 2329003528 ns/iter (± 10954881) 2363755528 ns/iter (± 32424499) 0.99
es/minify/libraries/victory 508428005 ns/iter (± 4815178) 516568759 ns/iter (± 12548699) 0.98
es/minify/libraries/vue 107932717 ns/iter (± 371580) 107919787 ns/iter (± 719030) 1.00
es/visitor/compare/clone 1953714 ns/iter (± 6356) 1983964 ns/iter (± 5317) 0.98
es/visitor/compare/visit_mut_span 2268606 ns/iter (± 7129) 2302585 ns/iter (± 4976) 0.99
es/visitor/compare/visit_mut_span_panic 2369556 ns/iter (± 31026) 2369577 ns/iter (± 8847) 1.00
es/visitor/compare/fold_span 3349757 ns/iter (± 8013) 3390620 ns/iter (± 8381) 0.99
es/visitor/compare/fold_span_panic 3486669 ns/iter (± 15477) 3518725 ns/iter (± 10206) 0.99
es/lexer/colors 13328 ns/iter (± 33) 12992 ns/iter (± 115) 1.03
es/lexer/angular 6242383 ns/iter (± 27753) 6045234 ns/iter (± 5633) 1.03
es/lexer/backbone 804285 ns/iter (± 1784) 779178 ns/iter (± 1193) 1.03
es/lexer/jquery 4559541 ns/iter (± 11640) 4429120 ns/iter (± 42578) 1.03
es/lexer/jquery mobile 6940348 ns/iter (± 35264) 6795063 ns/iter (± 7989) 1.02
es/lexer/mootools 3620990 ns/iter (± 6232) 3548046 ns/iter (± 2669) 1.02
es/lexer/underscore 675145 ns/iter (± 1789) 657141 ns/iter (± 841) 1.03
es/lexer/three 21829662 ns/iter (± 42205) 21350964 ns/iter (± 42271) 1.02
es/lexer/yui 3852306 ns/iter (± 16663) 3811699 ns/iter (± 9301) 1.01
es/parser/colors 27847 ns/iter (± 46) 27299 ns/iter (± 142) 1.02
es/parser/angular 13634469 ns/iter (± 105998) 13589859 ns/iter (± 81351) 1.00
es/parser/backbone 2007280 ns/iter (± 9909) 2002679 ns/iter (± 10500) 1.00
es/parser/jquery 11142801 ns/iter (± 353624) 10938710 ns/iter (± 47346) 1.02
es/parser/jquery mobile 17006485 ns/iter (± 270654) 16821974 ns/iter (± 63592) 1.01
es/parser/mootools 8436700 ns/iter (± 25341) 8379139 ns/iter (± 20713) 1.01
es/parser/underscore 1729750 ns/iter (± 7171) 1725067 ns/iter (± 10247) 1.00
es/parser/three 49364786 ns/iter (± 615553) 47668735 ns/iter (± 434397) 1.04
es/parser/yui 8347804 ns/iter (± 53548) 8343221 ns/iter (± 43015) 1.00
es/preset-env/usage/builtin_type 136089 ns/iter (± 31312) 137796 ns/iter (± 33128) 0.99
es/preset-env/usage/property 16861 ns/iter (± 99) 16977 ns/iter (± 50) 0.99
es/resolver/typescript 91495511 ns/iter (± 945779) 91735087 ns/iter (± 923034) 1.00
es/fixer/typescript 64837023 ns/iter (± 613701) 66238379 ns/iter (± 422374) 0.98
es/hygiene/typescript 135073345 ns/iter (± 2539023) 134731392 ns/iter (± 930923) 1.00
es/resolver_with_hygiene/typescript 252514105 ns/iter (± 6558708) 256345299 ns/iter (± 4165891) 0.99
es/visitor/base-perf/module_clone 59765 ns/iter (± 316) 59569 ns/iter (± 279) 1.00
es/visitor/base-perf/fold_empty 63796 ns/iter (± 318) 63411 ns/iter (± 325) 1.01
es/visitor/base-perf/fold_noop_impl_all 64006 ns/iter (± 303) 63231 ns/iter (± 226) 1.01
es/visitor/base-perf/fold_noop_impl_vec 63982 ns/iter (± 273) 63544 ns/iter (± 232) 1.01
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 56 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 41 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 110 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed 75 ns/iter (± 0) 79 ns/iter (± 0) 0.95
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2619 ns/iter (± 9) 2627 ns/iter (± 13) 1.00
es/base/parallel/resolver/typescript 4264623762 ns/iter (± 196636226) 3808827405 ns/iter (± 270193472) 1.12
es/base/parallel/hygiene/typescript 1480415768 ns/iter (± 17911964) 1471037004 ns/iter (± 6661214) 1.01
misc/visitors/time-complexity/time 5 121 ns/iter (± 0) 138 ns/iter (± 1) 0.88
misc/visitors/time-complexity/time 10 391 ns/iter (± 2) 390 ns/iter (± 6) 1.00
misc/visitors/time-complexity/time 15 719 ns/iter (± 2) 715 ns/iter (± 19) 1.01
misc/visitors/time-complexity/time 20 1087 ns/iter (± 12) 1129 ns/iter (± 23) 0.96
misc/visitors/time-complexity/time 40 3644 ns/iter (± 20) 3661 ns/iter (± 30) 1.00
misc/visitors/time-complexity/time 60 7419 ns/iter (± 28) 7381 ns/iter (± 26) 1.01
es/full-target/es2016 231258 ns/iter (± 1697) 234873 ns/iter (± 447) 0.98
es/full-target/es2017 221642 ns/iter (± 1141) 227996 ns/iter (± 650) 0.97
es/full-target/es2018 209115 ns/iter (± 613) 213579 ns/iter (± 399) 0.98
es2020_nullish_coalescing 72155 ns/iter (± 355) 70898 ns/iter (± 343) 1.02
es2020_optional_chaining 79922 ns/iter (± 511) 81692 ns/iter (± 327) 0.98
es2022_class_properties 115279 ns/iter (± 1919) 117431 ns/iter (± 339) 0.98
es2018_object_rest_spread 76298 ns/iter (± 674) 75209 ns/iter (± 184) 1.01
es2019_optional_catch_binding 63810 ns/iter (± 339) 65363 ns/iter (± 331) 0.98
es2017_async_to_generator 64141 ns/iter (± 261) 63005 ns/iter (± 180) 1.02
es2016_exponentiation 67937 ns/iter (± 331) 66391 ns/iter (± 217) 1.02
es2015_arrow 70628 ns/iter (± 205) 73176 ns/iter (± 220) 0.97
es2015_block_scoped_fn 67454 ns/iter (± 859) 69602 ns/iter (± 225) 0.97
es2015_block_scoping 121047 ns/iter (± 421) 124917 ns/iter (± 356) 0.97

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

Please sign in to comment.