Skip to content

Commit

Permalink
feat(es/compat): Support export class from stage 3 decorator pass (#…
Browse files Browse the repository at this point in the history
…7363)

**Related issue:**

 - Closes #7358.
  • Loading branch information
kdy1 committed May 8, 2023
1 parent aef5ac4 commit 9c052db
Show file tree
Hide file tree
Showing 7 changed files with 381 additions and 233 deletions.
10 changes: 10 additions & 0 deletions crates/swc_ecma_ast/src/decl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,16 @@ pub struct ClassDecl {
pub class: Box<Class>,
}

impl Take for ClassDecl {
fn dummy() -> Self {
ClassDecl {
ident: Take::dummy(),
declare: Default::default(),
class: Take::dummy(),
}
}
}

#[ast_node("VariableDeclaration")]
#[derive(Eq, Hash, EqIgnoreSpan)]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
Expand Down
523 changes: 290 additions & 233 deletions crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions crates/swc_ecma_transforms_proposal/tests/decorators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ fn syntax_default() -> Syntax {
decorators: true,
auto_accessors: true,
allow_super_outside_method: true,
decorators_before_export: true,
..Default::default()
})
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
@decorate()
export class Foo {

@decorate()
get name() {
return "hello"
}

@decorate()
sayHi() {
return "hello"
}
}

function decorate() {
return function (target, { kind }) {
console.log(target, kind)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"plugins": [["proposal-decorators", { "version": "2022-03" }]]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
var _dec, _initClass, _dec1, _dec2, _initProto;
let _Foo;
_dec = decorate(), _dec1 = decorate(), _dec2 = decorate();
class Foo {
static{
({ e: [_initProto] , c: [_Foo, _initClass] } = _apply_decs_2203_r(this, [
[
_dec1,
3,
"name"
],
[
_dec2,
2,
"sayHi"
]
], [
_dec
]));
}
constructor(){
_initProto(this);
}
get name() {
return "hello";
}
sayHi() {
return "hello";
}
static{
_initClass();
}
}
function decorate() {
return function(target, { kind }) {
console.log(target, kind);
};
}
export { _Foo as Foo };
19 changes: 19 additions & 0 deletions crates/swc_ecma_utils/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2949,6 +2949,25 @@ impl VisitMut for IdentRenamer<'_> {
node.span.ctxt = new.1;
}
}

fn visit_mut_export_named_specifier(&mut self, node: &mut ExportNamedSpecifier) {
if node.exported.is_some() {
node.orig.visit_mut_children_with(self);
return;
}

match &mut node.orig {
ModuleExportName::Ident(orig) => {
if let Some(new) = self.map.get(&orig.to_id()) {
node.exported = Some(ModuleExportName::Ident(orig.clone()));

orig.sym = new.0.clone();
orig.span.ctxt = new.1;
}
}
ModuleExportName::Str(_) => {}
}
}
}

#[cfg(test)]
Expand Down

1 comment on commit 9c052db

