Skip to content

Commit

Permalink
feat(es/compat): Implement auto accessors fully (#7370)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7193.
  • Loading branch information
kdy1 committed May 15, 2023
1 parent a2577ad commit cad18fa
Show file tree
Hide file tree
Showing 64 changed files with 1,499 additions and 766 deletions.
481 changes: 317 additions & 164 deletions crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs

Large diffs are not rendered by default.

7 changes: 0 additions & 7 deletions crates/swc_ecma_transforms_proposal/tests/decorators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ fn exec(input: PathBuf) {
fn exec_inner(input: PathBuf) {
let code = std::fs::read_to_string(&input).unwrap();

if code.contains("accessor ") {
return;
}

swc_ecma_transforms_testing::exec_tr(
"decorator",
Syntax::Typescript(TsConfig {
Expand All @@ -53,9 +49,6 @@ fn fixture(input: PathBuf) {

fn fixture_inner(input: PathBuf) {
let src = std::fs::read_to_string(&input).unwrap();
if src.contains("accessor ") {
return;
}

let output = input.with_file_name("output.js");

Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,64 @@
var _init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initProto;
const dec = () => { };
var _A = /*#__PURE__*/new WeakMap();
var _a = /*#__PURE__*/new WeakMap();
var _B = /*#__PURE__*/new WeakMap();
var _b = /*#__PURE__*/new WeakMap();
var _init_a, _get___a, _set___a, _init_b, _get___b, _set___b, _initProto;
const dec = ()=>{};
var ___a = /*#__PURE__*/ new WeakMap(), _a = /*#__PURE__*/ new WeakMap(), ___b = /*#__PURE__*/ new WeakMap(), _b = /*#__PURE__*/ new WeakMap();
class Foo {
constructor() {
classPrivateFieldInitSpec(this, _b, {
get: _get_b2,
set: _set_b2
});
classPrivateFieldInitSpec(this, _a, {
get: _get_a2,
set: _set_a2
});
classPrivateFieldInitSpec(this, _A, {
writable: true,
value: (_initProto(this), _init_a(this))
});
classPrivateFieldInitSpec(this, _B, {
writable: true,
value: _init_b(this, 123)
});
}
constructor(){
_class_private_field_init(this, _a, {
get: get_a,
set: set_a
});
_class_private_field_init(this, _b, {
get: get_b,
set: set_b
});
_class_private_field_init(this, ___a, {
writable: true,
value: (_initProto(this), _init_a(this))
});
_class_private_field_init(this, ___b, {
writable: true,
value: _init_b(this, 123)
});
}
}
function _set_a2(v) {
_set_a(this, v);
var __ = {
writable: true,
value: (()=>{
({ e: [_init_a, _get___a, _set___a, _init_b, _get___b, _set___b, _initProto] } = _apply_decs_2203_r(Foo, [
[
dec,
1,
"a",
function() {
return _class_private_field_get(this, ___a);
},
function(_v) {
_class_private_field_set(this, ___a, _v);
}
],
[
dec,
1,
"b",
function() {
return _class_private_field_get(this, ___b);
},
function(_v) {
_class_private_field_set(this, ___b, _v);
}
]
], []));
})()
};
function get_a() {
return _get___a(this);
}
function _get_a2() {
return _get_a(this);
function set_a(_v) {
_set___a(this, _v);
}
function _set_b2(v) {
_set_b(this, v);
function get_b() {
return _get___b(this);
}
function _get_b2() {
return _get_b(this);
function set_b(_v) {
_set___b(this, _v);
}
[_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initProto] = _applyDecs2203R(Foo, [[dec, 1, "a", function () {
return classPrivateFieldGet(this, _A);
}, function (value) {
classPrivateFieldSet(this, _A, value);
}], [dec, 1, "b", function () {
return classPrivateFieldGet(this, _B);
}, function (value) {
classPrivateFieldSet(this, _B, value);
}]], []).e;
Original file line number Diff line number Diff line change
@@ -1,41 +1,61 @@
var _init_a, _init_b, _computedKey, _init_computedKey, _initProto;
const dec = () => { };
const dec = ()=>{};
_computedKey = 'c';
var _A = /*#__PURE__*/new WeakMap();
var _B = /*#__PURE__*/new WeakMap();
var _C = /*#__PURE__*/new WeakMap();
var ____private_a = /*#__PURE__*/ new WeakMap(), ____private_b = /*#__PURE__*/ new WeakMap(), ____private_computedKey = /*#__PURE__*/ new WeakMap();
let _computedKey1 = _computedKey, _computedKey2 = _computedKey;
class Foo {
constructor() {
classPrivateFieldInitSpec(this, _A, {
writable: true,
value: (_initProto(this), _init_a(this))
});
classPrivateFieldInitSpec(this, _B, {
writable: true,
value: _init_b(this, 123)
});
classPrivateFieldInitSpec(this, _C, {
writable: true,
value: _init_computedKey(this, 456)
});
}
get a() {
return classPrivateFieldGet(this, _A);
}
set a(v) {
classPrivateFieldSet(this, _A, v);
}
get b() {
return classPrivateFieldGet(this, _B);
}
set b(v) {
classPrivateFieldSet(this, _B, v);
}
get [_computedKey]() {
return classPrivateFieldGet(this, _C);
}
set [_computedKey](v) {
classPrivateFieldSet(this, _C, v);
}
get a() {
return _class_private_field_get(this, ____private_a);
}
set a(_v) {
_class_private_field_set(this, ____private_a, _v);
}
get b() {
return _class_private_field_get(this, ____private_b);
}
set b(_v) {
_class_private_field_set(this, ____private_b, _v);
}
get [_computedKey1]() {
return _class_private_field_get(this, ____private_computedKey);
}
set [_computedKey2](_v) {
_class_private_field_set(this, ____private_computedKey, _v);
}
constructor(){
_class_private_field_init(this, ____private_a, {
writable: true,
value: (_initProto(this), _init_a(this))
});
_class_private_field_init(this, ____private_b, {
writable: true,
value: _init_b(this, 123)
});
_class_private_field_init(this, ____private_computedKey, {
writable: true,
value: _init_computedKey(this, 456)
});
}
}
[_init_a, _init_b, _init_computedKey, _initProto] = _applyDecs2203R(Foo, [[dec, 1, "a"], [dec, 1, "b"], [dec, 1, _computedKey]], []).e;
var __ = {
writable: true,
value: (()=>{
({ e: [_init_a, _init_b, _init_computedKey, _initProto] } = _apply_decs_2203_r(Foo, [
[
dec,
1,
"a"
],
[
dec,
1,
"b"
],
[
dec,
1,
_computedKey
]
], []));
})()
};
Original file line number Diff line number Diff line change
@@ -1,48 +1,62 @@
var _init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initStatic;
const dec = () => { };
var _a = /*#__PURE__*/new WeakMap();
var _b = /*#__PURE__*/new WeakMap();
var _init_a, _get___a, _set___a, _init_b, _get___b, _set___b, _initStatic;
const dec = ()=>{};
class Foo {
constructor() {
classPrivateFieldInitSpec(this, _b, {
get: _get_b2,
set: _set_b2
});
classPrivateFieldInitSpec(this, _a, {
get: _get_a2,
set: _set_a2
});
}
}
function _set_a2(v) {
_set_a(this, v);
var _a = {
get: get_a,
set: set_a
};
var _b = {
get: get_b,
set: set_b
};
var __ = {
writable: true,
value: (()=>{
({ e: [_init_a, _get___a, _set___a, _init_b, _get___b, _set___b, _initStatic] } = _apply_decs_2203_r(Foo, [
[
dec,
6,
"a",
function() {
return _class_static_private_field_spec_get(this, Foo, ___a);
},
function(_v) {
_class_static_private_field_spec_set(this, Foo, ___a, _v);
}
],
[
dec,
6,
"b",
function() {
return _class_static_private_field_spec_get(this, Foo, ___b);
},
function(_v) {
_class_static_private_field_spec_set(this, Foo, ___b, _v);
}
]
], []));
_initStatic(Foo);
})()
};
var ___a = {
writable: true,
value: _init_a(Foo)
};
var ___b = {
writable: true,
value: _init_b(Foo, 123)
};
function get_a() {
return _get___a(this);
}
function _get_a2() {
return _get_a(this);
function set_a(_v) {
_set___a(this, _v);
}
function _set_b2(v) {
_set_b(this, v);
function get_b() {
return _get___b(this);
}
function _get_b2() {
return _get_b(this);
function set_b(_v) {
_set___b(this, _v);
}
(() => {
[_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initStatic] = _applyDecs2203R(Foo, [[dec, 6, "a", function () {
return classStaticPrivateFieldSpecGet(this, Foo, _A);
}, function (value) {
classStaticPrivateFieldSpecSet(this, Foo, _A, value);
}], [dec, 6, "b", function () {
return classStaticPrivateFieldSpecGet(this, Foo, _B);
}, function (value) {
classStaticPrivateFieldSpecSet(this, Foo, _B, value);
}]], []).e;
_initStatic(Foo);
})();
var _A = {
writable: true,
value: _init_a(Foo)
};
var _B = {
writable: true,
value: _init_b(Foo, 123)
};
Loading

1 comment on commit cad18fa

@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: cad18fa Previous: e3868a7 Ratio
es/full/bugs-1 304392 ns/iter (± 10984) 334591 ns/iter (± 17183) 0.91
es/full/minify/libraries/antd 1676505868 ns/iter (± 25119076) 1796472675 ns/iter (± 44229005) 0.93
es/full/minify/libraries/d3 315208200 ns/iter (± 5180031) 360396903 ns/iter (± 63893785) 0.87
es/full/minify/libraries/echarts 1268978308 ns/iter (± 10157127) 1393991658 ns/iter (± 56279718) 0.91
es/full/minify/libraries/jquery 92848319 ns/iter (± 813778) 97233925 ns/iter (± 2698728) 0.95
es/full/minify/libraries/lodash 107466006 ns/iter (± 1243746) 116243600 ns/iter (± 4387172) 0.92
es/full/minify/libraries/moment 53626932 ns/iter (± 275866) 57588736 ns/iter (± 2205534) 0.93
es/full/minify/libraries/react 19495309 ns/iter (± 160935) 20813666 ns/iter (± 909742) 0.94
es/full/minify/libraries/terser 250549052 ns/iter (± 2849593) 271668160 ns/iter (± 7303805) 0.92
es/full/minify/libraries/three 468960328 ns/iter (± 11320174) 496588592 ns/iter (± 19883195) 0.94
es/full/minify/libraries/typescript 3146500634 ns/iter (± 21885989) 3270055489 ns/iter (± 96338362) 0.96
es/full/minify/libraries/victory 708322675 ns/iter (± 15186115) 652220988 ns/iter (± 15737159) 1.09
es/full/minify/libraries/vue 134103914 ns/iter (± 1015625) 129810684 ns/iter (± 1020487) 1.03
es/full/codegen/es3 33780 ns/iter (± 105) 33580 ns/iter (± 271) 1.01
es/full/codegen/es5 33920 ns/iter (± 68) 33740 ns/iter (± 56) 1.01
es/full/codegen/es2015 33867 ns/iter (± 63) 33374 ns/iter (± 286) 1.01
es/full/codegen/es2016 33855 ns/iter (± 47) 33387 ns/iter (± 331) 1.01
es/full/codegen/es2017 33906 ns/iter (± 52) 33434 ns/iter (± 148) 1.01
es/full/codegen/es2018 33906 ns/iter (± 81) 33585 ns/iter (± 105) 1.01
es/full/codegen/es2019 33827 ns/iter (± 96) 33640 ns/iter (± 61) 1.01
es/full/codegen/es2020 33794 ns/iter (± 368) 33723 ns/iter (± 54) 1.00
es/full/all/es3 184333000 ns/iter (± 3246168) 184078337 ns/iter (± 3215581) 1.00
es/full/all/es5 178810255 ns/iter (± 3376832) 184666443 ns/iter (± 4061365) 0.97
es/full/all/es2015 139519704 ns/iter (± 2903594) 140165541 ns/iter (± 3208166) 1.00
es/full/all/es2016 136987240 ns/iter (± 1676126) 139954343 ns/iter (± 2873093) 0.98
es/full/all/es2017 132956349 ns/iter (± 2401595) 141265153 ns/iter (± 4041664) 0.94
es/full/all/es2018 130416593 ns/iter (± 2272206) 134994865 ns/iter (± 4667193) 0.97
es/full/all/es2019 129184745 ns/iter (± 1747641) 133975948 ns/iter (± 4773897) 0.96
es/full/all/es2020 118431299 ns/iter (± 1670536) 124086556 ns/iter (± 3199324) 0.95
es/full/parser 508813 ns/iter (± 8509) 519405 ns/iter (± 13745) 0.98
es/full/base/fixer 22818 ns/iter (± 83) 22895 ns/iter (± 30) 1.00
es/full/base/resolver_and_hygiene 86186 ns/iter (± 123) 87699 ns/iter (± 260) 0.98
serialization of serde 121 ns/iter (± 0) 123 ns/iter (± 0) 0.98
css/minify/libraries/bootstrap 27533558 ns/iter (± 105366) 28013725 ns/iter (± 862772) 0.98
css/visitor/compare/clone 2149047 ns/iter (± 5997) 2111557 ns/iter (± 19483) 1.02
css/visitor/compare/visit_mut_span 2334896 ns/iter (± 6946) 2327915 ns/iter (± 17982) 1.00
css/visitor/compare/visit_mut_span_panic 2398876 ns/iter (± 6095) 2400562 ns/iter (± 33499) 1.00
css/visitor/compare/fold_span 3123687 ns/iter (± 16481) 3123488 ns/iter (± 27168) 1.00
css/visitor/compare/fold_span_panic 3273450 ns/iter (± 14305) 3292189 ns/iter (± 37509) 0.99
css/lexer/bootstrap_5_1_3 5220225 ns/iter (± 23808) 5171676 ns/iter (± 54080) 1.01
css/lexer/foundation_6_7_4 4395261 ns/iter (± 11074) 4395952 ns/iter (± 4374) 1.00
css/lexer/tailwind_3_1_1 835463 ns/iter (± 2106) 829089 ns/iter (± 7065) 1.01
css/parser/bootstrap_5_1_3 21057314 ns/iter (± 149916) 21464026 ns/iter (± 260626) 0.98
css/parser/foundation_6_7_4 16693119 ns/iter (± 81825) 17036968 ns/iter (± 459709) 0.98
css/parser/tailwind_3_1_1 3223065 ns/iter (± 5499) 3221072 ns/iter (± 10324) 1.00
es/codegen/colors 327552 ns/iter (± 184975) 317072 ns/iter (± 179147) 1.03
es/codegen/large 1112312 ns/iter (± 558802) 1276647 ns/iter (± 644395) 0.87
es/codegen/with-parser/colors 49046 ns/iter (± 178) 49460 ns/iter (± 304) 0.99
es/codegen/with-parser/large 531607 ns/iter (± 1928) 531788 ns/iter (± 2752) 1.00
es/minify/libraries/antd 1473285597 ns/iter (± 22272627) 1536906138 ns/iter (± 63235017) 0.96
es/minify/libraries/d3 263110840 ns/iter (± 3871647) 296246752 ns/iter (± 30790832) 0.89
es/minify/libraries/echarts 1124520478 ns/iter (± 25651679) 1189557562 ns/iter (± 29171915) 0.95
es/minify/libraries/jquery 83842950 ns/iter (± 1603526) 87305137 ns/iter (± 3072722) 0.96
es/minify/libraries/lodash 99631817 ns/iter (± 851420) 104845919 ns/iter (± 6417876) 0.95
es/minify/libraries/moment 47595528 ns/iter (± 581206) 48536449 ns/iter (± 2170741) 0.98
es/minify/libraries/react 17710603 ns/iter (± 215552) 18220605 ns/iter (± 569555) 0.97
es/minify/libraries/terser 221339513 ns/iter (± 4835437) 237927426 ns/iter (± 13041711) 0.93
es/minify/libraries/three 380403194 ns/iter (± 7878812) 434231915 ns/iter (± 22882586) 0.88
es/minify/libraries/typescript 2716428880 ns/iter (± 27322095) 2865479541 ns/iter (± 74507996) 0.95
es/minify/libraries/victory 589953685 ns/iter (± 13027471) 623699138 ns/iter (± 23931063) 0.95
es/minify/libraries/vue 119791364 ns/iter (± 1175509) 123834284 ns/iter (± 5038328) 0.97
es/visitor/compare/clone 2336688 ns/iter (± 19047) 2383924 ns/iter (± 9277) 0.98
es/visitor/compare/visit_mut_span 2720546 ns/iter (± 4356) 2750772 ns/iter (± 15084) 0.99
es/visitor/compare/visit_mut_span_panic 2768894 ns/iter (± 11391) 2798883 ns/iter (± 10682) 0.99
es/visitor/compare/fold_span 3820787 ns/iter (± 7332) 3784347 ns/iter (± 20874) 1.01
es/visitor/compare/fold_span_panic 3942338 ns/iter (± 16054) 3981008 ns/iter (± 26922) 0.99
es/lexer/colors 12996 ns/iter (± 48) 12946 ns/iter (± 168) 1.00
es/lexer/angular 6368000 ns/iter (± 14538) 6304404 ns/iter (± 22013) 1.01
es/lexer/backbone 784772 ns/iter (± 1114) 772872 ns/iter (± 2618) 1.02
es/lexer/jquery 4419205 ns/iter (± 3651) 4397623 ns/iter (± 45306) 1.00
es/lexer/jquery mobile 6912720 ns/iter (± 9315) 6821743 ns/iter (± 31761) 1.01
es/lexer/mootools 3470338 ns/iter (± 2237) 3421021 ns/iter (± 19630) 1.01
es/lexer/underscore 648943 ns/iter (± 908) 642626 ns/iter (± 3790) 1.01
es/lexer/three 20938750 ns/iter (± 16924) 21071385 ns/iter (± 38270) 0.99
es/lexer/yui 3869349 ns/iter (± 7133) 3875942 ns/iter (± 1832) 1.00
es/parser/colors 28657 ns/iter (± 73) 29089 ns/iter (± 88) 0.99
es/parser/angular 14876409 ns/iter (± 131776) 15376541 ns/iter (± 258094) 0.97
es/parser/backbone 2153551 ns/iter (± 11796) 2142684 ns/iter (± 11541) 1.01
es/parser/jquery 11733237 ns/iter (± 88948) 11769201 ns/iter (± 332110) 1.00
es/parser/jquery mobile 18596734 ns/iter (± 327318) 18976915 ns/iter (± 686694) 0.98
es/parser/mootools 8856553 ns/iter (± 30884) 9036508 ns/iter (± 98070) 0.98
es/parser/underscore 1819625 ns/iter (± 9251) 1836305 ns/iter (± 15644) 0.99
es/parser/three 53861043 ns/iter (± 862547) 55739255 ns/iter (± 531606) 0.97
es/parser/yui 9059696 ns/iter (± 42716) 9098974 ns/iter (± 93800) 1.00
es/preset-env/usage/builtin_type 140398 ns/iter (± 34122) 141832 ns/iter (± 34950) 0.99
es/preset-env/usage/property 20172 ns/iter (± 159) 19897 ns/iter (± 80) 1.01
es/resolver/typescript 122249862 ns/iter (± 2960412) 121764622 ns/iter (± 2216505) 1.00
es/fixer/typescript 86582820 ns/iter (± 2309090) 84379350 ns/iter (± 1272279) 1.03
es/hygiene/typescript 187281886 ns/iter (± 1438417) 193763418 ns/iter (± 4368022) 0.97
es/resolver_with_hygiene/typescript 339308290 ns/iter (± 1980154) 351512041 ns/iter (± 6802619) 0.97
es/visitor/base-perf/module_clone 81310 ns/iter (± 510) 81321 ns/iter (± 653) 1.00
es/visitor/base-perf/fold_empty 91575 ns/iter (± 300) 91495 ns/iter (± 384) 1.00
es/visitor/base-perf/fold_noop_impl_all 92022 ns/iter (± 432) 91559 ns/iter (± 550) 1.01
es/visitor/base-perf/fold_noop_impl_vec 92481 ns/iter (± 643) 90829 ns/iter (± 707) 1.02
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 41 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 102 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 77 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3510 ns/iter (± 37) 3580 ns/iter (± 61) 0.98
es/base/parallel/resolver/typescript 6367920777 ns/iter (± 665384861) 6319788732 ns/iter (± 542011680) 1.01
es/base/parallel/hygiene/typescript 2192405186 ns/iter (± 26225131) 2208146362 ns/iter (± 48109219) 0.99
misc/visitors/time-complexity/time 5 105 ns/iter (± 0) 104 ns/iter (± 0) 1.01
misc/visitors/time-complexity/time 10 321 ns/iter (± 0) 319 ns/iter (± 1) 1.01
misc/visitors/time-complexity/time 15 651 ns/iter (± 4) 643 ns/iter (± 5) 1.01
misc/visitors/time-complexity/time 20 1185 ns/iter (± 1) 1190 ns/iter (± 16) 1.00
misc/visitors/time-complexity/time 40 6286 ns/iter (± 14) 6117 ns/iter (± 39) 1.03
misc/visitors/time-complexity/time 60 15525 ns/iter (± 39) 15398 ns/iter (± 222) 1.01
es/full-target/es2016 253067 ns/iter (± 1822) 254073 ns/iter (± 578) 1.00
es/full-target/es2017 246683 ns/iter (± 1024) 245890 ns/iter (± 1243) 1.00
es/full-target/es2018 235408 ns/iter (± 521) 235495 ns/iter (± 1572) 1.00
es2020_nullish_coalescing 93821 ns/iter (± 659) 93243 ns/iter (± 846) 1.01
es2020_optional_chaining 125099 ns/iter (± 432) 124851 ns/iter (± 966) 1.00
es2022_class_properties 149451 ns/iter (± 466) 149227 ns/iter (± 723) 1.00
es2018_object_rest_spread 96624 ns/iter (± 397) 95604 ns/iter (± 633) 1.01
es2019_optional_catch_binding 86632 ns/iter (± 419) 85213 ns/iter (± 1048) 1.02
es2017_async_to_generator 86800 ns/iter (± 183) 85669 ns/iter (± 687) 1.01
es2016_exponentiation 91063 ns/iter (± 268) 89659 ns/iter (± 772) 1.02
es2015_arrow 94605 ns/iter (± 254) 94190 ns/iter (± 517) 1.00
es2015_block_scoped_fn 93204 ns/iter (± 372) 92534 ns/iter (± 795) 1.01
es2015_block_scoping 170811 ns/iter (± 510) 169413 ns/iter (± 1499) 1.01

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

Please sign in to comment.