Skip to content

Commit 57781e9

Browse files
authoredJan 31, 2023
fix(es/compat): Make optional chaining pass less permissive (#6885)
**Related issue:** - Closes #6878.
1 parent f89d3d6 commit 57781e9

12 files changed

+68
-70
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
try {
3+
const foo = {};
4+
foo?.bar.baz?.()
5+
} catch (e) {
6+
console.log('PASS')
7+
}

‎crates/swc/tests/tsc-references/controlFlowOptionalChain.1.normal.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// assignments in shortcutting chain
33
import _instanceof from "@swc/helpers/src/_instanceof.mjs";
44
import _type_of from "@swc/helpers/src/_type_of.mjs";
5-
var _o4_x, _o4_x1, _o5_x_y_z, _o5_x, _o5_x_y, _o5_x1, _o5_x2, _o5_x_y_z1, _o5_x3, _o5_x_y1, _arr_i;
5+
var _o4_x, _o4_x1, _o5_x_y_z, _o5_x, _o5_x1, _o5_x2, _o5_x_y_z1, _o5_x3, _arr_i;
66
var a;
77
o === null || o === void 0 ? void 0 : o[a = 1];
88
a.toString();
@@ -68,28 +68,28 @@ if ((_o4_x = o4.x) === null || _o4_x === void 0 ? void 0 : _o4_x.y) {
6868
o4.x;
6969
(_o4_x1 = o4.x) === null || _o4_x1 === void 0 ? void 0 : _o4_x1.y;
7070
o4.x.y;
71-
if ((_o5_x_y_z = (_o5_x = o5.x) === null || _o5_x === void 0 ? void 0 : (_o5_x_y = _o5_x.y) === null || _o5_x_y === void 0 ? void 0 : _o5_x_y.z) === null || _o5_x_y_z === void 0 ? void 0 : _o5_x_y_z.w) {
72-
var _o5_x_y_z2, _o5_x4, _o5_x_y_z3, _o5_x5, _o5_x_y2;
71+
if ((_o5_x_y_z = (_o5_x = o5.x) === null || _o5_x === void 0 ? void 0 : _o5_x.y.z) === null || _o5_x_y_z === void 0 ? void 0 : _o5_x_y_z.w) {
72+
var _o5_x_y_z2, _o5_x4, _o5_x_y_z3, _o5_x5;
7373
o5.x;
7474
o5.x.y;
7575
o5.x.y.z;
7676
o5.x.y.z.w; // true
7777
(_o5_x_y_z2 = o5.x.y.z) === null || _o5_x_y_z2 === void 0 ? void 0 : _o5_x_y_z2.w; // true
7878
(_o5_x4 = o5.x) === null || _o5_x4 === void 0 ? void 0 : _o5_x4.y.z.w; // true
79-
(_o5_x_y_z3 = (_o5_x5 = o5.x) === null || _o5_x5 === void 0 ? void 0 : (_o5_x_y2 = _o5_x5.y) === null || _o5_x_y2 === void 0 ? void 0 : _o5_x_y2.z) === null || _o5_x_y_z3 === void 0 ? void 0 : _o5_x_y_z3.w; // true
79+
(_o5_x_y_z3 = (_o5_x5 = o5.x) === null || _o5_x5 === void 0 ? void 0 : _o5_x5.y.z) === null || _o5_x_y_z3 === void 0 ? void 0 : _o5_x_y_z3.w; // true
8080
} else {
81-
var _o5_x6, _o5_x7, _o5_x_y_z4, _o5_x8, _o5_x_y3;
81+
var _o5_x6, _o5_x7, _o5_x_y_z4, _o5_x8;
8282
o5.x;
8383
(_o5_x6 = o5.x) === null || _o5_x6 === void 0 ? void 0 : _o5_x6.y;
8484
(_o5_x7 = o5.x) === null || _o5_x7 === void 0 ? void 0 : _o5_x7.y.z;
85-
(_o5_x_y_z4 = (_o5_x8 = o5.x) === null || _o5_x8 === void 0 ? void 0 : (_o5_x_y3 = _o5_x8.y) === null || _o5_x_y3 === void 0 ? void 0 : _o5_x_y3.z) === null || _o5_x_y_z4 === void 0 ? void 0 : _o5_x_y_z4.w;
85+
(_o5_x_y_z4 = (_o5_x8 = o5.x) === null || _o5_x8 === void 0 ? void 0 : _o5_x8.y.z) === null || _o5_x_y_z4 === void 0 ? void 0 : _o5_x_y_z4.w;
8686
o5.x.y;
8787
o5.x.y.z.w;
8888
}
8989
o5.x;
9090
(_o5_x1 = o5.x) === null || _o5_x1 === void 0 ? void 0 : _o5_x1.y;
9191
(_o5_x2 = o5.x) === null || _o5_x2 === void 0 ? void 0 : _o5_x2.y.z;
92-
(_o5_x_y_z1 = (_o5_x3 = o5.x) === null || _o5_x3 === void 0 ? void 0 : (_o5_x_y1 = _o5_x3.y) === null || _o5_x_y1 === void 0 ? void 0 : _o5_x_y1.z) === null || _o5_x_y_z1 === void 0 ? void 0 : _o5_x_y_z1.w;
92+
(_o5_x_y_z1 = (_o5_x3 = o5.x) === null || _o5_x3 === void 0 ? void 0 : _o5_x3.y.z) === null || _o5_x_y_z1 === void 0 ? void 0 : _o5_x_y_z1.w;
9393
o5.x.y;
9494
o5.x.y.z.w;
9595
if (o6 === null || o6 === void 0 ? void 0 : o6.f()) {

‎crates/swc/tests/tsc-references/controlFlowOptionalChain.2.minified.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
//// [deleteChain.ts]
2-
var _o3_b, _o3_b1, _o4_b_c_d, _o4_b, _o4_b_c, _o4_b_c_d1, _o4_b1, _o4_b_c1, _o4_b_c_d2, _o4_b2, _o4_b_c2, _o5_b_c_d, _o5_b_c, _o5_b, _o5_b_call, _o5_b_c_d1, _o5_b_c1, _o5_b1, _o5_b_call1, _o6_b_c_d, _o6_b, _o6_b_c, _o6_b_c_d1, _o6_b1, _o6_b_c1;
2+
var _o3_b, _o3_b1, _o4_b_c_d, _o4_b, _o4_b_c_d1, _o4_b1, _o4_b_c_d2, _o4_b2, _o5_b_c_d, _o5_b, _o5_b_c_d1, _o5_b1, _o6_b_c_d, _o6_b, _o6_b_c_d1, _o6_b1;
33
o1 === null || o1 === void 0 ? void 0 : delete o1.b;
44
delete (o1 === null || o1 === void 0 ? void 0 : o1.b);
55
o2 === null || o2 === void 0 ? void 0 : delete o2.b.c;
66
o2 === null || o2 === void 0 ? void 0 : delete o2.b.c;
77
(_o3_b = o3.b) === null || _o3_b === void 0 ? void 0 : delete _o3_b.c;
88
delete ((_o3_b1 = o3.b) === null || _o3_b1 === void 0 ? void 0 : _o3_b1.c);
9-
(_o4_b_c_d = (_o4_b = o4.b) === null || _o4_b === void 0 ? void 0 : (_o4_b_c = _o4_b.c) === null || _o4_b_c === void 0 ? void 0 : _o4_b_c.d) === null || _o4_b_c_d === void 0 ? void 0 : delete _o4_b_c_d.e;
10-
(_o4_b_c_d1 = (_o4_b1 = o4.b) === null || _o4_b1 === void 0 ? void 0 : (_o4_b_c1 = _o4_b1.c) === null || _o4_b_c1 === void 0 ? void 0 : _o4_b_c1.d) === null || _o4_b_c_d1 === void 0 ? void 0 : delete _o4_b_c_d1.e;
11-
delete ((_o4_b_c_d2 = (_o4_b2 = o4.b) === null || _o4_b2 === void 0 ? void 0 : (_o4_b_c2 = _o4_b2.c) === null || _o4_b_c2 === void 0 ? void 0 : _o4_b_c2.d) === null || _o4_b_c_d2 === void 0 ? void 0 : _o4_b_c_d2.e);
12-
(_o5_b_c_d = (_o5_b_c = (_o5_b = o5.b) === null || _o5_b === void 0 ? void 0 : (_o5_b_call = _o5_b.call(o5)) === null || _o5_b_call === void 0 ? void 0 : _o5_b_call.c) === null || _o5_b_c === void 0 ? void 0 : _o5_b_c.d) === null || _o5_b_c_d === void 0 ? void 0 : delete _o5_b_c_d.e;
13-
delete ((_o5_b_c_d1 = (_o5_b_c1 = (_o5_b1 = o5.b) === null || _o5_b1 === void 0 ? void 0 : (_o5_b_call1 = _o5_b1.call(o5)) === null || _o5_b_call1 === void 0 ? void 0 : _o5_b_call1.c) === null || _o5_b_c1 === void 0 ? void 0 : _o5_b_c1.d) === null || _o5_b_c_d1 === void 0 ? void 0 : _o5_b_c_d1.e);
14-
(_o6_b_c_d = (_o6_b = o6.b) === null || _o6_b === void 0 ? void 0 : (_o6_b_c = _o6_b["c"]) === null || _o6_b_c === void 0 ? void 0 : _o6_b_c.d) === null || _o6_b_c_d === void 0 ? void 0 : delete _o6_b_c_d["e"];
15-
delete ((_o6_b_c_d1 = (_o6_b1 = o6.b) === null || _o6_b1 === void 0 ? void 0 : (_o6_b_c1 = _o6_b1["c"]) === null || _o6_b_c1 === void 0 ? void 0 : _o6_b_c1.d) === null || _o6_b_c_d1 === void 0 ? void 0 : _o6_b_c_d1["e"]);
9+
(_o4_b_c_d = (_o4_b = o4.b) === null || _o4_b === void 0 ? void 0 : _o4_b.c.d) === null || _o4_b_c_d === void 0 ? void 0 : delete _o4_b_c_d.e;
10+
(_o4_b_c_d1 = (_o4_b1 = o4.b) === null || _o4_b1 === void 0 ? void 0 : _o4_b1.c.d) === null || _o4_b_c_d1 === void 0 ? void 0 : delete _o4_b_c_d1.e;
11+
delete ((_o4_b_c_d2 = (_o4_b2 = o4.b) === null || _o4_b2 === void 0 ? void 0 : _o4_b2.c.d) === null || _o4_b_c_d2 === void 0 ? void 0 : _o4_b_c_d2.e);
12+
(_o5_b_c_d = (_o5_b = o5.b) === null || _o5_b === void 0 ? void 0 : _o5_b.call(o5).c.d) === null || _o5_b_c_d === void 0 ? void 0 : delete _o5_b_c_d.e;
13+
delete ((_o5_b_c_d1 = (_o5_b1 = o5.b) === null || _o5_b1 === void 0 ? void 0 : _o5_b1.call(o5).c.d) === null || _o5_b_c_d1 === void 0 ? void 0 : _o5_b_c_d1.e);
14+
(_o6_b_c_d = (_o6_b = o6.b) === null || _o6_b === void 0 ? void 0 : _o6_b["c"].d) === null || _o6_b_c_d === void 0 ? void 0 : delete _o6_b_c_d["e"];
15+
delete ((_o6_b_c_d1 = (_o6_b1 = o6.b) === null || _o6_b1 === void 0 ? void 0 : _o6_b1["c"].d) === null || _o6_b_c_d1 === void 0 ? void 0 : _o6_b_c_d1["e"]);

‎crates/swc/tests/tsc-references/deleteChain.2.minified.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/swc/tests/tsc-references/elementAccessChain.1.normal.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
//// [elementAccessChain.ts]
2-
var _o3_b, _o3_b1, _o4_b_c_d, _o4_b, _o4_b_c, _o4_b_c_d1, _o4_b1, _o4_b_c1, _o5_b_c_d, _o5_b_c, _o5_b, _o5_b_call, _o5_b_c_d1, _o5_b_c1, _o5_b1, _o5_b_call1, _o5_b_c_d2, _o5_b_c2, _o5_b2, _o5_b_call2, _o5_b_c_d3, _o5_b_c3, _o5_b3, _o5_b_call3, _o6;
2+
var _o3_b, _o3_b1, _o4_b_c_d, _o4_b, _o4_b_c_d1, _o4_b1, _o5_b_c_d, _o5_b, _o5_b_c_d1, _o5_b1, _o5_b_c_d2, _o5_b2, _o5_b_c_d3, _o5_b3, _o6;
33
o1 === null || o1 === void 0 ? void 0 : o1["b"];
44
o2 === null || o2 === void 0 ? void 0 : o2["b"].c;
55
o2 === null || o2 === void 0 ? void 0 : o2.b["c"];
66
(_o3_b = o3["b"]) === null || _o3_b === void 0 ? void 0 : _o3_b.c;
77
(_o3_b1 = o3.b) === null || _o3_b1 === void 0 ? void 0 : _o3_b1["c"];
8-
(_o4_b_c_d = (_o4_b = o4.b) === null || _o4_b === void 0 ? void 0 : (_o4_b_c = _o4_b["c"]) === null || _o4_b_c === void 0 ? void 0 : _o4_b_c.d) === null || _o4_b_c_d === void 0 ? void 0 : _o4_b_c_d.e;
9-
(_o4_b_c_d1 = (_o4_b1 = o4.b) === null || _o4_b1 === void 0 ? void 0 : (_o4_b_c1 = _o4_b1["c"]) === null || _o4_b_c1 === void 0 ? void 0 : _o4_b_c1.d) === null || _o4_b_c_d1 === void 0 ? void 0 : _o4_b_c_d1["e"];
10-
(_o5_b_c_d = (_o5_b_c = (_o5_b = o5.b) === null || _o5_b === void 0 ? void 0 : (_o5_b_call = _o5_b.call(o5)) === null || _o5_b_call === void 0 ? void 0 : _o5_b_call["c"]) === null || _o5_b_c === void 0 ? void 0 : _o5_b_c.d) === null || _o5_b_c_d === void 0 ? void 0 : _o5_b_c_d.e;
11-
(_o5_b_c_d1 = (_o5_b_c1 = (_o5_b1 = o5.b) === null || _o5_b1 === void 0 ? void 0 : (_o5_b_call1 = _o5_b1.call(o5)) === null || _o5_b_call1 === void 0 ? void 0 : _o5_b_call1["c"]) === null || _o5_b_c1 === void 0 ? void 0 : _o5_b_c1.d) === null || _o5_b_c_d1 === void 0 ? void 0 : _o5_b_c_d1["e"];
12-
(_o5_b_c_d2 = (_o5_b_c2 = (_o5_b2 = o5["b"]) === null || _o5_b2 === void 0 ? void 0 : (_o5_b_call2 = _o5_b2.call(o5)) === null || _o5_b_call2 === void 0 ? void 0 : _o5_b_call2["c"]) === null || _o5_b_c2 === void 0 ? void 0 : _o5_b_c2.d) === null || _o5_b_c_d2 === void 0 ? void 0 : _o5_b_c_d2.e;
13-
(_o5_b_c_d3 = (_o5_b_c3 = (_o5_b3 = o5["b"]) === null || _o5_b3 === void 0 ? void 0 : (_o5_b_call3 = _o5_b3.call(o5)) === null || _o5_b_call3 === void 0 ? void 0 : _o5_b_call3["c"]) === null || _o5_b_c3 === void 0 ? void 0 : _o5_b_c3.d) === null || _o5_b_c_d3 === void 0 ? void 0 : _o5_b_c_d3["e"];
8+
(_o4_b_c_d = (_o4_b = o4.b) === null || _o4_b === void 0 ? void 0 : _o4_b["c"].d) === null || _o4_b_c_d === void 0 ? void 0 : _o4_b_c_d.e;
9+
(_o4_b_c_d1 = (_o4_b1 = o4.b) === null || _o4_b1 === void 0 ? void 0 : _o4_b1["c"].d) === null || _o4_b_c_d1 === void 0 ? void 0 : _o4_b_c_d1["e"];
10+
(_o5_b_c_d = (_o5_b = o5.b) === null || _o5_b === void 0 ? void 0 : _o5_b.call(o5)["c"].d) === null || _o5_b_c_d === void 0 ? void 0 : _o5_b_c_d.e;
11+
(_o5_b_c_d1 = (_o5_b1 = o5.b) === null || _o5_b1 === void 0 ? void 0 : _o5_b1.call(o5)["c"].d) === null || _o5_b_c_d1 === void 0 ? void 0 : _o5_b_c_d1["e"];
12+
(_o5_b_c_d2 = (_o5_b2 = o5["b"]) === null || _o5_b2 === void 0 ? void 0 : _o5_b2.call(o5)["c"].d) === null || _o5_b_c_d2 === void 0 ? void 0 : _o5_b_c_d2.e;
13+
(_o5_b_c_d3 = (_o5_b3 = o5["b"]) === null || _o5_b3 === void 0 ? void 0 : _o5_b3.call(o5)["c"].d) === null || _o5_b_c_d3 === void 0 ? void 0 : _o5_b_c_d3["e"];
1414
(_o6 = o6()) === null || _o6 === void 0 ? void 0 : _o6["x"];
1515
// GH#36031
1616
o2 === null || o2 === void 0 ? void 0 : o2["b"].c;

‎crates/swc/tests/tsc-references/elementAccessChain.2.minified.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/swc/tests/tsc-references/propertyAccessChain.1.normal.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
//// [propertyAccessChain.ts]
2-
var _o3_b, _o4_b_c_d, _o4_b, _o4_b_c, _o5_b_c_d, _o5_b_c, _o5_b, _o5_b_call, _o6;
2+
var _o3_b, _o4_b_c_d, _o4_b, _o5_b_c_d, _o5_b, _o6;
33
o1 === null || o1 === void 0 ? void 0 : o1.b;
44
o2 === null || o2 === void 0 ? void 0 : o2.b.c;
55
(_o3_b = o3.b) === null || _o3_b === void 0 ? void 0 : _o3_b.c;
6-
(_o4_b_c_d = (_o4_b = o4.b) === null || _o4_b === void 0 ? void 0 : (_o4_b_c = _o4_b.c) === null || _o4_b_c === void 0 ? void 0 : _o4_b_c.d) === null || _o4_b_c_d === void 0 ? void 0 : _o4_b_c_d.e;
7-
(_o5_b_c_d = (_o5_b_c = (_o5_b = o5.b) === null || _o5_b === void 0 ? void 0 : (_o5_b_call = _o5_b.call(o5)) === null || _o5_b_call === void 0 ? void 0 : _o5_b_call.c) === null || _o5_b_c === void 0 ? void 0 : _o5_b_c.d) === null || _o5_b_c_d === void 0 ? void 0 : _o5_b_c_d.e;
6+
(_o4_b_c_d = (_o4_b = o4.b) === null || _o4_b === void 0 ? void 0 : _o4_b.c.d) === null || _o4_b_c_d === void 0 ? void 0 : _o4_b_c_d.e;
7+
(_o5_b_c_d = (_o5_b = o5.b) === null || _o5_b === void 0 ? void 0 : _o5_b.call(o5).c.d) === null || _o5_b_c_d === void 0 ? void 0 : _o5_b_c_d.e;
88
(_o6 = o6()) === null || _o6 === void 0 ? void 0 : _o6.x;
99
// GH#34109
1010
(o1 === null || o1 === void 0 ? void 0 : o1.b) ? 1 : 0;

‎crates/swc/tests/tsc-references/propertyAccessChain.2.minified.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/swc_ecma_transforms_compat/src/es2020/opt_chaining.rs

+14-24
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ pub fn optional_chaining(c: Config) -> impl Fold + VisitMut {
2727
struct OptChaining {
2828
vars_without_init: Vec<VarDeclarator>,
2929
vars_with_init: Vec<VarDeclarator>,
30-
in_opt_chain: bool,
3130
c: Config,
3231
}
3332

@@ -149,6 +148,7 @@ impl OptChaining {
149148
}
150149
}
151150

151+
#[swc_trace]
152152
impl OptChaining {
153153
/// Only called from [VisitMut].
154154
fn handle_unary(&mut self, e: &mut UnaryExpr) -> Expr {
@@ -243,15 +243,6 @@ impl OptChaining {
243243
}
244244

245245
fn handle_member(&mut self, e: &mut MemberExpr) -> Result<CondExpr, Expr> {
246-
if self.in_opt_chain {
247-
let mut opt = OptChainExpr {
248-
span: e.span,
249-
question_dot_token: DUMMY_SP,
250-
base: OptChainBase::Member(e.take()),
251-
};
252-
return Ok(self.unwrap(&mut opt));
253-
}
254-
255246
let obj = match &mut *e.obj {
256247
Expr::Member(obj) => {
257248
let obj = self.handle_member(obj).map(Expr::Cond);
@@ -481,17 +472,19 @@ impl OptChaining {
481472
});
482473

483474
match &mut *call.callee {
484-
Expr::Member(obj) => Box::new(Expr::Member(MemberExpr {
485-
span: obj.span,
486-
obj: Expr::Assign(AssignExpr {
487-
span: DUMMY_SP,
488-
op: op!("="),
489-
left: PatOrExpr::Pat(this_obj.clone().into()),
490-
right: obj.obj.take(),
491-
})
492-
.into(),
493-
prop: obj.prop.take(),
494-
})),
475+
Expr::Member(obj) if !obj.obj.is_opt_chain() => {
476+
Box::new(Expr::Member(MemberExpr {
477+
span: obj.span,
478+
obj: Expr::Assign(AssignExpr {
479+
span: DUMMY_SP,
480+
op: op!("="),
481+
left: PatOrExpr::Pat(this_obj.clone().into()),
482+
right: obj.obj.take(),
483+
})
484+
.into(),
485+
prop: obj.prop.take(),
486+
}))
487+
}
495488
_ => Box::new(Expr::Assign(AssignExpr {
496489
span: DUMMY_SP,
497490
op: op!("="),
@@ -557,10 +550,7 @@ impl OptChaining {
557550
}
558551
};
559552

560-
let old = self.in_opt_chain;
561-
self.in_opt_chain = true;
562553
base.visit_mut_with(self);
563-
self.in_opt_chain = old;
564554

565555
base
566556
}

‎crates/swc_ecma_transforms_compat/tests/es2020_optional_chaining.rs

+12-11
Original file line numberDiff line numberDiff line change
@@ -433,17 +433,18 @@ orders[client.key]?.price;
433433
434434
"#,
435435
r#"
436-
var _a_b_c, _a_b, _a_b_c_d, _a_b1, _a_b_c1, _a_b_c2, _a_b_c_d1, _orders_, _orders_client_key, _c, _ref;
437-
foo === null || foo === void 0 ? void 0 : foo.bar;
438-
(_a_b_c = a === null || a === void 0 ? void 0 : (_a_b = a.b) === null || _a_b === void 0 ? void 0 : _a_b.c) === null || _a_b_c === void 0 ? void 0 : _a_b_c.d.e;
439-
(_a_b_c_d = (_a_b1 = a.b) === null || _a_b1 === void 0 ? void 0 : (_a_b_c1 = _a_b1.c) === null || _a_b_c1 === void 0 ? void 0 : _a_b_c1.d) === null || _a_b_c_d === void 0 ? void 0 : _a_b_c_d.e;
440-
(_a_b_c2 = a.b.c) === null || _a_b_c2 === void 0 ? void 0 : (_a_b_c_d1 = _a_b_c2.d) === null || _a_b_c_d1 === void 0 ? void 0 : _a_b_c_d1.e;
441-
orders === null || orders === void 0 ? void 0 : orders[0].price;
442-
orders === null || orders === void 0 ? void 0 : (_orders_ = orders[0]) === null || _orders_ === void 0 ? void 0 : _orders_.price;
443-
orders[client === null || client === void 0 ? void 0 : client.key].price;
444-
(_orders_client_key = orders[client.key]) === null || _orders_client_key === void 0 ? void 0 : _orders_client_key.price;
445-
(0, a === null || a === void 0 ? void 0 : a.b).c;
446-
(0, (_c = (_ref = (0, a === null || a === void 0 ? void 0 : a.b)) === null || _ref === void 0 ? void 0 : _ref.c) === null || _c === void 0 ? void 0 : _c.d).e;"#
436+
var _a_b_c, _a_b_c_d, _a_b, _a_b_c1, _a_b_c_d1, _orders_, _orders_client_key, _c;
437+
foo === null || foo === void 0 ? void 0 : foo.bar;
438+
(_a_b_c = a === null || a === void 0 ? void 0 : a.b.c) === null || _a_b_c === void 0 ? void 0 : _a_b_c.d.e;
439+
(_a_b_c_d = (_a_b = a.b) === null || _a_b === void 0 ? void 0 : _a_b.c.d) === null || _a_b_c_d === void 0 ? void 0 : _a_b_c_d.e;
440+
(_a_b_c1 = a.b.c) === null || _a_b_c1 === void 0 ? void 0 : (_a_b_c_d1 = _a_b_c1.d) === null || _a_b_c_d1 === void 0 ? void 0 : _a_b_c_d1.e;
441+
orders === null || orders === void 0 ? void 0 : orders[0].price;
442+
orders === null || orders === void 0 ? void 0 : (_orders_ = orders[0]) === null || _orders_ === void 0 ? void 0 : _orders_.price;
443+
orders[client === null || client === void 0 ? void 0 : client.key].price;
444+
(_orders_client_key = orders[client.key]) === null || _orders_client_key === void 0 ? void 0 : _orders_client_key.price;
445+
(0, a === null || a === void 0 ? void 0 : a.b).c;
446+
(0, (_c = (0, a === null || a === void 0 ? void 0 : a.b).c) === null || _c === void 0 ? void 0 : _c.d).e;
447+
"#
447448
);
448449

449450
// general_unary
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
const Global = globalThis.Global;
2-
const value = Global?.property.method?.()
1+
const a = globalThis.Global;
2+
const value = a?.b.c?.()

1 commit comments

Comments
 (1)

github-actions[bot] commented on Jan 31, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 57781e9 Previous: d6a24a2 Ratio
es/full/bugs-1 303291 ns/iter (± 16570) 309802 ns/iter (± 16631) 0.98
es/full/minify/libraries/antd 1733943928 ns/iter (± 51013518) 1888278113 ns/iter (± 23508677) 0.92
es/full/minify/libraries/d3 299274544 ns/iter (± 9395034) 345924771 ns/iter (± 4650468) 0.87
es/full/minify/libraries/echarts 1267742183 ns/iter (± 25015538) 1434440202 ns/iter (± 9841089) 0.88
es/full/minify/libraries/jquery 89049011 ns/iter (± 1281799) 100163701 ns/iter (± 1413845) 0.89
es/full/minify/libraries/lodash 105541457 ns/iter (± 3695653) 115931403 ns/iter (± 1386889) 0.91
es/full/minify/libraries/moment 52336813 ns/iter (± 582550) 55877649 ns/iter (± 463433) 0.94
es/full/minify/libraries/react 19165081 ns/iter (± 368805) 20242656 ns/iter (± 476393) 0.95
es/full/minify/libraries/terser 248695540 ns/iter (± 4585471) 286629499 ns/iter (± 3403485) 0.87
es/full/minify/libraries/three 439843825 ns/iter (± 11775796) 533303254 ns/iter (± 10722964) 0.82
es/full/minify/libraries/typescript 3259270338 ns/iter (± 37861058) 3455838567 ns/iter (± 10834929) 0.94
es/full/minify/libraries/victory 666157226 ns/iter (± 21522815) 801252914 ns/iter (± 6471678) 0.83
es/full/minify/libraries/vue 127160033 ns/iter (± 2493113) 142936676 ns/iter (± 2091811) 0.89
es/full/codegen/es3 26049 ns/iter (± 239) 26806 ns/iter (± 51) 0.97
es/full/codegen/es5 26554 ns/iter (± 190) 26785 ns/iter (± 62) 0.99
es/full/codegen/es2015 25997 ns/iter (± 268) 26726 ns/iter (± 53) 0.97
es/full/codegen/es2016 26163 ns/iter (± 371) 26714 ns/iter (± 42) 0.98
es/full/codegen/es2017 26014 ns/iter (± 162) 26738 ns/iter (± 37) 0.97
es/full/codegen/es2018 26004 ns/iter (± 448) 26709 ns/iter (± 43) 0.97
es/full/codegen/es2019 26148 ns/iter (± 285) 26689 ns/iter (± 50) 0.98
es/full/codegen/es2020 26090 ns/iter (± 410) 26749 ns/iter (± 51) 0.98
es/full/all/es3 173908392 ns/iter (± 2468937) 173121974 ns/iter (± 3536610) 1.00
es/full/all/es5 166111476 ns/iter (± 2730177) 164225426 ns/iter (± 3650661) 1.01
es/full/all/es2015 126030765 ns/iter (± 3430630) 126004397 ns/iter (± 1218096) 1.00
es/full/all/es2016 125538470 ns/iter (± 1360183) 125796805 ns/iter (± 1625815) 1.00
es/full/all/es2017 123840480 ns/iter (± 2022094) 122792078 ns/iter (± 4776058) 1.01
es/full/all/es2018 120248262 ns/iter (± 1895969) 120126060 ns/iter (± 1099379) 1.00
es/full/all/es2019 120771382 ns/iter (± 2932808) 119990575 ns/iter (± 1268828) 1.01
es/full/all/es2020 114748012 ns/iter (± 1603589) 116387558 ns/iter (± 1490564) 0.99
es/full/parser 531639 ns/iter (± 15300) 540206 ns/iter (± 9667) 0.98
es/full/base/fixer 21661 ns/iter (± 261) 22164 ns/iter (± 38) 0.98
es/full/base/resolver_and_hygiene 78126 ns/iter (± 594) 79496 ns/iter (± 64) 0.98
serialization of ast node 119 ns/iter (± 1) 123 ns/iter (± 0) 0.97
serialization of serde 126 ns/iter (± 1) 128 ns/iter (± 0) 0.98
css/minify/libraries/bootstrap 27341055 ns/iter (± 230291) 29041821 ns/iter (± 88707) 0.94
css/visitor/compare/clone 2045472 ns/iter (± 23737) 2077088 ns/iter (± 20061) 0.98
css/visitor/compare/visit_mut_span 2200420 ns/iter (± 21744) 2313313 ns/iter (± 8334) 0.95
css/visitor/compare/visit_mut_span_panic 2257657 ns/iter (± 17633) 2341976 ns/iter (± 8125) 0.96
css/visitor/compare/fold_span 2956057 ns/iter (± 47952) 3078977 ns/iter (± 24236) 0.96
css/visitor/compare/fold_span_panic 3068363 ns/iter (± 28246) 3234725 ns/iter (± 25656) 0.95
css/lexer/bootstrap_5_1_3 5030099 ns/iter (± 71392) 5203202 ns/iter (± 1852) 0.97
css/lexer/foundation_6_7_4 4186358 ns/iter (± 27319) 4370751 ns/iter (± 4757) 0.96
css/lexer/tailwind_3_1_1 803422 ns/iter (± 9091) 831447 ns/iter (± 371) 0.97
css/parser/bootstrap_5_1_3 21250097 ns/iter (± 197238) 22405359 ns/iter (± 59829) 0.95
css/parser/foundation_6_7_4 16868886 ns/iter (± 247592) 17905157 ns/iter (± 48779) 0.94
css/parser/tailwind_3_1_1 3249342 ns/iter (± 38987) 3331469 ns/iter (± 2689) 0.98
es/codegen/colors 337960 ns/iter (± 188867) 320818 ns/iter (± 180612) 1.05
es/codegen/large 1032897 ns/iter (± 539307) 1083226 ns/iter (± 553097) 0.95
es/codegen/with-parser/colors 46602 ns/iter (± 738) 48104 ns/iter (± 448) 0.97
es/codegen/with-parser/large 516957 ns/iter (± 3645) 534819 ns/iter (± 2176) 0.97
es/minify/libraries/antd 1499523158 ns/iter (± 36939212) 1632998077 ns/iter (± 18345462) 0.92
es/minify/libraries/d3 255661612 ns/iter (± 6942592) 294360454 ns/iter (± 3193775) 0.87
es/minify/libraries/echarts 1079823474 ns/iter (± 18273013) 1240237536 ns/iter (± 5076271) 0.87
es/minify/libraries/jquery 76914628 ns/iter (± 978880) 83072420 ns/iter (± 1016333) 0.93
es/minify/libraries/lodash 93134692 ns/iter (± 1422696) 99945257 ns/iter (± 1775997) 0.93
es/minify/libraries/moment 45749582 ns/iter (± 641396) 47928415 ns/iter (± 576327) 0.95
es/minify/libraries/react 16866706 ns/iter (± 140634) 17644065 ns/iter (± 110490) 0.96
es/minify/libraries/terser 206921398 ns/iter (± 3699513) 240564196 ns/iter (± 4217218) 0.86
es/minify/libraries/three 353579488 ns/iter (± 8098980) 442739662 ns/iter (± 4071789) 0.80
es/minify/libraries/typescript 2808502295 ns/iter (± 20985069) 2937230473 ns/iter (± 12264862) 0.96
es/minify/libraries/victory 553716698 ns/iter (± 19332848) 691390958 ns/iter (± 7008644) 0.80
es/minify/libraries/vue 112481472 ns/iter (± 1723458) 125452264 ns/iter (± 2342506) 0.90
es/visitor/compare/clone 2326580 ns/iter (± 25468) 2440518 ns/iter (± 9513) 0.95
es/visitor/compare/visit_mut_span 2696482 ns/iter (± 36087) 2858682 ns/iter (± 7711) 0.94
es/visitor/compare/visit_mut_span_panic 2754780 ns/iter (± 26368) 2906953 ns/iter (± 24914) 0.95
es/visitor/compare/fold_span 3837226 ns/iter (± 30011) 4039094 ns/iter (± 19158) 0.95
es/visitor/compare/fold_span_panic 3998347 ns/iter (± 44711) 4226156 ns/iter (± 17623) 0.95
es/lexer/colors 16940 ns/iter (± 177) 17247 ns/iter (± 58) 0.98
es/lexer/angular 8044756 ns/iter (± 43292) 8258708 ns/iter (± 6038) 0.97
es/lexer/backbone 1056537 ns/iter (± 10047) 1082790 ns/iter (± 466) 0.98
es/lexer/jquery 5810177 ns/iter (± 79621) 5983649 ns/iter (± 3707) 0.97
es/lexer/jquery mobile 9040082 ns/iter (± 119443) 9216810 ns/iter (± 5031) 0.98
es/lexer/mootools 4581859 ns/iter (± 37756) 4682332 ns/iter (± 4330) 0.98
es/lexer/underscore 885581 ns/iter (± 10845) 901800 ns/iter (± 332) 0.98
es/lexer/three 27083040 ns/iter (± 166917) 27919736 ns/iter (± 13656) 0.97
es/lexer/yui 4935632 ns/iter (± 28458) 5060511 ns/iter (± 5227) 0.98
es/parser/colors 30388 ns/iter (± 454) 30946 ns/iter (± 154) 0.98
es/parser/angular 15699832 ns/iter (± 371747) 17208235 ns/iter (± 337737) 0.91
es/parser/backbone 2265935 ns/iter (± 31022) 2326100 ns/iter (± 10338) 0.97
es/parser/jquery 12335422 ns/iter (± 106355) 13002632 ns/iter (± 143777) 0.95
es/parser/jquery mobile 19297796 ns/iter (± 325457) 22045675 ns/iter (± 213782) 0.88
es/parser/mootools 9276789 ns/iter (± 159109) 9704457 ns/iter (± 37385) 0.96
es/parser/underscore 1933896 ns/iter (± 19594) 1969503 ns/iter (± 10659) 0.98
es/parser/three 55916414 ns/iter (± 825592) 62271575 ns/iter (± 175726) 0.90
es/parser/yui 9430863 ns/iter (± 111271) 9769398 ns/iter (± 107008) 0.97
es/preset-env/usage/builtin_type 141159 ns/iter (± 32841) 144658 ns/iter (± 33736) 0.98
es/preset-env/usage/property 20237 ns/iter (± 182) 20548 ns/iter (± 88) 0.98
es/resolver/typescript 115982267 ns/iter (± 2808460) 125146563 ns/iter (± 1991846) 0.93
es/fixer/typescript 90001749 ns/iter (± 1508819) 98500357 ns/iter (± 755244) 0.91
es/hygiene/typescript 190594974 ns/iter (± 2822436) 211116361 ns/iter (± 2624766) 0.90
es/resolver_with_hygiene/typescript 327180138 ns/iter (± 5087384) 363773344 ns/iter (± 2257322) 0.90
es/visitor/base-perf/module_clone 75501 ns/iter (± 2006) 75874 ns/iter (± 1716) 1.00
es/visitor/base-perf/fold_empty 84812 ns/iter (± 1405) 85826 ns/iter (± 2072) 0.99
es/visitor/base-perf/fold_noop_impl_all 84703 ns/iter (± 1317) 85667 ns/iter (± 1573) 0.99
es/visitor/base-perf/fold_noop_impl_vec 83694 ns/iter (± 1596) 86215 ns/iter (± 1729) 0.97
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 56 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed_clone 58 ns/iter (± 0) 59 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_boxed 104 ns/iter (± 1) 105 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 100 ns/iter (± 0) 104 ns/iter (± 0) 0.96
es/visitor/base-perf/visit_contains_this 3514 ns/iter (± 50) 3581 ns/iter (± 101) 0.98
es/base/parallel/resolver/typescript 6010038776 ns/iter (± 660487649) 5460277506 ns/iter (± 603814025) 1.10
es/base/parallel/hygiene/typescript 2464016960 ns/iter (± 36857365) 2423379420 ns/iter (± 34695966) 1.02
misc/visitors/time-complexity/time 5 101 ns/iter (± 1) 102 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 312 ns/iter (± 3) 320 ns/iter (± 4) 0.97
misc/visitors/time-complexity/time 15 651 ns/iter (± 10) 658 ns/iter (± 1) 0.99
misc/visitors/time-complexity/time 20 1271 ns/iter (± 12) 1234 ns/iter (± 6) 1.03
misc/visitors/time-complexity/time 40 6455 ns/iter (± 72) 6851 ns/iter (± 38) 0.94
misc/visitors/time-complexity/time 60 16889 ns/iter (± 282) 17324 ns/iter (± 178) 0.97
es/full-target/es2016 185642 ns/iter (± 1383) 188424 ns/iter (± 447) 0.99
es/full-target/es2017 177164 ns/iter (± 3029) 183783 ns/iter (± 322) 0.96
es/full-target/es2018 171974 ns/iter (± 1111) 173108 ns/iter (± 522) 0.99
es2020_nullish_coalescing 66351 ns/iter (± 530) 67134 ns/iter (± 468) 0.99
es2020_optional_chaining 94715 ns/iter (± 6881) 95864 ns/iter (± 5811) 0.99
es2022_class_properties 93792 ns/iter (± 455) 94174 ns/iter (± 333) 1.00
es2018_object_rest_spread 71157 ns/iter (± 658) 71563 ns/iter (± 107) 0.99
es2019_optional_catch_binding 60672 ns/iter (± 689) 61640 ns/iter (± 39) 0.98
es2017_async_to_generator 60885 ns/iter (± 574) 62129 ns/iter (± 56) 0.98
es2016_exponentiation 64354 ns/iter (± 783) 65140 ns/iter (± 98) 0.99
es2015_arrow 70110 ns/iter (± 752) 70304 ns/iter (± 330) 1.00
es2015_block_scoped_fn 66281 ns/iter (± 375) 66736 ns/iter (± 122) 0.99
es2015_block_scoping 158260 ns/iter (± 9691) 158017 ns/iter (± 7910) 1.00
es2015_classes 114509 ns/iter (± 1941) 118236 ns/iter (± 491) 0.97
es2015_computed_props 60398 ns/iter (± 605) 61387 ns/iter (± 130) 0.98
es2015_destructuring 115627 ns/iter (± 1201) 116338 ns/iter (± 284) 0.99
es2015_duplicate_keys 61988 ns/iter (± 549) 64408 ns/iter (± 169) 0.96
es2015_parameters 78123 ns/iter (± 1193) 80189 ns/iter (± 328) 0.97
es2015_fn_name 65269 ns/iter (± 640) 67337 ns/iter (± 667) 0.97
es2015_for_of 62817 ns/iter (± 650) 64828 ns/iter (± 105) 0.97
es2015_instanceof 62072 ns/iter (± 331) 63984 ns/iter (± 60) 0.97
es2015_shorthand_property 59194 ns/iter (± 415) 61351 ns/iter (± 101) 0.96
es2015_spread 59297 ns/iter (± 412) 61503 ns/iter (± 106) 0.96
es2015_sticky_regex 61026 ns/iter (± 747) 62929 ns/iter (± 114) 0.97
es2015_typeof_symbol 60975 ns/iter (± 788) 63008 ns/iter (± 89) 0.97
es/transform/baseline/base 51347 ns/iter (± 424) 52439 ns/iter (± 111) 0.98
es/transform/baseline/common_reserved_word 61162 ns/iter (± 460) 62814 ns/iter (± 130) 0.97
es/transform/baseline/common_typescript 138943 ns/iter (± 2083) 169953 ns/iter (± 371) 0.82
es/target/es3 163605 ns/iter (± 1634) 170555 ns/iter (± 337) 0.96
es/target/es2015 603532 ns/iter (± 3522) 633327 ns/iter (± 1297) 0.95
es/target/es2016 63213 ns/iter (± 518) 65231 ns/iter (± 125) 0.97
es/target/es2017 59330 ns/iter (± 656) 62246 ns/iter (± 77) 0.95
es/target/es2018 79165 ns/iter (± 881) 81428 ns/iter (± 111) 0.97
es/target/es2020 128174 ns/iter (± 1210) 132917 ns/iter (± 311) 0.96
babelify-only 678531 ns/iter (± 1821) 671313 ns/iter (± 981) 1.01
parse_and_babelify_angular 44750114 ns/iter (± 890218) 47784372 ns/iter (± 865587) 0.94
parse_and_babelify_backbone 5404620 ns/iter (± 109246) 5782883 ns/iter (± 53399) 0.93
parse_and_babelify_jquery 32046735 ns/iter (± 663327) 35913793 ns/iter (± 424433) 0.89
parse_and_babelify_jquery_mobile 55707249 ns/iter (± 1409763) 61652723 ns/iter (± 447220) 0.90
parse_and_babelify_mootools 33427694 ns/iter (± 1131600) 38322459 ns/iter (± 303486) 0.87
parse_and_babelify_underscore 4343721 ns/iter (± 74540) 4576697 ns/iter (± 33161) 0.95
parse_and_babelify_yui 34707159 ns/iter (± 1210764) 37453752 ns/iter (± 657749) 0.93
html/minify/document/css_spec 41631845 ns/iter (± 431253) 45524867 ns/iter (± 750270) 0.91
html/minify/document/github 17348910 ns/iter (± 280565) 18048450 ns/iter (± 46093) 0.96
html/minify/document/stackoverflow 15443055 ns/iter (± 174324) 16349311 ns/iter (± 72925) 0.94
html/minify/document_fragment/css_spec 39863686 ns/iter (± 593616) 43599961 ns/iter (± 181263) 0.91
html/minify/document_fragment/github 16757806 ns/iter (± 145736) 17336889 ns/iter (± 58690) 0.97
html/minify/document_fragment/stackoverflow 14986392 ns/iter (± 134132) 15702879 ns/iter (± 74035) 0.95
html/document/visitor/compare/clone 341196 ns/iter (± 3469) 339095 ns/iter (± 2130) 1.01
html/document/visitor/compare/visit_mut_span 362615 ns/iter (± 2055) 366249 ns/iter (± 1657) 0.99
html/document/visitor/compare/visit_mut_span_panic 365165 ns/iter (± 6110) 373269 ns/iter (± 1765) 0.98
html/document/visitor/compare/fold_span 401196 ns/iter (± 3281) 405298 ns/iter (± 2389) 0.99
html/document/visitor/compare/fold_span_panic 459511 ns/iter (± 4289) 465607 ns/iter (± 1747) 0.99
html/document_fragment/visitor/compare/clone 335276 ns/iter (± 3910) 339121 ns/iter (± 1729) 0.99
html/document_fragment/visitor/compare/visit_mut_span 366262 ns/iter (± 2752) 364166 ns/iter (± 1728) 1.01
html/document_fragment/visitor/compare/visit_mut_span_panic 376850 ns/iter (± 2187) 375883 ns/iter (± 1790) 1.00
html/document_fragment/visitor/compare/fold_span 402582 ns/iter (± 3694) 404239 ns/iter (± 1844) 1.00
html/document_fragment/visitor/compare/fold_span_panic 456298 ns/iter (± 1846) 459827 ns/iter (± 2402) 0.99
html/lexer/css_2021_spec 15494874 ns/iter (± 130133) 15531170 ns/iter (± 74100) 1.00
html/lexer/github_com_17_05_2022 5911381 ns/iter (± 29564) 6017259 ns/iter (± 8666) 0.98
html/lexer/stackoverflow_com_17_05_2022 5604983 ns/iter (± 36848) 5627114 ns/iter (± 1521) 1.00
html/parser/parser_document/css_2021_spec 24466746 ns/iter (± 703609) 27073207 ns/iter (± 214285) 0.90
html/parser/parser_document/github_com_17_05_2022 8648162 ns/iter (± 100765) 8826056 ns/iter (± 10269) 0.98
html/parser/parser_document/stackoverflow_com_17_05_2022 7672282 ns/iter (± 143196) 7740955 ns/iter (± 7251) 0.99
html/parser/parser_document_fragment/css_2021_spec 25058777 ns/iter (± 329571) 27395080 ns/iter (± 188566) 0.91
html/parser/parser_document_fragment/github_com_17_05_2022 8606683 ns/iter (± 76678) 8851555 ns/iter (± 8453) 0.97
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7663803 ns/iter (± 81932) 7751416 ns/iter (± 6346) 0.99

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

Please sign in to comment.