@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: 9c052db Previous: d2c1f45 Ratio
es/full/bugs-1 292138 ns/iter (± 5320) 293488 ns/iter (± 6517) 1.00
es/full/minify/libraries/antd 1487600589 ns/iter (± 8819370) 1509891550 ns/iter (± 17803219) 0.99
es/full/minify/libraries/d3 282783411 ns/iter (± 6211756) 279251046 ns/iter (± 3756153) 1.01
es/full/minify/libraries/echarts 1129291433 ns/iter (± 17037683) 1141226246 ns/iter (± 15447131) 0.99
es/full/minify/libraries/jquery 86537568 ns/iter (± 699546) 86080021 ns/iter (± 555337) 1.01
es/full/minify/libraries/lodash 101673950 ns/iter (± 601771) 101391786 ns/iter (± 613155) 1.00
es/full/minify/libraries/moment 50121287 ns/iter (± 323937) 50464982 ns/iter (± 568992) 0.99
es/full/minify/libraries/react 18468377 ns/iter (± 91420) 18702199 ns/iter (± 151215) 0.99
es/full/minify/libraries/terser 229608022 ns/iter (± 2350062) 228976672 ns/iter (± 1999420) 1.00
es/full/minify/libraries/three 396746771 ns/iter (± 4577726) 398406323 ns/iter (± 1790062) 1.00
es/full/minify/libraries/typescript 2890800111 ns/iter (± 10533075) 2946606912 ns/iter (± 30976281) 0.98
es/full/minify/libraries/victory 601506735 ns/iter (± 10093315) 613866466 ns/iter (± 10807422) 0.98
es/full/minify/libraries/vue 123192088 ns/iter (± 1048097) 123275617 ns/iter (± 1518958) 1.00
es/full/codegen/es3 28227 ns/iter (± 284) 28131 ns/iter (± 383) 1.00
es/full/codegen/es5 28362 ns/iter (± 151) 28346 ns/iter (± 179) 1.00
es/full/codegen/es2015 27803 ns/iter (± 213) 27896 ns/iter (± 225) 1.00
es/full/codegen/es2016 27942 ns/iter (± 401) 27902 ns/iter (± 253) 1.00
es/full/codegen/es2017 27808 ns/iter (± 203) 27773 ns/iter (± 187) 1.00
es/full/codegen/es2018 27856 ns/iter (± 401) 27787 ns/iter (± 215) 1.00
es/full/codegen/es2019 27731 ns/iter (± 240) 27752 ns/iter (± 153) 1.00
es/full/codegen/es2020 28023 ns/iter (± 250) 27763 ns/iter (± 132) 1.01
es/full/all/es3 177700842 ns/iter (± 2765773) 180480928 ns/iter (± 3822481) 0.98
es/full/all/es5 169216797 ns/iter (± 3008832) 172788048 ns/iter (± 2993932) 0.98
es/full/all/es2015 129886041 ns/iter (± 1946725) 132556311 ns/iter (± 2039924) 0.98
es/full/all/es2016 127778652 ns/iter (± 1481503) 131090293 ns/iter (± 2244245) 0.97
es/full/all/es2017 126799104 ns/iter (± 1729837) 129737117 ns/iter (± 1404643) 0.98
es/full/all/es2018 122547910 ns/iter (± 1706349) 125306663 ns/iter (± 1553731) 0.98
es/full/all/es2019 120937285 ns/iter (± 1851228) 123527994 ns/iter (± 1097675) 0.98
es/full/all/es2020 114782165 ns/iter (± 965583) 116037025 ns/iter (± 799840) 0.99
es/full/parser 493253 ns/iter (± 6172) 501790 ns/iter (± 8451) 0.98
es/full/base/fixer 21853 ns/iter (± 198) 22617 ns/iter (± 63) 0.97
es/full/base/resolver_and_hygiene 83144 ns/iter (± 540) 84127 ns/iter (± 607) 0.99
serialization of serde 116 ns/iter (± 0) 118 ns/iter (± 1) 0.98
css/minify/libraries/bootstrap 25926829 ns/iter (± 150123) 26117201 ns/iter (± 220374) 0.99
css/visitor/compare/clone 2010848 ns/iter (± 15659) 2039921 ns/iter (± 17511) 0.99
css/visitor/compare/visit_mut_span 2220212 ns/iter (± 13566) 2313554 ns/iter (± 8197) 0.96
css/visitor/compare/visit_mut_span_panic 2264169 ns/iter (± 8423) 2381283 ns/iter (± 12624) 0.95
css/visitor/compare/fold_span 2943933 ns/iter (± 34262) 3064403 ns/iter (± 12976) 0.96
css/visitor/compare/fold_span_panic 3085925 ns/iter (± 13213) 3229696 ns/iter (± 47575) 0.96
css/lexer/bootstrap_5_1_3 4986642 ns/iter (± 55684) 5064403 ns/iter (± 37584) 0.98
css/lexer/foundation_6_7_4 4243765 ns/iter (± 37380) 4290440 ns/iter (± 28375) 0.99
css/lexer/tailwind_3_1_1 808967 ns/iter (± 2960) 818677 ns/iter (± 7463) 0.99
css/parser/bootstrap_5_1_3 20843155 ns/iter (± 196234) 20789147 ns/iter (± 109370) 1.00
css/parser/foundation_6_7_4 16180904 ns/iter (± 311246) 16400553 ns/iter (± 92845) 0.99
css/parser/tailwind_3_1_1 3125284 ns/iter (± 19675) 3173658 ns/iter (± 36999) 0.98
es/codegen/colors 321646 ns/iter (± 183429) 324009 ns/iter (± 184053) 0.99
es/codegen/large 1201996 ns/iter (± 646551) 1196628 ns/iter (± 619800) 1.00
es/codegen/with-parser/colors 44693 ns/iter (± 782) 45744 ns/iter (± 195) 0.98
es/codegen/with-parser/large 487816 ns/iter (± 3993) 491014 ns/iter (± 3590) 0.99
es/minify/libraries/antd 1313262709 ns/iter (± 45854747) 1292874230 ns/iter (± 16531933) 1.02
es/minify/libraries/d3 235596192 ns/iter (± 2222422) 240719303 ns/iter (± 4462374) 0.98
es/minify/libraries/echarts 963316876 ns/iter (± 9028240) 966913197 ns/iter (± 17918874) 1.00
es/minify/libraries/jquery 75372684 ns/iter (± 430274) 75799814 ns/iter (± 519881) 0.99
es/minify/libraries/lodash 91297852 ns/iter (± 308601) 91320508 ns/iter (± 446869) 1.00
es/minify/libraries/moment 43945970 ns/iter (± 307456) 43740039 ns/iter (± 373407) 1.00
es/minify/libraries/react 16591960 ns/iter (± 104385) 16759639 ns/iter (± 96854) 0.99
es/minify/libraries/terser 197149073 ns/iter (± 8276473) 194404983 ns/iter (± 1101303) 1.01
es/minify/libraries/three 326154849 ns/iter (± 2914324) 332815924 ns/iter (± 5794750) 0.98
es/minify/libraries/typescript 2456595261 ns/iter (± 12642738) 2472092541 ns/iter (± 30713583) 0.99
es/minify/libraries/victory 505019628 ns/iter (± 34792517) 524675953 ns/iter (± 7559975) 0.96
es/minify/libraries/vue 110225940 ns/iter (± 1055398) 112794867 ns/iter (± 907948) 0.98
es/visitor/compare/clone 2269724 ns/iter (± 29517) 2262188 ns/iter (± 35721) 1.00
es/visitor/compare/visit_mut_span 2610415 ns/iter (± 7695) 2587783 ns/iter (± 15339) 1.01
es/visitor/compare/visit_mut_span_panic 2654525 ns/iter (± 21396) 2630059 ns/iter (± 16727) 1.01
es/visitor/compare/fold_span 3690067 ns/iter (± 33242) 3660440 ns/iter (± 31674) 1.01
es/visitor/compare/fold_span_panic 3807376 ns/iter (± 16500) 3764488 ns/iter (± 27622) 1.01
es/lexer/colors 12722 ns/iter (± 95) 12937 ns/iter (± 182) 0.98
es/lexer/angular 6207648 ns/iter (± 72339) 6290898 ns/iter (± 52735) 0.99
es/lexer/backbone 754453 ns/iter (± 3436) 752796 ns/iter (± 7502) 1.00
es/lexer/jquery 4226885 ns/iter (± 23786) 4204819 ns/iter (± 29991) 1.01
es/lexer/jquery mobile 6582698 ns/iter (± 49144) 6640142 ns/iter (± 55666) 0.99
es/lexer/mootools 3294251 ns/iter (± 17088) 3323534 ns/iter (± 24527) 0.99
es/lexer/underscore 626271 ns/iter (± 6712) 620577 ns/iter (± 3791) 1.01
es/lexer/three 19938070 ns/iter (± 86761) 20072818 ns/iter (± 146987) 0.99
es/lexer/yui 3696571 ns/iter (± 27173) 3851219 ns/iter (± 50086) 0.96
es/parser/colors 28118 ns/iter (± 297) 28789 ns/iter (± 87) 0.98
es/parser/angular 14206134 ns/iter (± 291922) 14841104 ns/iter (± 84908) 0.96
es/parser/backbone 2071151 ns/iter (± 20659) 2174306 ns/iter (± 14500) 0.95
es/parser/jquery 11178149 ns/iter (± 90715) 11749116 ns/iter (± 137767) 0.95
es/parser/jquery mobile 17375195 ns/iter (± 113862) 18240720 ns/iter (± 67291) 0.95
es/parser/mootools 8559288 ns/iter (± 107506) 8943277 ns/iter (± 21165) 0.96
es/parser/underscore 1758261 ns/iter (± 15634) 1821671 ns/iter (± 11270) 0.97
es/parser/three 48045378 ns/iter (± 612745) 51752512 ns/iter (± 451236) 0.93
es/parser/yui 8687719 ns/iter (± 83144) 8870722 ns/iter (± 36536) 0.98
es/preset-env/usage/builtin_type 142322 ns/iter (± 36207) 135574 ns/iter (± 35484) 1.05
es/preset-env/usage/property 19317 ns/iter (± 164) 19305 ns/iter (± 173) 1.00
es/resolver/typescript 113136557 ns/iter (± 1371325) 117219213 ns/iter (± 3957621) 0.97
es/fixer/typescript 81686834 ns/iter (± 1089835) 85008463 ns/iter (± 904473) 0.96
es/hygiene/typescript 175996903 ns/iter (± 1885922) 185758651 ns/iter (± 1616357) 0.95
es/resolver_with_hygiene/typescript 315141437 ns/iter (± 2355943) 318844802 ns/iter (± 7017814) 0.99
es/visitor/base-perf/module_clone 77986 ns/iter (± 635) 79283 ns/iter (± 893) 0.98
es/visitor/base-perf/fold_empty 88348 ns/iter (± 975) 87394 ns/iter (± 680) 1.01
es/visitor/base-perf/fold_noop_impl_all 88573 ns/iter (± 1014) 87912 ns/iter (± 624) 1.01
es/visitor/base-perf/fold_noop_impl_vec 87896 ns/iter (± 555) 88385 ns/iter (± 845) 0.99
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 55 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 97 ns/iter (± 0) 103 ns/iter (± 0) 0.94
es/visitor/base-perf/boxing_unboxed 75 ns/iter (± 0) 76 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_contains_this 3391 ns/iter (± 95) 3413 ns/iter (± 68) 0.99
es/base/parallel/resolver/typescript 6441659986 ns/iter (± 544366389) 5708546868 ns/iter (± 602061388) 1.13
es/base/parallel/hygiene/typescript 2157133866 ns/iter (± 15560375) 2153727458 ns/iter (± 19183181) 1.00
misc/visitors/time-complexity/time 5 93 ns/iter (± 0) 103 ns/iter (± 1) 0.90
misc/visitors/time-complexity/time 10 319 ns/iter (± 3) 309 ns/iter (± 3) 1.03
misc/visitors/time-complexity/time 15 615 ns/iter (± 16) 647 ns/iter (± 14) 0.95
misc/visitors/time-complexity/time 20 1155 ns/iter (± 15) 1166 ns/iter (± 10) 0.99
misc/visitors/time-complexity/time 40 5968 ns/iter (± 39) 6432 ns/iter (± 61) 0.93
misc/visitors/time-complexity/time 60 14965 ns/iter (± 96) 16432 ns/iter (± 93) 0.91
es/full-target/es2016 251576 ns/iter (± 1585) 250116 ns/iter (± 2668) 1.01
es/full-target/es2017 242312 ns/iter (± 1710) 240477 ns/iter (± 2223) 1.01
es/full-target/es2018 227743 ns/iter (± 2662) 230488 ns/iter (± 2853) 0.99
es2020_nullish_coalescing 91841 ns/iter (± 695) 91970 ns/iter (± 401) 1.00
es2020_optional_chaining 123606 ns/iter (± 2231) 123043 ns/iter (± 486) 1.00
es2022_class_properties 142870 ns/iter (± 979) 148542 ns/iter (± 950) 0.96
es2018_object_rest_spread 92286 ns/iter (± 590) 94057 ns/iter (± 632) 0.98
es2019_optional_catch_binding 81620 ns/iter (± 418) 83381 ns/iter (± 1235) 0.98
es2017_async_to_generator 82612 ns/iter (± 1017) 82692 ns/iter (± 533) 1.00
es2016_exponentiation 87090 ns/iter (± 747) 86996 ns/iter (± 466) 1.00
es2015_arrow 90654 ns/iter (± 598) 92017 ns/iter (± 657) 0.99
es2015_block_scoped_fn 88571 ns/iter (± 751) 88689 ns/iter (± 675) 1.00
es2015_block_scoping 163384 ns/iter (± 1019) 170604 ns/iter (± 465) 0.96

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

Please sign in to comment.