Skip to content

Commit

Permalink
fix(es/compat): Fix optional chaining (#7530)
Browse files Browse the repository at this point in the history
**Description:**

This fixes a few bugs with optional chaining:

-
[`a?.c()`](https://play.swc.rs/?version=1.3.64&code=H4sIAAAAAAAAA9PXVwjOyC%2FNSVFISrXi0tdXSFSwtVXIK83JUbBXKM1LSU3LzEtNUbBSSNRL1tC05kq0h9AAouc%2F7DgAAAA%3D&config=H4sIAAAAAAAAA2VSu27DMAzc8xUC5wAZii7ZWnRJgXTKDxAKkyrQwyDpNEbgf69kxI4jexAk3olH3fm%2BMgYoXsFszT3vywchHQm2pa7cwXos28T0LRl4m0qnxJY%2BvD8wRsmHUGDllibGsYsYnN2FJrHWoCKfScudUbsv2LDARewEgI4CM24uezqj7b4oj4aauOpf5EdoT4pHVFxSmNDqS1tjNhvDbVQXKNuAraaA6iysC5DYWI8izs4uwIMOC%2F6cpL%2Bc%2FnanHwwkDVpaDJM5rdBn67y6WHv5eNCVfGpCzibDJ%2FQyw%2Fv1qtqAT0lqHWiQhfjVSumi4m2I3QYUy65RmNl0kdtS8OlvPWxfhTw0lnd45pv%2FstbTLOKuGeyzKYQULwIT08l%2B5BaJVf8PfP2zz7YCAAA%3D)
-
[`a?.b.c()`](https://play.swc.rs/?version=1.3.64&code=H4sIAAAAAAAAA9PXVwjOyC%2FNSVFISrXi0tdXSFSwtVXIK83JUbBXKM1LSU3LzEtNUbBSSNRL0kvW0LTmSrSHsQBsP8xLPAAAAA%3D%3D&config=H4sIAAAAAAAAA2VSu27DMAzc8xUC5wAZii7ZWnRJgXTKDxAKkyrQwyDpNEbgf69kxI4jexAk3olH3fm%2BMgYoXsFszT3vywchHQm2pa7cwXos28T0LRl4m0qnxJY%2BvD8wRsmHUGDllibGsYsYnN2FJrHWoCKfScudUbsv2LDARewEgI4CM24uezqj7b4oj4aauOpf5EdoT4pHVFxSmNDqS1tjNhvDbVQXKNuAraaA6iysC5DYWI8izs4uwIMOC%2F6cpL%2Bc%2FnanHwwkDVpaDJM5rdBn67y6WHv5eNCVfGpCzibDJ%2FQyw%2Fv1qtqAT0lqHWiQhfjVSumi4m2I3QYUy65RmNl0kdtS8OlvPWxfhTw0lnd45pv%2FstbTLOKuGeyzKYQULwIT08l%2B5BaJVf8PfP2zz7YCAAA%3D)
-
[`a.c?.()`](https://play.swc.rs/?version=1.3.64&code=H4sIAAAAAAAAAxWKsQ3AIAwEe6b4Ehq7J0IMkQGQYxMlkkUq9g80d1ccM87nm264eg7MiE2aomwvSiJNKAVjuqNiDuv3O7ohY4%2Bk4r7WdAQhrRRX%2FIwaKV1TAAAA&config=H4sIAAAAAAAAA2VSu27DMAzc8xUC5wAZii7ZWnRJgXTKDxAKkyrQwyDpNEbgf69kxI4jexAk3olH3fm%2BMgYoXsFszT3vywchHQm2pa7cwXos28T0LRl4m0qnxJY%2BvD8wRsmHUGDllibGsYsYnN2FJrHWoCKfScudUbsv2LDARewEgI4CM24uezqj7b4oj4aauOpf5EdoT4pHVFxSmNDqS1tjNhvDbVQXKNuAraaA6iysC5DYWI8izs4uwIMOC%2F6cpL%2Bc%2FnanHwwkDVpaDJM5rdBn67y6WHv5eNCVfGpCzibDJ%2FQyw%2Fv1qtqAT0lqHWiQhfjVSumi4m2I3QYUy65RmNl0kdtS8OlvPWxfhTw0lnd45pv%2FstbTLOKuGeyzKYQULwIT08l%2B5BaJVf8PfP2zz7YCAAA%3D)
-
[`a.b.c?.()`](https://play.swc.rs/?version=1.3.64&code=H4sIAAAAAAAAAyWLsQ3AIAwEe6b4Ehq7J0IMkQEQ2ESJZJGK%2FYNCdVfcMeO832mK1qNjhi%2B1tCJI2xYrtUASkBLGNEPGHNqvZ3RFxM5Jqtk%2FhMOtgSSTX%2FoBjF6UKV8AAAA%3D&config=H4sIAAAAAAAAA2VSu27DMAzc8xUC5wAZii7ZWnRJgXTKDxAKkyrQwyDpNEbgf69kxI4jexAk3olH3fm%2BMgYoXsFszT3vywchHQm2pa7cwXos28T0LRl4m0qnxJY%2BvD8wRsmHUGDllibGsYsYnN2FJrHWoCKfScudUbsv2LDARewEgI4CM24uezqj7b4oj4aauOpf5EdoT4pHVFxSmNDqS1tjNhvDbVQXKNuAraaA6iysC5DYWI8izs4uwIMOC%2F6cpL%2Bc%2FnanHwwkDVpaDJM5rdBn67y6WHv5eNCVfGpCzibDJ%2FQyw%2Fv1qtqAT0lqHWiQhfjVSumi4m2I3QYUy65RmNl0kdtS8OlvPWxfhTw0lnd45pv%2FstbTLOKuGeyzKYQULwIT08l%2B5BaJVf8PfP2zz7YCAAA%3D)
-
[`a?.b[c?.d]`](https://play.swc.rs/?version=1.3.64&code=H4sIAAAAAAAAA9PXVwjOyC%2FNSVFISrXi0tdX0IhPVLBVSNRUsLVVyCvNyVGwVyjLz0xRMFCwUohP1EuK1ohPBipIxq4gWS8l1por0R6oLtkezAYAJs%2FWxmEAAAA%3D&config=H4sIAAAAAAAAA2VSu27DMAzc8xUC5wAZii7ZWnRJgXTKDxAKkyrQwyDpNEbgf69kxI4jexAk3olH3fm%2BMgYoXsFszT3vywchHQm2pa7cwXos28T0LRl4m0qnxJY%2BvD8wRsmHUGDllibGsYsYnN2FJrHWoCKfScudUbsv2LDARewEgI4CM24uezqj7b4oj4aauOpf5EdoT4pHVFxSmNDqS1tjNhvDbVQXKNuAraaA6iysC5DYWI8izs4uwIMOC%2F6cpL%2Bc%2FnanHwwkDVpaDJM5rdBn67y6WHv5eNCVfGpCzibDJ%2FQyw%2Fv1qtqAT0lqHWiQhfjVSumi4m2I3QYUy65RmNl0kdtS8OlvPWxfhTw0lnd45pv%2FstbTLOKuGeyzKYQULwIT08l%2B5BaJVf8PfP2zz7YCAAA%3D)
- [`delete
foo?.bar`](https://play.swc.rs/?version=1.3.64&code=H4sIAAAAAAAAA9PXVwjOyC%2FNSVFISrXi0tdXSMvPV7C1VcgrzclRsFcoKSpNVbBSSEnNSS1JBcnpJSUWcSG49iA%2BAGcLTstEAAAA&config=H4sIAAAAAAAAA1WPSw7CMAxE9zlF5DULYIEEd%2BAQVnCrVPkpTiWqqncnTZMAO3vG42evQkqYWMFDrrnMTcDIFHufFV5cwndWgJRFVlGHBKfmTrxbAxqmIm2HAwnjSKmk%2BHq%2B3GsCjPdMWU5xpipZ7fSw%2FCKVtyESc9vcaRbdaOgfKCoUrH%2FNxayvpCXQccANvkMN1heD5mdL7leJ7QOQNa2NFgEAAA%3D%3D)
- [`function foo(a, b = a?.b)
{}`](https://play.swc.rs/?version=1.3.64&code=H4sIAAAAAAAAA9PXVwjOyC%2FNSVFISrXi0tdXSCvNSy7JzM9TSMvP10jUUUhSsFXQ0NBUsLVTqFYoSyxSiE%2B0VnjUsEyhVlNDU1OhupYLm45Ee70kkCQAp8DQOl8AAAA%3D&config=H4sIAAAAAAAAA22Rz07DMAzG73uKyOdJAw5I7Ii4cBjvYKXuyJQ%2Fle3AqmnvTltIm63cHH%2B%2F%2BPtkXzbGwEks7M1lKIeHMkZpE4e5NbU9HdH2b2QToyYeROVM2wVoinQgxQYV1wgTWr0Za8xuZzhHdYH2BjBrCqjOwnYUEhvrUcTZ6gP84bDia0g%2FOX2%2Ftx8YSDq0tAozMFnoNTuvLsp%2FckNf5FMXKI6ZW%2FRS6ddSzgX4lOTeBzpkIb5dpfRR8TzmJxtQLLtOoVrTSc5rw2W%2F92GXBIp8JJ0Gy9PD48s0dJIhpCZ7qq7cd%2FQLPsMMOTkUrBhAcNG1fcmzuf4AkV7gUzECAAA%3D)

It also optimizes the AST for runtime evaluation. Before, we constructed
a leftwards conditional tree (`(_a_b = (_a = a) == null ? void 0 : _a.b)
== null ? void 0 : _a_b.c`) instead of a rightward tree (`(_a = a) ==
null ? void 0 : (_a_b = _a.b) == null ? void 0 : _a_b.c`), which
required multiple `== null` checks after the first nullish is found.

**Related issue:**

 - Closes #7531.
  • Loading branch information
jridgewell committed Jun 19, 2023
1 parent 0859b76 commit 990e48e
Show file tree
Hide file tree
Showing 95 changed files with 787 additions and 781 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ class RequestHandler {
* @param {Response} res
* @return {* | Promise<any>}
*/ static async parseResponse(res) {
var _res_headers_get_startsWith, _this;
if ((_this = res.headers.get("Content-Type")) === null || _this === void 0 ? void 0 : (_res_headers_get_startsWith = _this.startsWith) === null || _res_headers_get_startsWith === void 0 ? void 0 : _res_headers_get_startsWith.call(_this, "application/json")) {
var _res_headers_get;
if ((_res_headers_get = res.headers.get("Content-Type")) === null || _res_headers_get === void 0 ? void 0 : _res_headers_get.startsWith("application/json")) {
return await res.json();
}
return res.buffer();
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
"use strict";const createRegisterItems=registerType=>async(a,b)=>{var _root;const a=(_root=root)===null||_root===void 0?void 0:_root.test};
"use strict";const createRegisterItems=registerType=>async(a,b)=>{const a=root?.test};
4 changes: 2 additions & 2 deletions crates/swc/tests/fixture/issues-2xxx/2063/output/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var _myVar_target_value_toLowerCase, _object;
var _myVar_target_value_toLowerCase, _myVar_target_value;
var myVar = {
target: {
value: "ABC"
}
};
console.log((_object = myVar.target.value) === null || _object === void 0 ? void 0 : (_myVar_target_value_toLowerCase = _object.toLowerCase) === null || _myVar_target_value_toLowerCase === void 0 ? void 0 : _myVar_target_value_toLowerCase.call(_object));
console.log((_myVar_target_value_toLowerCase = (_myVar_target_value = myVar.target.value).toLowerCase) === null || _myVar_target_value_toLowerCase === void 0 ? void 0 : _myVar_target_value_toLowerCase.call(_myVar_target_value));
10 changes: 4 additions & 6 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,15 +5,13 @@ var dummyTsFunction = function() {
2
];
var func1 = function(array) {
var // Mapping array
_array_map, _this;
return (_this = array) === null || _this === void 0 ? void 0 : (_array_map = _this.map) === null || _array_map === void 0 ? void 0 : _array_map.call(_this, function(i) {
return(// Mapping array
array?.map(function(i) {
return i;
});
}));
};
var func2 = function(array) {
var _array_map, _this;
return (_this = array) === null || _this === void 0 ? void 0 : (_array_map = _this.map) === null || _array_map === void 0 ? void 0 : _array_map.call(_this, function(i) {
return 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, tx, errors;
var 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 = tx) === null || _tx === void 0 ? void 0 : _tx.meta) && tx.meta.logMessages) {
if (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, _confirmation1, confirmation, errors;
var awaitConfirmation, commitment, includesFeePayer, block, transaction, _tmp, _transaction, _transaction1, _transaction2, rawTransaction, options, txid, slot, 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 = confirmation) === null || _confirmation === void 0 ? void 0 : _confirmation.slot) || 0;
if (!((_confirmation1 = confirmation) === null || _confirmation1 === void 0 ? void 0 : _confirmation1.err)) return [
slot = confirmation?.slot || 0;
if (!confirmation?.err) return [
3,
9
];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var Router = /*#__PURE__*/ function() {
value: function change(method, url, as, options, forcedScroll) {
var _this = this;
return _async_to_generator(function() {
var shouldResolveHref, prevLocale, parsedAs, localePathResult, didNavigate, _this_locales_includes, _this1, detectedDomain, asNoBasePath, _options_shallow, shallow, routeProps, cleanedAs, localeChange, parsed, pathname, query, pages, rewrites, ref, err, resolvedAs, rewritesResult, route, parsedAs1, asPathname, routeRegex, routeMatch, shouldInterpolate, interpolatedAs, missingParams, _self___NEXT_DATA___props_pageProps, _self___NEXT_DATA___props, _props, routeInfo, error, props, __N_SSG, __N_SSP, destination, parsedHref, _prepareUrlAs, newUrl, newAs, notFoundRoute, _, isValidShallowRoute, _options_scroll, shouldScroll, resetScroll, err1;
var shouldResolveHref, prevLocale, parsedAs, localePathResult, didNavigate, _this_locales, detectedDomain, asNoBasePath, _options_shallow, shallow, routeProps, cleanedAs, localeChange, parsed, pathname, query, pages, rewrites, ref, err, resolvedAs, rewritesResult, route, parsedAs1, asPathname, routeRegex, routeMatch, shouldInterpolate, interpolatedAs, missingParams, _self___NEXT_DATA___props_pageProps, _self___NEXT_DATA___props, _props, routeInfo, error, props, __N_SSG, __N_SSP, destination, parsedHref, _prepareUrlAs, newUrl, newAs, notFoundRoute, _, isValidShallowRoute, _options_scroll, shouldScroll, resetScroll, err1;
return _ts_generator(this, function(_state) {
switch(_state.label){
case 0:
Expand Down Expand Up @@ -50,7 +50,7 @@ var Router = /*#__PURE__*/ function() {
if (process.env.__NEXT_I18N_SUPPORT) {
;
// if the locale isn't configured hard navigate to show 404 page
if (!((_this1 = _this.locales) === null || _this1 === void 0 ? void 0 : (_this_locales_includes = _this1.includes) === null || _this_locales_includes === void 0 ? void 0 : _this_locales_includes.call(_this1, _this.locale))) {
if (!((_this_locales = _this.locales) === null || _this_locales === void 0 ? void 0 : _this_locales.includes(_this.locale))) {
parsedAs.pathname = addLocale(parsedAs.pathname, _this.locale);
window.location.href = formatWithValidation(parsedAs);
// this was previously a return but was removed in favor
Expand Down Expand Up @@ -310,7 +310,7 @@ var Router = /*#__PURE__*/ function() {
case 13:
Router.events.emit("beforeHistoryChange", as, routeProps);
_this.changeState(method, url, as, options);
if (options._h && pathname === "/_error" && ((_self___NEXT_DATA___props_pageProps = (_self___NEXT_DATA___props = self.__NEXT_DATA__.props) === null || _self___NEXT_DATA___props === void 0 ? void 0 : _self___NEXT_DATA___props.pageProps) === null || _self___NEXT_DATA___props_pageProps === void 0 ? void 0 : _self___NEXT_DATA___props_pageProps.statusCode) === 500 && ((_props = props) === null || _props === void 0 ? void 0 : _props.pageProps)) {
if (options._h && pathname === "/_error" && ((_self___NEXT_DATA___props = self.__NEXT_DATA__.props) === null || _self___NEXT_DATA___props === void 0 ? void 0 : (_self___NEXT_DATA___props_pageProps = _self___NEXT_DATA___props.pageProps) === null || _self___NEXT_DATA___props_pageProps === void 0 ? void 0 : _self___NEXT_DATA___props_pageProps.statusCode) === 500 && ((_props = props) === null || _props === void 0 ? void 0 : _props.pageProps)) {
// ensure statusCode is still correct for static 500 page
// when updating query information
props.pageProps.statusCode = 500;
Expand Down
78 changes: 37 additions & 41 deletions crates/swc/tests/tsc-references/callChain.1.normal.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//// [callChain.ts]
var _o2_b, _o2_b1, _o2_b2, _o2_b3, _o3_b, _o3_b1, _o3_b2, _o3_b3, _o3_b4, _o3_b5;
var _o1, _o11, _o12, _o13, _o2_b4, _this, _o2_b5, _this1, _o2_b6, _this2, _o2_b7, _this3, _o2_b8, _this4, _o2_b9, _this5, _o2_b10, _this6, _o2_b11, _this7, _o3_b6, _object, _o3_b7, _object1, _o3_b8, _object2, _o3_b9, _object3, _o3_b10, _object4, _o3_b11, _object5, _o3_b12, _object6, _o3_b13, _object7, _o3_b14, _object8, _o3_b15, _object9, _o3_b16, _object10, _o3_b17, _object11, _o4, _o5, // GH#36031
_o2_b12, _this8, _o2_b13, _this9;
var _o2, _o21, _o22, _o23, _o3_b, _o3_b1, _o3_b2, _o3_b3, _o3_b4, _o3_b5;
var _o1, _o11, _o12, _o13, _o24, _o25, _o26, _o27, _o28, _o29, _o210, _o211, _o3_b6, _o3, _o3_b7, _o31, _o3_b8, _o32, _o3_b9, _o33, _o3_b10, _o34, _o3_b11, _o35, _o3_b12, _o36, _o3_b13, _o37, _o3_b14, _o38, _o3_b15, _o39, _o3_b16, _o310, _o3_b17, _o311, _o4, _o5, // GH#36031
_o212, _o213;
(_o1 = o1) === null || _o1 === void 0 ? void 0 : _o1();
(_o11 = o1) === null || _o11 === void 0 ? void 0 : _o11(1);
(_o12 = o1) === null || _o12 === void 0 ? void 0 : _o12.apply(void 0, [
Expand All @@ -14,77 +14,73 @@ _o2_b12, _this8, _o2_b13, _this9;
3,
4
]);
(_this = o2) === null || _this === void 0 ? void 0 : (_o2_b4 = _this.b) === null || _o2_b4 === void 0 ? void 0 : _o2_b4.call(_this);
(_this1 = o2) === null || _this1 === void 0 ? void 0 : (_o2_b5 = _this1.b) === null || _o2_b5 === void 0 ? void 0 : _o2_b5.call(_this1, 1);
(_this2 = o2) === null || _this2 === void 0 ? void 0 : (_o2_b6 = _this2.b) === null || _o2_b6 === void 0 ? void 0 : (_o2_b = _o2_b6).call.apply(_o2_b, [
_this2,
(_o24 = o2) === null || _o24 === void 0 ? void 0 : _o24.b();
(_o25 = o2) === null || _o25 === void 0 ? void 0 : _o25.b(1);
(_o26 = o2) === null || _o26 === void 0 ? void 0 : (_o2 = _o26).b.apply(_o2, [
1,
2
]);
(_this3 = o2) === null || _this3 === void 0 ? void 0 : (_o2_b7 = _this3.b) === null || _o2_b7 === void 0 ? void 0 : (_o2_b1 = _o2_b7).call.apply(_o2_b1, [
_this3,
(_o27 = o2) === null || _o27 === void 0 ? void 0 : (_o21 = _o27).b.apply(_o21, [
1,
2,
3,
4
]);
(_this4 = o2) === null || _this4 === void 0 ? void 0 : (_o2_b8 = _this4["b"]) === null || _o2_b8 === void 0 ? void 0 : _o2_b8.call(_this4);
(_this5 = o2) === null || _this5 === void 0 ? void 0 : (_o2_b9 = _this5["b"]) === null || _o2_b9 === void 0 ? void 0 : _o2_b9.call(_this5, 1);
(_this6 = o2) === null || _this6 === void 0 ? void 0 : (_o2_b10 = _this6["b"]) === null || _o2_b10 === void 0 ? void 0 : (_o2_b2 = _o2_b10).call.apply(_o2_b2, [
_this6,
(_o28 = o2) === null || _o28 === void 0 ? void 0 : _o28["b"]();
(_o29 = o2) === null || _o29 === void 0 ? void 0 : _o29["b"](1);
(_o210 = o2) === null || _o210 === void 0 ? void 0 : (_o22 = _o210)["b"].apply(_o22, [
1,
2
]);
(_this7 = o2) === null || _this7 === void 0 ? void 0 : (_o2_b11 = _this7["b"]) === null || _o2_b11 === void 0 ? void 0 : (_o2_b3 = _o2_b11).call.apply(_o2_b3, [
_this7,
(_o211 = o2) === null || _o211 === void 0 ? void 0 : (_o23 = _o211)["b"].apply(_o23, [
1,
2,
3,
4
]);
(_object = o3) === null || _object === void 0 ? void 0 : ((_o3_b6 = _object.b) === null || _o3_b6 === void 0 ? void 0 : _o3_b6.call(_object)).c;
(_object1 = o3) === null || _object1 === void 0 ? void 0 : ((_o3_b7 = _object1.b) === null || _o3_b7 === void 0 ? void 0 : _o3_b7.call(_object1, 1)).c;
(_object2 = o3) === null || _object2 === void 0 ? void 0 : ((_o3_b8 = _object2.b) === null || _o3_b8 === void 0 ? void 0 : (_o3_b = _o3_b8).call.apply(_o3_b, [
_object2,
(_o3_b6 = (_o3 = o3).b) === null || _o3_b6 === void 0 ? void 0 : _o3_b6.call(_o3).c;
(_o3_b7 = (_o31 = o3).b) === null || _o3_b7 === void 0 ? void 0 : _o3_b7.call(_o31, 1).c;
(_o3_b8 = (_o32 = o3).b) === null || _o3_b8 === void 0 ? void 0 : (_o3_b = _o3_b8).call.apply(_o3_b, [
_o32,
1,
2
])).c;
(_object3 = o3) === null || _object3 === void 0 ? void 0 : ((_o3_b9 = _object3.b) === null || _o3_b9 === void 0 ? void 0 : (_o3_b1 = _o3_b9).call.apply(_o3_b1, [
_object3,
]).c;
(_o3_b9 = (_o33 = o3).b) === null || _o3_b9 === void 0 ? void 0 : (_o3_b1 = _o3_b9).call.apply(_o3_b1, [
_o33,
1,
2,
3,
4
])).c;
(_object4 = o3) === null || _object4 === void 0 ? void 0 : ((_o3_b10 = _object4.b) === null || _o3_b10 === void 0 ? void 0 : _o3_b10.call(_object4))["c"];
(_object5 = o3) === null || _object5 === void 0 ? void 0 : ((_o3_b11 = _object5.b) === null || _o3_b11 === void 0 ? void 0 : _o3_b11.call(_object5, 1))["c"];
(_object6 = o3) === null || _object6 === void 0 ? void 0 : ((_o3_b12 = _object6.b) === null || _o3_b12 === void 0 ? void 0 : (_o3_b2 = _o3_b12).call.apply(_o3_b2, [
_object6,
]).c;
(_o3_b10 = (_o34 = o3).b) === null || _o3_b10 === void 0 ? void 0 : _o3_b10.call(_o34)["c"];
(_o3_b11 = (_o35 = o3).b) === null || _o3_b11 === void 0 ? void 0 : _o3_b11.call(_o35, 1)["c"];
(_o3_b12 = (_o36 = o3).b) === null || _o3_b12 === void 0 ? void 0 : (_o3_b2 = _o3_b12).call.apply(_o3_b2, [
_o36,
1,
2
]))["c"];
(_object7 = o3) === null || _object7 === void 0 ? void 0 : ((_o3_b13 = _object7.b) === null || _o3_b13 === void 0 ? void 0 : (_o3_b3 = _o3_b13).call.apply(_o3_b3, [
_object7,
])["c"];
(_o3_b13 = (_o37 = o3).b) === null || _o3_b13 === void 0 ? void 0 : (_o3_b3 = _o3_b13).call.apply(_o3_b3, [
_o37,
1,
2,
3,
4
]))["c"];
(_object8 = o3) === null || _object8 === void 0 ? void 0 : ((_o3_b14 = _object8["b"]) === null || _o3_b14 === void 0 ? void 0 : _o3_b14.call(_object8)).c;
(_object9 = o3) === null || _object9 === void 0 ? void 0 : ((_o3_b15 = _object9["b"]) === null || _o3_b15 === void 0 ? void 0 : _o3_b15.call(_object9, 1)).c;
(_object10 = o3) === null || _object10 === void 0 ? void 0 : ((_o3_b16 = _object10["b"]) === null || _o3_b16 === void 0 ? void 0 : (_o3_b4 = _o3_b16).call.apply(_o3_b4, [
_object10,
])["c"];
(_o3_b14 = (_o38 = o3)["b"]) === null || _o3_b14 === void 0 ? void 0 : _o3_b14.call(_o38).c;
(_o3_b15 = (_o39 = o3)["b"]) === null || _o3_b15 === void 0 ? void 0 : _o3_b15.call(_o39, 1).c;
(_o3_b16 = (_o310 = o3)["b"]) === null || _o3_b16 === void 0 ? void 0 : (_o3_b4 = _o3_b16).call.apply(_o3_b4, [
_o310,
1,
2
])).c;
(_object11 = o3) === null || _object11 === void 0 ? void 0 : ((_o3_b17 = _object11["b"]) === null || _o3_b17 === void 0 ? void 0 : (_o3_b5 = _o3_b17).call.apply(_o3_b5, [
_object11,
]).c;
(_o3_b17 = (_o311 = o3)["b"]) === null || _o3_b17 === void 0 ? void 0 : (_o3_b5 = _o3_b17).call.apply(_o3_b5, [
_o311,
1,
2,
3,
4
])).c;
]).c;
var v = (_o4 = o4) === null || _o4 === void 0 ? void 0 : _o4(incr);
(_o5 = o5()) === null || _o5 === void 0 ? void 0 : _o5();
((_this8 = o2) === null || _this8 === void 0 ? void 0 : (_o2_b12 = _this8.b) === null || _o2_b12 === void 0 ? void 0 : _o2_b12.call(_this8)).toString;
((_this9 = o2) === null || _this9 === void 0 ? void 0 : (_o2_b13 = _this9.b) === null || _o2_b13 === void 0 ? void 0 : _o2_b13.call(_this9)).toString;
((_o212 = o2) === null || _o212 === void 0 ? void 0 : _o212.b()).toString;
((_o213 = o2) === null || _o213 === void 0 ? void 0 : _o213.b()).toString;
6 changes: 3 additions & 3 deletions crates/swc/tests/tsc-references/callChain.2.1.normal.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//// [callChain.2.ts]
var _o1, _o2_b, _this, _o3_b, _object;
var _o1, _o2, _o3_b, _o3;
(_o1 = o1) === null || _o1 === void 0 ? void 0 : _o1();
(_this = o2) === null || _this === void 0 ? void 0 : (_o2_b = _this.b) === null || _o2_b === void 0 ? void 0 : _o2_b.call(_this);
(_object = o3) === null || _object === void 0 ? void 0 : ((_o3_b = _object.b) === null || _o3_b === void 0 ? void 0 : _o3_b.call(_object)).c;
(_o2 = o2) === null || _o2 === void 0 ? void 0 : _o2.b();
(_o3_b = (_o3 = o3).b) === null || _o3_b === void 0 ? void 0 : _o3_b.call(_o3).c;
4 changes: 2 additions & 2 deletions crates/swc/tests/tsc-references/callChain.2.2.minified.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
//// [callChain.2.ts]
var _o1, _o2_b, _this, _o3_b, _object;
null === (_o1 = o1) || void 0 === _o1 || _o1(), null === (_this = o2) || void 0 === _this || null === (_o2_b = _this.b) || void 0 === _o2_b || _o2_b.call(_this), null === (_object = o3) || void 0 === _object || (null === (_o3_b = _object.b) || void 0 === _o3_b ? void 0 : _o3_b.call(_object)).c;
var _o1, _o2, _o3_b, _o3;
null === (_o1 = o1) || void 0 === _o1 || _o1(), null === (_o2 = o2) || void 0 === _o2 || _o2.b(), null === (_o3_b = (_o3 = o3).b) || void 0 === _o3_b || _o3_b.call(_o3).c;

1 comment on commit 990e48e

@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: 990e48e Previous: f42fdd2 Ratio
es/full/bugs-1 355878 ns/iter (± 6340) 357387 ns/iter (± 7209) 1.00
es/full/minify/libraries/antd 1846815370 ns/iter (± 27143843) 1894867384 ns/iter (± 33413328) 0.97
es/full/minify/libraries/d3 370202996 ns/iter (± 9708209) 374257258 ns/iter (± 8553329) 0.99
es/full/minify/libraries/echarts 1421567379 ns/iter (± 19185235) 1463349284 ns/iter (± 12068537) 0.97
es/full/minify/libraries/jquery 108091306 ns/iter (± 817049) 110091642 ns/iter (± 698406) 0.98
es/full/minify/libraries/lodash 132435701 ns/iter (± 1397646) 133334890 ns/iter (± 1196348) 0.99
es/full/minify/libraries/moment 63601561 ns/iter (± 346423) 63503576 ns/iter (± 583521) 1.00
es/full/minify/libraries/react 22734270 ns/iter (± 110565) 22693856 ns/iter (± 148355) 1.00
es/full/minify/libraries/terser 288628240 ns/iter (± 2884921) 297997336 ns/iter (± 3515108) 0.97
es/full/minify/libraries/three 534384851 ns/iter (± 12007094) 538296215 ns/iter (± 7296576) 0.99
es/full/minify/libraries/typescript 3563329823 ns/iter (± 35058121) 3625496829 ns/iter (± 34903132) 0.98
es/full/minify/libraries/victory 760017492 ns/iter (± 19160614) 787749259 ns/iter (± 11179036) 0.96
es/full/minify/libraries/vue 158966868 ns/iter (± 1737687) 160447566 ns/iter (± 1044031) 0.99
es/full/codegen/es3 40642 ns/iter (± 91) 40065 ns/iter (± 95) 1.01
es/full/codegen/es5 40356 ns/iter (± 125) 40085 ns/iter (± 103) 1.01
es/full/codegen/es2015 40428 ns/iter (± 85) 40127 ns/iter (± 97) 1.01
es/full/codegen/es2016 40371 ns/iter (± 192) 40067 ns/iter (± 60) 1.01
es/full/codegen/es2017 40417 ns/iter (± 159) 40063 ns/iter (± 55) 1.01
es/full/codegen/es2018 39959 ns/iter (± 412) 40131 ns/iter (± 85) 1.00
es/full/codegen/es2019 39890 ns/iter (± 297) 40112 ns/iter (± 59) 0.99
es/full/codegen/es2020 39971 ns/iter (± 310) 40078 ns/iter (± 128) 1.00
es/full/all/es3 208207448 ns/iter (± 3089454) 208556208 ns/iter (± 2721954) 1.00
es/full/all/es5 198232478 ns/iter (± 2403720) 199644111 ns/iter (± 1970020) 0.99
es/full/all/es2015 155713499 ns/iter (± 2365254) 154141040 ns/iter (± 1312433) 1.01
es/full/all/es2016 154499737 ns/iter (± 1524366) 152819690 ns/iter (± 2139082) 1.01
es/full/all/es2017 154335066 ns/iter (± 2202976) 154190833 ns/iter (± 2252918) 1.00
es/full/all/es2018 152045204 ns/iter (± 1577277) 150423451 ns/iter (± 1848015) 1.01
es/full/all/es2019 149387992 ns/iter (± 1742691) 151297696 ns/iter (± 2376093) 0.99
es/full/all/es2020 147085025 ns/iter (± 1856909) 144884929 ns/iter (± 2090087) 1.02
es/full/parser 599865 ns/iter (± 8940) 596592 ns/iter (± 8859) 1.01
es/full/base/fixer 24145 ns/iter (± 216) 25806 ns/iter (± 45) 0.94
es/full/base/resolver_and_hygiene 104942 ns/iter (± 1125) 106146 ns/iter (± 154) 0.99
serialization of serde 290 ns/iter (± 7) 282 ns/iter (± 0) 1.03
css/minify/libraries/bootstrap 35080463 ns/iter (± 426345) 35884146 ns/iter (± 343779) 0.98
css/visitor/compare/clone 2342851 ns/iter (± 14211) 2364138 ns/iter (± 4527) 0.99
css/visitor/compare/visit_mut_span 2525932 ns/iter (± 9049) 2510393 ns/iter (± 5200) 1.01
css/visitor/compare/visit_mut_span_panic 2576954 ns/iter (± 13321) 2615062 ns/iter (± 4354) 0.99
css/visitor/compare/fold_span 3290608 ns/iter (± 19270) 3321902 ns/iter (± 11985) 0.99
css/visitor/compare/fold_span_panic 3450405 ns/iter (± 27267) 3497685 ns/iter (± 11626) 0.99
css/lexer/bootstrap_5_1_3 5418129 ns/iter (± 62632) 5538881 ns/iter (± 998) 0.98
css/lexer/foundation_6_7_4 4607298 ns/iter (± 22549) 4675091 ns/iter (± 2459) 0.99
css/lexer/tailwind_3_1_1 873026 ns/iter (± 5504) 888340 ns/iter (± 226) 0.98
css/parser/bootstrap_5_1_3 23550182 ns/iter (± 226378) 23940380 ns/iter (± 143394) 0.98
css/parser/foundation_6_7_4 18949804 ns/iter (± 187593) 19088951 ns/iter (± 37967) 0.99
css/parser/tailwind_3_1_1 3660693 ns/iter (± 15016) 3680254 ns/iter (± 2267) 0.99
es/codegen/colors 726519 ns/iter (± 396489) 742581 ns/iter (± 406560) 0.98
es/codegen/large 3022447 ns/iter (± 1586931) 3102986 ns/iter (± 1610663) 0.97
es/codegen/with-parser/colors 56671 ns/iter (± 560) 57997 ns/iter (± 686) 0.98
es/codegen/with-parser/large 569654 ns/iter (± 4482) 578294 ns/iter (± 3573) 0.99
es/minify/libraries/antd 1616763501 ns/iter (± 24080280) 1648536078 ns/iter (± 23640967) 0.98
es/minify/libraries/d3 322986182 ns/iter (± 4389971) 325818389 ns/iter (± 2318996) 0.99
es/minify/libraries/echarts 1240662531 ns/iter (± 21400973) 1282293853 ns/iter (± 21331060) 0.97
es/minify/libraries/jquery 95628935 ns/iter (± 1308859) 97436003 ns/iter (± 747454) 0.98
es/minify/libraries/lodash 119454398 ns/iter (± 1094081) 121504456 ns/iter (± 890482) 0.98
es/minify/libraries/moment 55679636 ns/iter (± 652220) 56500367 ns/iter (± 353232) 0.99
es/minify/libraries/react 20260404 ns/iter (± 78833) 20385651 ns/iter (± 87517) 0.99
es/minify/libraries/terser 242908634 ns/iter (± 2164553) 251428860 ns/iter (± 2344845) 0.97
es/minify/libraries/three 432083719 ns/iter (± 5043166) 444376043 ns/iter (± 6030289) 0.97
es/minify/libraries/typescript 3072812022 ns/iter (± 11918273) 3139761059 ns/iter (± 26384918) 0.98
es/minify/libraries/victory 658290263 ns/iter (± 10340781) 671476685 ns/iter (± 10742456) 0.98
es/minify/libraries/vue 142425926 ns/iter (± 2071489) 143049634 ns/iter (± 1739867) 1.00
es/visitor/compare/clone 2443981 ns/iter (± 61975) 2401065 ns/iter (± 11694) 1.02
es/visitor/compare/visit_mut_span 2794294 ns/iter (± 5140) 2799594 ns/iter (± 1670) 1.00
es/visitor/compare/visit_mut_span_panic 2833752 ns/iter (± 2895) 2831883 ns/iter (± 3820) 1.00
es/visitor/compare/fold_span 3934546 ns/iter (± 5407) 3939581 ns/iter (± 3787) 1.00
es/visitor/compare/fold_span_panic 4027221 ns/iter (± 5229) 4043698 ns/iter (± 9276) 1.00
es/lexer/colors 14681 ns/iter (± 68) 14875 ns/iter (± 34) 0.99
es/lexer/angular 6916748 ns/iter (± 18107) 6915369 ns/iter (± 11947) 1.00
es/lexer/backbone 839945 ns/iter (± 3817) 844062 ns/iter (± 2470) 1.00
es/lexer/jquery 4751212 ns/iter (± 5517) 4743355 ns/iter (± 7684) 1.00
es/lexer/jquery mobile 7311638 ns/iter (± 19274) 7314221 ns/iter (± 5640) 1.00
es/lexer/mootools 3721072 ns/iter (± 8861) 3736501 ns/iter (± 7242) 1.00
es/lexer/underscore 696143 ns/iter (± 2383) 699791 ns/iter (± 2597) 0.99
es/lexer/three 22218136 ns/iter (± 73200) 22275434 ns/iter (± 11124) 1.00
es/lexer/yui 4259871 ns/iter (± 16450) 4268864 ns/iter (± 1643) 1.00
es/parser/colors 34011 ns/iter (± 97) 33846 ns/iter (± 64) 1.00
es/parser/angular 16654512 ns/iter (± 204525) 16912234 ns/iter (± 91147) 0.98
es/parser/backbone 2379703 ns/iter (± 26179) 2440338 ns/iter (± 9275) 0.98
es/parser/jquery 12984002 ns/iter (± 153327) 13282318 ns/iter (± 92514) 0.98
es/parser/jquery mobile 20155306 ns/iter (± 266232) 20266332 ns/iter (± 177813) 0.99
es/parser/mootools 9858943 ns/iter (± 90393) 10083158 ns/iter (± 24016) 0.98
es/parser/underscore 2064050 ns/iter (± 13080) 2077804 ns/iter (± 12329) 0.99
es/parser/three 56875564 ns/iter (± 681465) 58948393 ns/iter (± 778075) 0.96
es/parser/yui 9978078 ns/iter (± 75563) 10218187 ns/iter (± 103146) 0.98
es/preset-env/usage/builtin_type 150764 ns/iter (± 34131) 155279 ns/iter (± 33816) 0.97
es/preset-env/usage/property 29110 ns/iter (± 272) 29527 ns/iter (± 62) 0.99
es/resolver/typescript 125722668 ns/iter (± 1572989) 129382169 ns/iter (± 3577586) 0.97
es/fixer/typescript 88657018 ns/iter (± 1824549) 91606178 ns/iter (± 1654351) 0.97
es/hygiene/typescript 201308054 ns/iter (± 2656521) 205329028 ns/iter (± 1988120) 0.98
es/resolver_with_hygiene/typescript 395433996 ns/iter (± 2326562) 406587463 ns/iter (± 3015924) 0.97
es/visitor/base-perf/module_clone 83543 ns/iter (± 604) 85462 ns/iter (± 486) 0.98
es/visitor/base-perf/fold_empty 93729 ns/iter (± 503) 94931 ns/iter (± 410) 0.99
es/visitor/base-perf/fold_noop_impl_all 94145 ns/iter (± 1099) 95307 ns/iter (± 259) 0.99
es/visitor/base-perf/fold_noop_impl_vec 94317 ns/iter (± 742) 95460 ns/iter (± 600) 0.99
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 62 ns/iter (± 0) 0.94
es/visitor/base-perf/boxing_unboxed_clone 43 ns/iter (± 0) 44 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_boxed 107 ns/iter (± 0) 109 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed 81 ns/iter (± 0) 82 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_contains_this 3413 ns/iter (± 44) 3526 ns/iter (± 64) 0.97
es/base/parallel/resolver/typescript 6990210510 ns/iter (± 408536394) 7031201283 ns/iter (± 434464736) 0.99
es/base/parallel/hygiene/typescript 2353095860 ns/iter (± 13918904) 2341099419 ns/iter (± 24921406) 1.01
misc/visitors/time-complexity/time 5 105 ns/iter (± 0) 106 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 342 ns/iter (± 6) 346 ns/iter (± 5) 0.99
misc/visitors/time-complexity/time 15 669 ns/iter (± 3) 672 ns/iter (± 0) 1.00
misc/visitors/time-complexity/time 20 1249 ns/iter (± 6) 1262 ns/iter (± 25) 0.99
misc/visitors/time-complexity/time 40 6671 ns/iter (± 46) 6854 ns/iter (± 33) 0.97
misc/visitors/time-complexity/time 60 17240 ns/iter (± 173) 17509 ns/iter (± 48) 0.98
es/full-target/es2016 268546 ns/iter (± 2838) 270177 ns/iter (± 668) 0.99
es/full-target/es2017 254192 ns/iter (± 1181) 260399 ns/iter (± 468) 0.98
es/full-target/es2018 242678 ns/iter (± 1558) 249178 ns/iter (± 627) 0.97
es2020_nullish_coalescing 97023 ns/iter (± 937) 99689 ns/iter (± 431) 0.97
es2020_optional_chaining 86805 ns/iter (± 556) 121999 ns/iter (± 385) 0.71
es2022_class_properties 153368 ns/iter (± 1361) 157001 ns/iter (± 358) 0.98
es2018_object_rest_spread 98158 ns/iter (± 811) 101007 ns/iter (± 204) 0.97
es2019_optional_catch_binding 87304 ns/iter (± 499) 89319 ns/iter (± 318) 0.98
es2017_async_to_generator 88025 ns/iter (± 521) 90271 ns/iter (± 117) 0.98
es2016_exponentiation 94539 ns/iter (± 942) 96726 ns/iter (± 235) 0.98
es2015_arrow 97524 ns/iter (± 637) 99438 ns/iter (± 260) 0.98
es2015_block_scoped_fn 95313 ns/iter (± 893) 97592 ns/iter (± 261) 0.98
es2015_block_scoping 181519 ns/iter (± 1332) 184758 ns/iter (± 224) 0.98

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

Please sign in to comment.