Skip to content

Commit

Permalink
fix(es/resolver): Resolve the super class before registering a class …
Browse files Browse the repository at this point in the history
…name (#7550)

**Related issue:**

 - Closes #7546.
  • Loading branch information
kdy1 committed Jun 20, 2023
1 parent 69b0349 commit 1d9f972
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 0 deletions.
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7546/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"jsc": {
"loose": true
},
"env": {
"include": [
"transform-classes"
]
}
}
9 changes: 9 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7546/input/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ClassName } from './some-file';

export default {
field: class ClassName extends ClassName {
constructor() {
super();
}
}
}
12 changes: 12 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7546/output/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { _ as _inherits } from "@swc/helpers/_/_inherits";
import { ClassName } from "./some-file";
export default {
field: /*#__PURE__*/ function(ClassName) {
"use strict";
_inherits(ClassName1, ClassName);
function ClassName1() {
return ClassName.call(this);
}
return ClassName1;
}(ClassName)
};
2 changes: 2 additions & 0 deletions crates/swc_ecma_transforms_base/src/resolver/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -675,6 +675,8 @@ impl<'a> VisitMut for Resolver<'a> {
fn visit_mut_class_expr(&mut self, n: &mut ClassExpr) {
// Create a child scope. The class name is only accessible within the class.

n.class.super_class.visit_mut_with(self);

self.with_child(ScopeKind::Fn, |child| {
child.ident_type = IdentType::Binding;
n.ident.visit_mut_with(child);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ClassName } from './some-file';

export default {
field: class ClassName extends ClassName {
constructor() {
super();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { ClassName__2 } from './some-file';
export default {
field: class ClassName__3 extends ClassName__2 {
constructor(){
super();
}
}
};

1 comment on commit 1d9f972

@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: 1d9f972 Previous: 862f095 Ratio
es/full/bugs-1 316290 ns/iter (± 7873) 368153 ns/iter (± 8988) 0.86
es/full/minify/libraries/antd 1469987432 ns/iter (± 5561398) 1957497648 ns/iter (± 16697300) 0.75
es/full/minify/libraries/d3 315728175 ns/iter (± 4268394) 393010211 ns/iter (± 2975036) 0.80
es/full/minify/libraries/echarts 1184262386 ns/iter (± 5559691) 1569632424 ns/iter (± 10507948) 0.75
es/full/minify/libraries/jquery 95027552 ns/iter (± 260650) 111914704 ns/iter (± 753152) 0.85
es/full/minify/libraries/lodash 112756927 ns/iter (± 333243) 135433011 ns/iter (± 1081300) 0.83
es/full/minify/libraries/moment 55846668 ns/iter (± 219419) 64664272 ns/iter (± 292697) 0.86
es/full/minify/libraries/react 20018235 ns/iter (± 67261) 23482164 ns/iter (± 148448) 0.85
es/full/minify/libraries/terser 244634825 ns/iter (± 642604) 315463966 ns/iter (± 4604694) 0.78
es/full/minify/libraries/three 432561203 ns/iter (± 882985) 557124846 ns/iter (± 9562440) 0.78
es/full/minify/libraries/typescript 2995232414 ns/iter (± 9159317) 3730452867 ns/iter (± 51405684) 0.80
es/full/minify/libraries/victory 629338607 ns/iter (± 14512555) 843763923 ns/iter (± 19319781) 0.75
es/full/minify/libraries/vue 135562637 ns/iter (± 202674) 162467735 ns/iter (± 477905) 0.83
es/full/codegen/es3 35929 ns/iter (± 107) 41598 ns/iter (± 115) 0.86
es/full/codegen/es5 36139 ns/iter (± 130) 41655 ns/iter (± 52) 0.87
es/full/codegen/es2015 36064 ns/iter (± 85) 41659 ns/iter (± 64) 0.87
es/full/codegen/es2016 36017 ns/iter (± 99) 41577 ns/iter (± 946) 0.87
es/full/codegen/es2017 35977 ns/iter (± 90) 41558 ns/iter (± 79) 0.87
es/full/codegen/es2018 36003 ns/iter (± 68) 41648 ns/iter (± 48) 0.86
es/full/codegen/es2019 36055 ns/iter (± 67) 41636 ns/iter (± 50) 0.87
es/full/codegen/es2020 36188 ns/iter (± 113) 41629 ns/iter (± 67) 0.87
es/full/all/es3 179703631 ns/iter (± 863706) 206801136 ns/iter (± 2893861) 0.87
es/full/all/es5 169668890 ns/iter (± 380717) 196358820 ns/iter (± 3407312) 0.86
es/full/all/es2015 126468094 ns/iter (± 332183) 153024974 ns/iter (± 2695501) 0.83
es/full/all/es2016 125170792 ns/iter (± 424045) 152770726 ns/iter (± 2649310) 0.82
es/full/all/es2017 124393777 ns/iter (± 598085) 152180781 ns/iter (± 1751738) 0.82
es/full/all/es2018 122314795 ns/iter (± 536454) 151399472 ns/iter (± 2130031) 0.81
es/full/all/es2019 122284908 ns/iter (± 654134) 149395573 ns/iter (± 2854165) 0.82
es/full/all/es2020 117511627 ns/iter (± 664901) 147864734 ns/iter (± 1513178) 0.79
es/full/parser 508551 ns/iter (± 5346) 601614 ns/iter (± 11404) 0.85
es/full/base/fixer 18926 ns/iter (± 190) 26390 ns/iter (± 31) 0.72
es/full/base/resolver_and_hygiene 91989 ns/iter (± 296) 105116 ns/iter (± 119) 0.88
serialization of serde 295 ns/iter (± 0) 257 ns/iter (± 0) 1.15
css/minify/libraries/bootstrap 31125476 ns/iter (± 57045) 36653039 ns/iter (± 276496) 0.85
css/visitor/compare/clone 1960866 ns/iter (± 24862) 2369579 ns/iter (± 5340) 0.83
css/visitor/compare/visit_mut_span 2061138 ns/iter (± 10418) 2559930 ns/iter (± 21380) 0.81
css/visitor/compare/visit_mut_span_panic 2121527 ns/iter (± 11386) 2595984 ns/iter (± 4567) 0.82
css/visitor/compare/fold_span 2843244 ns/iter (± 14802) 3348778 ns/iter (± 12694) 0.85
css/visitor/compare/fold_span_panic 3069907 ns/iter (± 11526) 3501459 ns/iter (± 11998) 0.88
css/lexer/bootstrap_5_1_3 5015191 ns/iter (± 6865) 5582659 ns/iter (± 3801) 0.90
css/lexer/foundation_6_7_4 4017363 ns/iter (± 2923) 4714790 ns/iter (± 2540) 0.85
css/lexer/tailwind_3_1_1 982296 ns/iter (± 738) 894831 ns/iter (± 7257) 1.10
css/parser/bootstrap_5_1_3 20327362 ns/iter (± 47147) 24177696 ns/iter (± 66526) 0.84
css/parser/foundation_6_7_4 16385733 ns/iter (± 14844) 19188926 ns/iter (± 40928) 0.85
css/parser/tailwind_3_1_1 3172898 ns/iter (± 4131) 3683014 ns/iter (± 4439) 0.86
es/codegen/colors 736637 ns/iter (± 400810) 730980 ns/iter (± 396538) 1.01
es/codegen/large 2968763 ns/iter (± 1550391) 3075730 ns/iter (± 1600886) 0.97
es/codegen/with-parser/colors 49552 ns/iter (± 170) 58461 ns/iter (± 470) 0.85
es/codegen/with-parser/large 531070 ns/iter (± 1455) 584522 ns/iter (± 1539) 0.91
es/minify/libraries/antd 1296957002 ns/iter (± 13830003) 1730974050 ns/iter (± 18944602) 0.75
es/minify/libraries/d3 278561816 ns/iter (± 290913) 346211369 ns/iter (± 2013140) 0.80
es/minify/libraries/echarts 1022901087 ns/iter (± 3251581) 1350339742 ns/iter (± 19034162) 0.76
es/minify/libraries/jquery 83801823 ns/iter (± 127013) 98312719 ns/iter (± 873061) 0.85
es/minify/libraries/lodash 102693525 ns/iter (± 180973) 122425453 ns/iter (± 790221) 0.84
es/minify/libraries/moment 49544610 ns/iter (± 85585) 57450508 ns/iter (± 595941) 0.86
es/minify/libraries/react 18045415 ns/iter (± 66305) 20902398 ns/iter (± 78173) 0.86
es/minify/libraries/terser 212199799 ns/iter (± 368110) 269225698 ns/iter (± 3047675) 0.79
es/minify/libraries/three 364799698 ns/iter (± 905205) 463055830 ns/iter (± 3961138) 0.79
es/minify/libraries/typescript 2556049742 ns/iter (± 8447709) 3227353129 ns/iter (± 38307744) 0.79
es/minify/libraries/victory 532700473 ns/iter (± 2115023) 714809029 ns/iter (± 18350374) 0.75
es/minify/libraries/vue 124102630 ns/iter (± 223481) 144844542 ns/iter (± 656438) 0.86
es/visitor/compare/clone 2072388 ns/iter (± 6405) 2422578 ns/iter (± 20963) 0.86
es/visitor/compare/visit_mut_span 2399229 ns/iter (± 4282) 2797350 ns/iter (± 14475) 0.86
es/visitor/compare/visit_mut_span_panic 2438632 ns/iter (± 3866) 2866757 ns/iter (± 9120) 0.85
es/visitor/compare/fold_span 3478431 ns/iter (± 4147) 3945107 ns/iter (± 15182) 0.88
es/visitor/compare/fold_span_panic 3617450 ns/iter (± 6555) 4066668 ns/iter (± 12901) 0.89
es/lexer/colors 13117 ns/iter (± 1119) 14980 ns/iter (± 18) 0.88
es/lexer/angular 6282318 ns/iter (± 16834) 7132425 ns/iter (± 5956) 0.88
es/lexer/backbone 806559 ns/iter (± 2636) 865101 ns/iter (± 392) 0.93
es/lexer/jquery 4557972 ns/iter (± 2941) 4845577 ns/iter (± 1611) 0.94
es/lexer/jquery mobile 6976123 ns/iter (± 3022) 7530181 ns/iter (± 9901) 0.93
es/lexer/mootools 3591239 ns/iter (± 3204) 3782236 ns/iter (± 3318) 0.95
es/lexer/underscore 669738 ns/iter (± 2144) 713535 ns/iter (± 575) 0.94
es/lexer/three 21262699 ns/iter (± 27333) 22613818 ns/iter (± 32566) 0.94
es/lexer/yui 4070744 ns/iter (± 1337) 4353057 ns/iter (± 2704) 0.94
es/parser/colors 29110 ns/iter (± 61) 33190 ns/iter (± 76) 0.88
es/parser/angular 14440785 ns/iter (± 72100) 17230428 ns/iter (± 166014) 0.84
es/parser/backbone 2150646 ns/iter (± 7112) 2442057 ns/iter (± 13514) 0.88
es/parser/jquery 11689291 ns/iter (± 37814) 13332193 ns/iter (± 108461) 0.88
es/parser/jquery mobile 17788967 ns/iter (± 45948) 21959375 ns/iter (± 293958) 0.81
es/parser/mootools 8973169 ns/iter (± 13389) 10155489 ns/iter (± 55766) 0.88
es/parser/underscore 1864676 ns/iter (± 8983) 2082965 ns/iter (± 10106) 0.90
es/parser/three 49518983 ns/iter (± 73570) 61645580 ns/iter (± 474915) 0.80
es/parser/yui 9009570 ns/iter (± 29756) 10321382 ns/iter (± 143439) 0.87
es/preset-env/usage/builtin_type 145916 ns/iter (± 32999) 152684 ns/iter (± 33528) 0.96
es/preset-env/usage/property 19478 ns/iter (± 54) 29283 ns/iter (± 85) 0.67
es/resolver/typescript 93717358 ns/iter (± 463320) 129678545 ns/iter (± 1580229) 0.72
es/fixer/typescript 64712810 ns/iter (± 419432) 86906773 ns/iter (± 565633) 0.74
es/hygiene/typescript 141398187 ns/iter (± 540594) 211031261 ns/iter (± 2163799) 0.67
es/resolver_with_hygiene/typescript 302258554 ns/iter (± 1542444) 431166655 ns/iter (± 2647033) 0.70
es/visitor/base-perf/module_clone 61358 ns/iter (± 198) 86229 ns/iter (± 379) 0.71
es/visitor/base-perf/fold_empty 65007 ns/iter (± 252) 95264 ns/iter (± 320) 0.68
es/visitor/base-perf/fold_noop_impl_all 65212 ns/iter (± 327) 95625 ns/iter (± 534) 0.68
es/visitor/base-perf/fold_noop_impl_vec 65307 ns/iter (± 195) 96142 ns/iter (± 494) 0.68
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 60 ns/iter (± 0) 0.93
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 45 ns/iter (± 0) 0.91
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 117 ns/iter (± 0) 0.92
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 81 ns/iter (± 0) 0.95
es/visitor/base-perf/visit_empty 0 ns/iter (± 0)
es/visitor/base-perf/visit_contains_this 2608 ns/iter (± 10) 3476 ns/iter (± 59) 0.75
es/base/parallel/resolver/typescript 4298308214 ns/iter (± 295157183) 7857945466 ns/iter (± 488061078) 0.55
es/base/parallel/hygiene/typescript 1585120820 ns/iter (± 11653946) 2398077677 ns/iter (± 15123815) 0.66
misc/visitors/time-complexity/time 5 109 ns/iter (± 0) 104 ns/iter (± 0) 1.05
misc/visitors/time-complexity/time 10 268 ns/iter (± 0) 359 ns/iter (± 1) 0.75
misc/visitors/time-complexity/time 15 519 ns/iter (± 7) 690 ns/iter (± 1) 0.75
misc/visitors/time-complexity/time 20 931 ns/iter (± 2) 1255 ns/iter (± 11) 0.74
misc/visitors/time-complexity/time 40 3783 ns/iter (± 12) 6280 ns/iter (± 6) 0.60
misc/visitors/time-complexity/time 60 7829 ns/iter (± 33) 15795 ns/iter (± 13) 0.50
es/full-target/es2016 240215 ns/iter (± 672) 271441 ns/iter (± 500) 0.88
es/full-target/es2017 224149 ns/iter (± 652) 260810 ns/iter (± 412) 0.86
es/full-target/es2018 214309 ns/iter (± 836) 250280 ns/iter (± 330) 0.86
es2020_nullish_coalescing 71181 ns/iter (± 436) 99324 ns/iter (± 285) 0.72
es2020_optional_chaining 83871 ns/iter (± 173) 89200 ns/iter (± 173) 0.94
es2022_class_properties 121512 ns/iter (± 427) 157041 ns/iter (± 309) 0.77
es2018_object_rest_spread 76421 ns/iter (± 172) 100803 ns/iter (± 173) 0.76
es2019_optional_catch_binding 64142 ns/iter (± 165) 89137 ns/iter (± 243) 0.72
es2017_async_to_generator 64772 ns/iter (± 232) 89959 ns/iter (± 515) 0.72
es2016_exponentiation 70498 ns/iter (± 155) 96712 ns/iter (± 208) 0.73
es2015_arrow 72887 ns/iter (± 169) 99110 ns/iter (± 213) 0.74
es2015_block_scoped_fn 69416 ns/iter (± 154) 97523 ns/iter (± 314) 0.71
es2015_block_scoping 131831 ns/iter (± 473) 184734 ns/iter (± 228) 0.71

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

Please sign in to comment.