Skip to content

Commit

Permalink
fix(es/compat): Visit arrow body from optional chaining pass (#7549)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7547.
  • Loading branch information
kdy1 committed Jun 20, 2023
1 parent fec056f commit bc6e950
Show file tree
Hide file tree
Showing 10 changed files with 82 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"use strict";const createRegisterItems=registerType=>async(a,b)=>{const a=root?.test};
"use strict";const createRegisterItems=registerType=>async(a,b)=>{var _root;const a=(_root=root)===null||_root===void 0?void 0:_root.test};
10 changes: 6 additions & 4 deletions crates/swc/tests/fixture/issues-3xxx/3381/1/output/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ var dummyTsFunction = function() {
2
];
var func1 = function(array) {
return(// Mapping array
array?.map(function(i) {
var // Mapping array
_array;
return (_array = array) === null || _array === void 0 ? void 0 : _array.map(function(i) {
return i;
}));
});
};
var func2 = function(array) {
return array?.map(function(i) {
var _array;
return (_array = array) === null || _array === void 0 ? void 0 : _array.map(function(i) {
return i;
});
};
Expand Down
10 changes: 5 additions & 5 deletions crates/swc/tests/fixture/issues-4xxx/4108/1/output/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { Transaction } from "@solana/web3.js";
import { WalletNotConnectedError } from "@solana/wallet-adapter-base";
export var getErrorForTransaction = function() {
var _ref = _async_to_generator(function(connection, txid) {
var tx, errors;
var _tx, tx, errors;
return _ts_generator(this, function(_state) {
switch(_state.label){
case 0:
Expand All @@ -26,7 +26,7 @@ export var getErrorForTransaction = function() {
case 2:
tx = _state.sent();
errors = [];
if (tx?.meta && tx.meta.logMessages) {
if (((_tx = tx) === null || _tx === void 0 ? void 0 : _tx.meta) && tx.meta.logMessages) {
tx.meta.logMessages.forEach(function(log) {
var regex = /Error: (.*)/gm;
var m;
Expand Down Expand Up @@ -366,7 +366,7 @@ export var sendTransactions = function() {
}();
export var sendTransaction = function() {
var _ref = _async_to_generator(function(connection, wallet, instructions, signers) {
var awaitConfirmation, commitment, includesFeePayer, block, transaction, _tmp, _transaction, _transaction1, _transaction2, rawTransaction, options, txid, slot, confirmation, errors;
var awaitConfirmation, commitment, includesFeePayer, block, transaction, _tmp, _transaction, _transaction1, _transaction2, rawTransaction, options, txid, slot, _confirmation, _confirmation1, confirmation, errors;
var _arguments = arguments;
return _ts_generator(this, function(_state) {
switch(_state.label){
Expand Down Expand Up @@ -454,8 +454,8 @@ export var sendTransaction = function() {
case 7:
confirmation = _state.sent();
if (!confirmation) throw new Error("Timed out awaiting confirmation on transaction");
slot = confirmation?.slot || 0;
if (!confirmation?.err) return [
slot = ((_confirmation = confirmation) === null || _confirmation === void 0 ? void 0 : _confirmation.slot) || 0;
if (!((_confirmation1 = confirmation) === null || _confirmation1 === void 0 ? void 0 : _confirmation1.err)) return [
3,
9
];
Expand Down
26 changes: 26 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7547/input/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// code below dont work
const a = {};

new Promise(r => {
r(a?.b);
}).then(a => {
return a?.b;
});

const anony = () => {
return a?.b;
}

// code below works

const b = a?.b;

function fn() {
return a?.b;
}

setTimeout(() => a?.b, 0);

const anony2 = function () { return a?.b };

(function () { return a?.b })();
32 changes: 32 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7547/output/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// code below dont work
var _a;
var a = {};
new Promise(function(r) {
var _a;
r((_a = a) === null || _a === void 0 ? void 0 : _a.b);
}).then(function(a) {
var _a;
return (_a = a) === null || _a === void 0 ? void 0 : _a.b;
});
var anony = function() {
var _a;
return (_a = a) === null || _a === void 0 ? void 0 : _a.b;
};
// code below works
var b = (_a = a) === null || _a === void 0 ? void 0 : _a.b;
function fn() {
var _a;
return (_a = a) === null || _a === void 0 ? void 0 : _a.b;
}
setTimeout(function() {
var _a;
return (_a = a) === null || _a === void 0 ? void 0 : _a.b;
}, 0);
var anony2 = function anony2() {
var _a;
return (_a = a) === null || _a === void 0 ? void 0 : _a.b;
};
(function() {
var _a;
return (_a = a) === null || _a === void 0 ? void 0 : _a.b;
})();
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,15 @@ class C extends B {
C.y2 = C.x();
})();
(()=>{
C.y3 = C?.x();
var _C;
C.y3 = (_C = C) === null || _C === void 0 ? void 0 : _C.x();
})();
(()=>{
C.y4 = C["x"]();
})();
(()=>{
C.y5 = C?.["x"]();
var _C;
C.y5 = (_C = C) === null || _C === void 0 ? void 0 : _C["x"]();
})();
(()=>{
C.z1 = _get(_get_prototype_of(C), "a", C);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class C extends B {
super(...args), this.x = 1, this.y = this.x, this.z = super.f();
}
}
C.x = void 0, C.y1 = C.x, C.y2 = C.x(), C.y3 = C?.x(), C.y4 = C.x(), C.y5 = C?.x(), C.z1 = _get(_get_prototype_of(C), "a", C), C.z2 = _get(_get_prototype_of(C), "a", C), C.z3 = _get(_get_prototype_of(C), "f", C).call(C), C.z4 = _get(_get_prototype_of(C), "f", C).call(C), C.z5 = _set(_get_prototype_of(C), "a", 0, C, !0), C.z6 = _update(_get_prototype_of(C), "a", C, !0)._ += 1, C.z7 = void _set(_get_prototype_of(C), "a", 0, C, !0), C.z8 = [_update(_get_prototype_of(C), "a", C, !0)._] = [
C.x = void 0, C.y1 = C.x, C.y2 = C.x(), C.y3 = null == C ? void 0 : C.x(), C.y4 = C.x(), C.y5 = null == C ? void 0 : C.x(), C.z1 = _get(_get_prototype_of(C), "a", C), C.z2 = _get(_get_prototype_of(C), "a", C), C.z3 = _get(_get_prototype_of(C), "f", C).call(C), C.z4 = _get(_get_prototype_of(C), "f", C).call(C), C.z5 = _set(_get_prototype_of(C), "a", 0, C, !0), C.z6 = _update(_get_prototype_of(C), "a", C, !0)._ += 1, C.z7 = void _set(_get_prototype_of(C), "a", 0, C, !0), C.z8 = [_update(_get_prototype_of(C), "a", C, !0)._] = [
0
], C.z9 = [_update(_get_prototype_of(C), "a", C, !0)._ = 0] = [
0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,15 @@ var C = /*#__PURE__*/ function(B1) {
C.y2 = C.x();
})();
(function() {
C.y3 = C?.x();
var _C;
C.y3 = (_C = C) === null || _C === void 0 ? void 0 : _C.x();
})();
(function() {
C.y4 = C["x"]();
})();
(function() {
C.y5 = C?.["x"]();
var _C;
C.y5 = (_C = C) === null || _C === void 0 ? void 0 : _C["x"]();
})();
(function() {
C.z3 = _get(_get_prototype_of(C), "f", C).call(C);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ var C = function(B1) {
}
return C;
}(B);
C.x = void 0, C.y1 = C.x, C.y2 = C.x(), C.y3 = C?.x(), C.y4 = C.x(), C.y5 = C?.x(), C.z3 = _get(_get_prototype_of(C), "f", C).call(C), C.z4 = _get(_get_prototype_of(C), "f", C).call(C);
C.x = void 0, C.y1 = C.x, C.y2 = C.x(), C.y3 = null == C ? void 0 : C.x(), C.y4 = C.x(), C.y5 = null == C ? void 0 : C.x(), C.z3 = _get(_get_prototype_of(C), "f", C).call(C), C.z4 = _get(_get_prototype_of(C), "f", C).call(C);
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ impl VisitMut for OptChaining {
}
_ => *expr = BlockStmtOrExpr::BlockStmt(stmt),
}
} else {
expr.visit_mut_children_with(self);
}
}

Expand Down

1 comment on commit bc6e950

@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: bc6e950 Previous: 8cfc4f9 Ratio
es/full/bugs-1 304868 ns/iter (± 6588) 302056 ns/iter (± 3634) 1.01
es/full/minify/libraries/antd 1536383498 ns/iter (± 10731218) 1423622831 ns/iter (± 6486602) 1.08
es/full/minify/libraries/d3 332416896 ns/iter (± 2600843) 314769745 ns/iter (± 3403182) 1.06
es/full/minify/libraries/echarts 1249039310 ns/iter (± 9711449) 1158980118 ns/iter (± 4502476) 1.08
es/full/minify/libraries/jquery 96057159 ns/iter (± 336217) 94388193 ns/iter (± 210040) 1.02
es/full/minify/libraries/lodash 113611575 ns/iter (± 342465) 111989292 ns/iter (± 255926) 1.01
es/full/minify/libraries/moment 56478523 ns/iter (± 143914) 55368530 ns/iter (± 91391) 1.02
es/full/minify/libraries/react 20146393 ns/iter (± 48220) 19984053 ns/iter (± 32882) 1.01
es/full/minify/libraries/terser 254796156 ns/iter (± 3242108) 242492183 ns/iter (± 706204) 1.05
es/full/minify/libraries/three 458235369 ns/iter (± 1416470) 426071848 ns/iter (± 2234266) 1.08
es/full/minify/libraries/typescript 3084210818 ns/iter (± 10002034) 2948448495 ns/iter (± 4441226) 1.05
es/full/minify/libraries/victory 675803181 ns/iter (± 8051840) 618772276 ns/iter (± 3692283) 1.09
es/full/minify/libraries/vue 139462043 ns/iter (± 682728) 136151594 ns/iter (± 196664) 1.02
es/full/codegen/es3 36777 ns/iter (± 103) 35693 ns/iter (± 127) 1.03
es/full/codegen/es5 36936 ns/iter (± 96) 35684 ns/iter (± 79) 1.04
es/full/codegen/es2015 36935 ns/iter (± 88) 35648 ns/iter (± 126) 1.04
es/full/codegen/es2016 36841 ns/iter (± 136) 35633 ns/iter (± 132) 1.03
es/full/codegen/es2017 36839 ns/iter (± 72) 35652 ns/iter (± 80) 1.03
es/full/codegen/es2018 36838 ns/iter (± 62) 35597 ns/iter (± 88) 1.03
es/full/codegen/es2019 36788 ns/iter (± 92) 35698 ns/iter (± 54) 1.03
es/full/codegen/es2020 36810 ns/iter (± 86) 35657 ns/iter (± 92) 1.03
es/full/all/es3 181353618 ns/iter (± 850724) 179505721 ns/iter (± 643994) 1.01
es/full/all/es5 171621466 ns/iter (± 1053168) 169736867 ns/iter (± 1024064) 1.01
es/full/all/es2015 128157203 ns/iter (± 420804) 127396222 ns/iter (± 909103) 1.01
es/full/all/es2016 127422648 ns/iter (± 757122) 126080764 ns/iter (± 557792) 1.01
es/full/all/es2017 126188504 ns/iter (± 659844) 125112330 ns/iter (± 393848) 1.01
es/full/all/es2018 124846542 ns/iter (± 625378) 123828533 ns/iter (± 894987) 1.01
es/full/all/es2019 124041425 ns/iter (± 325487) 122984570 ns/iter (± 1065578) 1.01
es/full/all/es2020 119348430 ns/iter (± 675089) 119328640 ns/iter (± 368508) 1.00
es/full/parser 520870 ns/iter (± 7921) 516688 ns/iter (± 5781) 1.01
es/full/base/fixer 18073 ns/iter (± 68) 19217 ns/iter (± 58) 0.94
es/full/base/resolver_and_hygiene 91015 ns/iter (± 264) 91599 ns/iter (± 86) 0.99
serialization of serde 301 ns/iter (± 10) 297 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 31475291 ns/iter (± 135406) 30923340 ns/iter (± 38734) 1.02
css/visitor/compare/clone 1984439 ns/iter (± 17341) 2128056 ns/iter (± 10482) 0.93
css/visitor/compare/visit_mut_span 2139222 ns/iter (± 17944) 2268017 ns/iter (± 13463) 0.94
css/visitor/compare/visit_mut_span_panic 2222086 ns/iter (± 21816) 2322966 ns/iter (± 11798) 0.96
css/visitor/compare/fold_span 2888523 ns/iter (± 19511) 3037092 ns/iter (± 10485) 0.95
css/visitor/compare/fold_span_panic 3115481 ns/iter (± 23065) 3224964 ns/iter (± 12413) 0.97
css/lexer/bootstrap_5_1_3 4774304 ns/iter (± 12669) 4860484 ns/iter (± 4066) 0.98
css/lexer/foundation_6_7_4 4026696 ns/iter (± 3666) 4086529 ns/iter (± 1547) 0.99
css/lexer/tailwind_3_1_1 764220 ns/iter (± 368) 778654 ns/iter (± 805) 0.98
css/parser/bootstrap_5_1_3 20882466 ns/iter (± 88467) 20525137 ns/iter (± 39147) 1.02
css/parser/foundation_6_7_4 16799282 ns/iter (± 35547) 16564948 ns/iter (± 39881) 1.01
css/parser/tailwind_3_1_1 3226824 ns/iter (± 2152) 3196113 ns/iter (± 3478) 1.01
es/codegen/colors 738113 ns/iter (± 401415) 729789 ns/iter (± 396418) 1.01
es/codegen/large 2974097 ns/iter (± 1555813) 2999439 ns/iter (± 1579531) 0.99
es/codegen/with-parser/colors 49589 ns/iter (± 337) 48721 ns/iter (± 185) 1.02
es/codegen/with-parser/large 520164 ns/iter (± 892) 518163 ns/iter (± 978) 1.00
es/minify/libraries/antd 1363847057 ns/iter (± 14756634) 1266263318 ns/iter (± 13840390) 1.08
es/minify/libraries/d3 289695410 ns/iter (± 1769254) 278521797 ns/iter (± 491243) 1.04
es/minify/libraries/echarts 1100065190 ns/iter (± 5592223) 1010910301 ns/iter (± 3760885) 1.09
es/minify/libraries/jquery 84483599 ns/iter (± 453576) 83091022 ns/iter (± 64347) 1.02
es/minify/libraries/lodash 103725037 ns/iter (± 1771965) 102978599 ns/iter (± 206043) 1.01
es/minify/libraries/moment 49783061 ns/iter (± 120639) 49190103 ns/iter (± 81983) 1.01
es/minify/libraries/react 18099615 ns/iter (± 46140) 17974479 ns/iter (± 27176) 1.01
es/minify/libraries/terser 219263480 ns/iter (± 1337719) 209376157 ns/iter (± 745300) 1.05
es/minify/libraries/three 393064659 ns/iter (± 3654424) 361917698 ns/iter (± 865445) 1.09
es/minify/libraries/typescript 2669555368 ns/iter (± 6584085) 2534906498 ns/iter (± 8639318) 1.05
es/minify/libraries/victory 584094364 ns/iter (± 5272088) 533885518 ns/iter (± 1752170) 1.09
es/minify/libraries/vue 125507110 ns/iter (± 429211) 122699511 ns/iter (± 183145) 1.02
es/visitor/compare/clone 2119112 ns/iter (± 16518) 2086804 ns/iter (± 7291) 1.02
es/visitor/compare/visit_mut_span 2466543 ns/iter (± 5400) 2419087 ns/iter (± 4303) 1.02
es/visitor/compare/visit_mut_span_panic 2504146 ns/iter (± 2631) 2457811 ns/iter (± 3895) 1.02
es/visitor/compare/fold_span 3532997 ns/iter (± 6216) 3505890 ns/iter (± 10409) 1.01
es/visitor/compare/fold_span_panic 3674280 ns/iter (± 10399) 3653054 ns/iter (± 5851) 1.01
es/lexer/colors 13287 ns/iter (± 82) 13125 ns/iter (± 17) 1.01
es/lexer/angular 6351332 ns/iter (± 12847) 6225975 ns/iter (± 5424) 1.02
es/lexer/backbone 810037 ns/iter (± 1382) 817278 ns/iter (± 1386) 0.99
es/lexer/jquery 4595209 ns/iter (± 5917) 4630118 ns/iter (± 7382) 0.99
es/lexer/jquery mobile 7071353 ns/iter (± 15830) 7076442 ns/iter (± 8396) 1.00
es/lexer/mootools 3631002 ns/iter (± 4154) 3627073 ns/iter (± 16499) 1.00
es/lexer/underscore 677087 ns/iter (± 2436) 676446 ns/iter (± 1404) 1.00
es/lexer/three 21372864 ns/iter (± 19826) 21559187 ns/iter (± 27891) 0.99
es/lexer/yui 4068375 ns/iter (± 4768) 4106844 ns/iter (± 6645) 0.99
es/parser/colors 29234 ns/iter (± 134) 29115 ns/iter (± 27) 1.00
es/parser/angular 14396634 ns/iter (± 57803) 14538446 ns/iter (± 53014) 0.99
es/parser/backbone 2141304 ns/iter (± 7732) 2162470 ns/iter (± 8778) 0.99
es/parser/jquery 11691023 ns/iter (± 55509) 11719587 ns/iter (± 44772) 1.00
es/parser/jquery mobile 18008890 ns/iter (± 196915) 17938316 ns/iter (± 31855) 1.00
es/parser/mootools 8911281 ns/iter (± 18271) 8991187 ns/iter (± 15405) 0.99
es/parser/underscore 1851681 ns/iter (± 9458) 1873596 ns/iter (± 8720) 0.99
es/parser/three 51863022 ns/iter (± 302801) 49686052 ns/iter (± 138464) 1.04
es/parser/yui 8978298 ns/iter (± 36464) 9126879 ns/iter (± 168207) 0.98
es/preset-env/usage/builtin_type 148053 ns/iter (± 33793) 148620 ns/iter (± 31601) 1.00
es/preset-env/usage/property 20061 ns/iter (± 100) 20530 ns/iter (± 114) 0.98
es/resolver/typescript 98357073 ns/iter (± 1079409) 93891804 ns/iter (± 875126) 1.05
es/fixer/typescript 69101185 ns/iter (± 502945) 65876223 ns/iter (± 323182) 1.05
es/hygiene/typescript 149931932 ns/iter (± 1818044) 143240358 ns/iter (± 1174451) 1.05
es/resolver_with_hygiene/typescript 319098350 ns/iter (± 1434456) 299291278 ns/iter (± 1301862) 1.07
es/visitor/base-perf/module_clone 62209 ns/iter (± 249) 62750 ns/iter (± 361) 0.99
es/visitor/base-perf/fold_empty 65143 ns/iter (± 221) 65469 ns/iter (± 306) 1.00
es/visitor/base-perf/fold_noop_impl_all 65229 ns/iter (± 168) 65880 ns/iter (± 191) 0.99
es/visitor/base-perf/fold_noop_impl_vec 65482 ns/iter (± 246) 66411 ns/iter (± 227) 0.99
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 57 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 39 ns/iter (± 0) 40 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_boxed 114 ns/iter (± 0) 115 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 80 ns/iter (± 0) 81 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2604 ns/iter (± 13) 2612 ns/iter (± 9) 1.00
es/base/parallel/resolver/typescript 4641209027 ns/iter (± 270639090) 4405453816 ns/iter (± 209995813) 1.05
es/base/parallel/hygiene/typescript 1601523798 ns/iter (± 21673811) 1579935501 ns/iter (± 12104030) 1.01
misc/visitors/time-complexity/time 5 104 ns/iter (± 2) 106 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 10 268 ns/iter (± 0) 279 ns/iter (± 0) 0.96
misc/visitors/time-complexity/time 15 586 ns/iter (± 40) 600 ns/iter (± 41) 0.98
misc/visitors/time-complexity/time 20 941 ns/iter (± 8) 949 ns/iter (± 48) 0.99
misc/visitors/time-complexity/time 40 3770 ns/iter (± 40) 3740 ns/iter (± 211) 1.01
misc/visitors/time-complexity/time 60 7856 ns/iter (± 32) 7749 ns/iter (± 14) 1.01
es/full-target/es2016 241693 ns/iter (± 1008) 242987 ns/iter (± 871) 0.99
es/full-target/es2017 227730 ns/iter (± 930) 228861 ns/iter (± 616) 1.00
es/full-target/es2018 213898 ns/iter (± 599) 217108 ns/iter (± 1633) 0.99
es2020_nullish_coalescing 72105 ns/iter (± 408) 71301 ns/iter (± 234) 1.01
es2020_optional_chaining 83926 ns/iter (± 349) 62906 ns/iter (± 229) 1.33
es2022_class_properties 120553 ns/iter (± 532) 119323 ns/iter (± 208) 1.01
es2018_object_rest_spread 74672 ns/iter (± 266) 75671 ns/iter (± 346) 0.99
es2019_optional_catch_binding 64620 ns/iter (± 159) 64353 ns/iter (± 252) 1.00
es2017_async_to_generator 65198 ns/iter (± 197) 64441 ns/iter (± 217) 1.01
es2016_exponentiation 70768 ns/iter (± 213) 69604 ns/iter (± 235) 1.02
es2015_arrow 73036 ns/iter (± 208) 72366 ns/iter (± 170) 1.01
es2015_block_scoped_fn 70151 ns/iter (± 743) 69689 ns/iter (± 215) 1.01
es2015_block_scoping 133663 ns/iter (± 516) 132576 ns/iter (± 372) 1.01

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

Please sign in to comment.