fix(es/compat): Make optional chaining pass less permissive (#6885)

**Related issue:**

 - Closes https://github.com/swc-project/swc/issues/6878.
This commit is contained in:
Donny/강동윤 2023-01-31 15:24:23 +09:00 committed by GitHub
parent f89d3d688c
commit 57781e90d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 68 additions and 70 deletions

View File

@ -0,0 +1,7 @@
try {
const foo = {};
foo?.bar.baz?.()
} catch (e) {
console.log('PASS')
}

View File

@ -2,7 +2,7 @@
// assignments in shortcutting chain
import _instanceof from "@swc/helpers/src/_instanceof.mjs";
import _type_of from "@swc/helpers/src/_type_of.mjs";
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;
var _o4_x, _o4_x1, _o5_x_y_z, _o5_x, _o5_x1, _o5_x2, _o5_x_y_z1, _o5_x3, _arr_i;
var a;
o === null || o === void 0 ? void 0 : o[a = 1];
a.toString();
@ -68,28 +68,28 @@ if ((_o4_x = o4.x) === null || _o4_x === void 0 ? void 0 : _o4_x.y) {
o4.x;
(_o4_x1 = o4.x) === null || _o4_x1 === void 0 ? void 0 : _o4_x1.y;
o4.x.y;
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) {
var _o5_x_y_z2, _o5_x4, _o5_x_y_z3, _o5_x5, _o5_x_y2;
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) {
var _o5_x_y_z2, _o5_x4, _o5_x_y_z3, _o5_x5;
o5.x;
o5.x.y;
o5.x.y.z;
o5.x.y.z.w; // true
(_o5_x_y_z2 = o5.x.y.z) === null || _o5_x_y_z2 === void 0 ? void 0 : _o5_x_y_z2.w; // true
(_o5_x4 = o5.x) === null || _o5_x4 === void 0 ? void 0 : _o5_x4.y.z.w; // true
(_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
(_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
} else {
var _o5_x6, _o5_x7, _o5_x_y_z4, _o5_x8, _o5_x_y3;
var _o5_x6, _o5_x7, _o5_x_y_z4, _o5_x8;
o5.x;
(_o5_x6 = o5.x) === null || _o5_x6 === void 0 ? void 0 : _o5_x6.y;
(_o5_x7 = o5.x) === null || _o5_x7 === void 0 ? void 0 : _o5_x7.y.z;
(_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;
(_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;
o5.x.y;
o5.x.y.z.w;
}
o5.x;
(_o5_x1 = o5.x) === null || _o5_x1 === void 0 ? void 0 : _o5_x1.y;
(_o5_x2 = o5.x) === null || _o5_x2 === void 0 ? void 0 : _o5_x2.y.z;
(_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;
(_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;
o5.x.y;
o5.x.y.z.w;
if (o6 === null || o6 === void 0 ? void 0 : o6.f()) {

View File

@ -4,7 +4,7 @@ import _type_of from "@swc/helpers/src/_type_of.mjs";
function someFunction(someOptionalObject) {
(null == someOptionalObject ? void 0 : someOptionalObject.someProperty) !== lastSomeProperty && (console.log(someOptionalObject), console.log(someOptionalObject.someProperty), lastSomeProperty = null == someOptionalObject ? void 0 : someOptionalObject.someProperty);
}
null == o || o[a = 1], a.toString(), null == o || o.x[b = 1], b.toString(), null == o || o(c = 1), c.toString(), null == o || o.x(d = 1), d.toString(), null == f || f(x), x, f, f(x), x, f, f(x), (null == o2 ? void 0 : o2.f(x)) ? (x, o2.f, null == o2 || o2.f, null == o2 || o2.f(x)) : (x, o2, null == o2 || o2.f, o2.f), x, o2, null == o2 || o2.f, o2.f, (null == o3 ? void 0 : o3.x) === 1 ? (o3, o3.x, null == o3 || o3.x) : (o3, null == o3 || o3.x, o3.x), o3, null == o3 || o3.x, o3.x, (null === (_o4_x = o4.x) || void 0 === _o4_x ? void 0 : _o4_x.y) ? (o4.x, o4.x.y, null === (_o4_x2 = o4.x) || void 0 === _o4_x2 || _o4_x2.y) : (o4.x, null === (_o4_x3 = o4.x) || void 0 === _o4_x3 || _o4_x3.y, o4.x.y), o4.x, null === (_o4_x1 = o4.x) || void 0 === _o4_x1 || _o4_x1.y, o4.x.y, (null === (_o5_x_y_z = null === (_o5_x = o5.x) || void 0 === _o5_x ? void 0 : null === (_o5_x_y = _o5_x.y) || void 0 === _o5_x_y ? void 0 : _o5_x_y.z) || void 0 === _o5_x_y_z ? void 0 : _o5_x_y_z.w) ? (o5.x, o5.x.y, o5.x.y.z, o5.x.y.z.w, null === (_o5_x_y_z2 = o5.x.y.z) || void 0 === _o5_x_y_z2 || _o5_x_y_z2.w, null === (_o5_x4 = o5.x) || void 0 === _o5_x4 || _o5_x4.y.z.w, null === (_o5_x_y_z3 = null === (_o5_x5 = o5.x) || void 0 === _o5_x5 ? void 0 : null === (_o5_x_y2 = _o5_x5.y) || void 0 === _o5_x_y2 ? void 0 : _o5_x_y2.z) || void 0 === _o5_x_y_z3 || _o5_x_y_z3.w) : (o5.x, null === (_o5_x6 = o5.x) || void 0 === _o5_x6 || _o5_x6.y, null === (_o5_x7 = o5.x) || void 0 === _o5_x7 || _o5_x7.y.z, null === (_o5_x_y_z4 = null === (_o5_x8 = o5.x) || void 0 === _o5_x8 ? void 0 : null === (_o5_x_y3 = _o5_x8.y) || void 0 === _o5_x_y3 ? void 0 : _o5_x_y3.z) || void 0 === _o5_x_y_z4 || _o5_x_y_z4.w, o5.x.y, o5.x.y.z.w), o5.x, null === (_o5_x1 = o5.x) || void 0 === _o5_x1 || _o5_x1.y, null === (_o5_x2 = o5.x) || void 0 === _o5_x2 || _o5_x2.y.z, null === (_o5_x_y_z1 = null === (_o5_x3 = o5.x) || void 0 === _o5_x3 ? void 0 : null === (_o5_x_y1 = _o5_x3.y) || void 0 === _o5_x_y1 ? void 0 : _o5_x_y1.z) || void 0 === _o5_x_y_z1 || _o5_x_y_z1.w, o5.x.y, o5.x.y.z.w, (null == o6 ? void 0 : o6.f()) ? (o6, o6.f) : (o6, null == o6 || o6.f, o6.f), o6, null == o6 || o6.f, o6.f, someFunction({
null == o || o[a = 1], a.toString(), null == o || o.x[b = 1], b.toString(), null == o || o(c = 1), c.toString(), null == o || o.x(d = 1), d.toString(), null == f || f(x), x, f, f(x), x, f, f(x), (null == o2 ? void 0 : o2.f(x)) ? (x, o2.f, null == o2 || o2.f, null == o2 || o2.f(x)) : (x, o2, null == o2 || o2.f, o2.f), x, o2, null == o2 || o2.f, o2.f, (null == o3 ? void 0 : o3.x) === 1 ? (o3, o3.x, null == o3 || o3.x) : (o3, null == o3 || o3.x, o3.x), o3, null == o3 || o3.x, o3.x, (null === (_o4_x = o4.x) || void 0 === _o4_x ? void 0 : _o4_x.y) ? (o4.x, o4.x.y, null === (_o4_x2 = o4.x) || void 0 === _o4_x2 || _o4_x2.y) : (o4.x, null === (_o4_x3 = o4.x) || void 0 === _o4_x3 || _o4_x3.y, o4.x.y), o4.x, null === (_o4_x1 = o4.x) || void 0 === _o4_x1 || _o4_x1.y, o4.x.y, (null === (_o5_x_y_z = null === (_o5_x = o5.x) || void 0 === _o5_x ? void 0 : _o5_x.y.z) || void 0 === _o5_x_y_z ? void 0 : _o5_x_y_z.w) ? (o5.x, o5.x.y, o5.x.y.z, o5.x.y.z.w, null === (_o5_x_y_z2 = o5.x.y.z) || void 0 === _o5_x_y_z2 || _o5_x_y_z2.w, null === (_o5_x4 = o5.x) || void 0 === _o5_x4 || _o5_x4.y.z.w, null === (_o5_x_y_z3 = null === (_o5_x5 = o5.x) || void 0 === _o5_x5 ? void 0 : _o5_x5.y.z) || void 0 === _o5_x_y_z3 || _o5_x_y_z3.w) : (o5.x, null === (_o5_x6 = o5.x) || void 0 === _o5_x6 || _o5_x6.y, null === (_o5_x7 = o5.x) || void 0 === _o5_x7 || _o5_x7.y.z, null === (_o5_x_y_z4 = null === (_o5_x8 = o5.x) || void 0 === _o5_x8 ? void 0 : _o5_x8.y.z) || void 0 === _o5_x_y_z4 || _o5_x_y_z4.w, o5.x.y, o5.x.y.z.w), o5.x, null === (_o5_x1 = o5.x) || void 0 === _o5_x1 || _o5_x1.y, null === (_o5_x2 = o5.x) || void 0 === _o5_x2 || _o5_x2.y.z, null === (_o5_x_y_z1 = null === (_o5_x3 = o5.x) || void 0 === _o5_x3 ? void 0 : _o5_x3.y.z) || void 0 === _o5_x_y_z1 || _o5_x_y_z1.w, o5.x.y, o5.x.y.z.w, (null == o6 ? void 0 : o6.f()) ? (o6, o6.f) : (o6, null == o6 || o6.f, o6.f), o6, null == o6 || o6.f, o6.f, someFunction({
someProperty: 42
}), someFunction(void 0);
for(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, a, b, c, d, _o4_x2, _o4_x3, _o5_x_y_z2, _o5_x4, _o5_x_y_z3, _o5_x5, _o5_x_y2, _o5_x6, _o5_x7, _o5_x_y_z4, _o5_x8, _o5_x_y3, lastSomeProperty, _arr_i1, i = 0; (null === (_arr_i = arr[i]) || void 0 === _arr_i ? void 0 : _arr_i.tag) === "left";)i += 1, (null === (_arr_i1 = arr[i]) || void 0 === _arr_i1 ? void 0 : _arr_i1.tag) === "right" && console.log("I should ALSO be reachable");
for(var _o4_x, _o4_x1, _o5_x_y_z, _o5_x, _o5_x1, _o5_x2, _o5_x_y_z1, _o5_x3, _arr_i, a, b, c, d, _o4_x2, _o4_x3, _o5_x_y_z2, _o5_x4, _o5_x_y_z3, _o5_x5, _o5_x6, _o5_x7, _o5_x_y_z4, _o5_x8, lastSomeProperty, _arr_i1, i = 0; (null === (_arr_i = arr[i]) || void 0 === _arr_i ? void 0 : _arr_i.tag) === "left";)i += 1, (null === (_arr_i1 = arr[i]) || void 0 === _arr_i1 ? void 0 : _arr_i1.tag) === "right" && console.log("I should ALSO be reachable");

View File

@ -1,15 +1,15 @@
//// [deleteChain.ts]
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;
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;
o1 === null || o1 === void 0 ? void 0 : delete o1.b;
delete (o1 === null || o1 === void 0 ? void 0 : o1.b);
o2 === null || o2 === void 0 ? void 0 : delete o2.b.c;
o2 === null || o2 === void 0 ? void 0 : delete o2.b.c;
(_o3_b = o3.b) === null || _o3_b === void 0 ? void 0 : delete _o3_b.c;
delete ((_o3_b1 = o3.b) === null || _o3_b1 === void 0 ? void 0 : _o3_b1.c);
(_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;
(_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;
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);
(_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;
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);
(_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"];
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"]);
(_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;
(_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;
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);
(_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;
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);
(_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"];
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"]);

View File

@ -1,3 +1,3 @@
//// [deleteChain.ts]
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;
null == o1 || delete o1.b, delete (null == o1 ? void 0 : o1.b), null == o2 || delete o2.b.c, null == o2 || delete o2.b.c, null === (_o3_b = o3.b) || void 0 === _o3_b || delete _o3_b.c, delete (null === (_o3_b1 = o3.b) || void 0 === _o3_b1 ? void 0 : _o3_b1.c), null === (_o4_b_c_d = null === (_o4_b = o4.b) || void 0 === _o4_b ? void 0 : null === (_o4_b_c = _o4_b.c) || void 0 === _o4_b_c ? void 0 : _o4_b_c.d) || void 0 === _o4_b_c_d || delete _o4_b_c_d.e, null === (_o4_b_c_d1 = null === (_o4_b1 = o4.b) || void 0 === _o4_b1 ? void 0 : null === (_o4_b_c1 = _o4_b1.c) || void 0 === _o4_b_c1 ? void 0 : _o4_b_c1.d) || void 0 === _o4_b_c_d1 || delete _o4_b_c_d1.e, delete (null === (_o4_b_c_d2 = null === (_o4_b2 = o4.b) || void 0 === _o4_b2 ? void 0 : null === (_o4_b_c2 = _o4_b2.c) || void 0 === _o4_b_c2 ? void 0 : _o4_b_c2.d) || void 0 === _o4_b_c_d2 ? void 0 : _o4_b_c_d2.e), null === (_o5_b_c_d = null === (_o5_b_c = null === (_o5_b = o5.b) || void 0 === _o5_b ? void 0 : null === (_o5_b_call = _o5_b.call(o5)) || void 0 === _o5_b_call ? void 0 : _o5_b_call.c) || void 0 === _o5_b_c ? void 0 : _o5_b_c.d) || void 0 === _o5_b_c_d || delete _o5_b_c_d.e, delete (null === (_o5_b_c_d1 = null === (_o5_b_c1 = null === (_o5_b1 = o5.b) || void 0 === _o5_b1 ? void 0 : null === (_o5_b_call1 = _o5_b1.call(o5)) || void 0 === _o5_b_call1 ? void 0 : _o5_b_call1.c) || void 0 === _o5_b_c1 ? void 0 : _o5_b_c1.d) || void 0 === _o5_b_c_d1 ? void 0 : _o5_b_c_d1.e), null === (_o6_b_c_d = null === (_o6_b = o6.b) || void 0 === _o6_b ? void 0 : null === (_o6_b_c = _o6_b.c) || void 0 === _o6_b_c ? void 0 : _o6_b_c.d) || void 0 === _o6_b_c_d || delete _o6_b_c_d.e, delete (null === (_o6_b_c_d1 = null === (_o6_b1 = o6.b) || void 0 === _o6_b1 ? void 0 : null === (_o6_b_c1 = _o6_b1.c) || void 0 === _o6_b_c1 ? void 0 : _o6_b_c1.d) || void 0 === _o6_b_c_d1 ? void 0 : _o6_b_c_d1.e);
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;
null == o1 || delete o1.b, delete (null == o1 ? void 0 : o1.b), null == o2 || delete o2.b.c, null == o2 || delete o2.b.c, null === (_o3_b = o3.b) || void 0 === _o3_b || delete _o3_b.c, delete (null === (_o3_b1 = o3.b) || void 0 === _o3_b1 ? void 0 : _o3_b1.c), null === (_o4_b_c_d = null === (_o4_b = o4.b) || void 0 === _o4_b ? void 0 : _o4_b.c.d) || void 0 === _o4_b_c_d || delete _o4_b_c_d.e, null === (_o4_b_c_d1 = null === (_o4_b1 = o4.b) || void 0 === _o4_b1 ? void 0 : _o4_b1.c.d) || void 0 === _o4_b_c_d1 || delete _o4_b_c_d1.e, delete (null === (_o4_b_c_d2 = null === (_o4_b2 = o4.b) || void 0 === _o4_b2 ? void 0 : _o4_b2.c.d) || void 0 === _o4_b_c_d2 ? void 0 : _o4_b_c_d2.e), null === (_o5_b_c_d = null === (_o5_b = o5.b) || void 0 === _o5_b ? void 0 : _o5_b.call(o5).c.d) || void 0 === _o5_b_c_d || delete _o5_b_c_d.e, delete (null === (_o5_b_c_d1 = null === (_o5_b1 = o5.b) || void 0 === _o5_b1 ? void 0 : _o5_b1.call(o5).c.d) || void 0 === _o5_b_c_d1 ? void 0 : _o5_b_c_d1.e), null === (_o6_b_c_d = null === (_o6_b = o6.b) || void 0 === _o6_b ? void 0 : _o6_b.c.d) || void 0 === _o6_b_c_d || delete _o6_b_c_d.e, delete (null === (_o6_b_c_d1 = null === (_o6_b1 = o6.b) || void 0 === _o6_b1 ? void 0 : _o6_b1.c.d) || void 0 === _o6_b_c_d1 ? void 0 : _o6_b_c_d1.e);

View File

@ -1,16 +1,16 @@
//// [elementAccessChain.ts]
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;
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;
o1 === null || o1 === void 0 ? void 0 : o1["b"];
o2 === null || o2 === void 0 ? void 0 : o2["b"].c;
o2 === null || o2 === void 0 ? void 0 : o2.b["c"];
(_o3_b = o3["b"]) === null || _o3_b === void 0 ? void 0 : _o3_b.c;
(_o3_b1 = o3.b) === null || _o3_b1 === void 0 ? void 0 : _o3_b1["c"];
(_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;
(_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"];
(_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;
(_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"];
(_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;
(_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"];
(_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;
(_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"];
(_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;
(_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"];
(_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;
(_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"];
(_o6 = o6()) === null || _o6 === void 0 ? void 0 : _o6["x"];
// GH#36031
o2 === null || o2 === void 0 ? void 0 : o2["b"].c;

View File

@ -1,3 +1,3 @@
//// [elementAccessChain.ts]
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;
null == o1 || o1.b, null == o2 || o2.b.c, null == o2 || o2.b.c, null === (_o3_b = o3.b) || void 0 === _o3_b || _o3_b.c, null === (_o3_b1 = o3.b) || void 0 === _o3_b1 || _o3_b1.c, null === (_o4_b_c_d = null === (_o4_b = o4.b) || void 0 === _o4_b ? void 0 : null === (_o4_b_c = _o4_b.c) || void 0 === _o4_b_c ? void 0 : _o4_b_c.d) || void 0 === _o4_b_c_d || _o4_b_c_d.e, null === (_o4_b_c_d1 = null === (_o4_b1 = o4.b) || void 0 === _o4_b1 ? void 0 : null === (_o4_b_c1 = _o4_b1.c) || void 0 === _o4_b_c1 ? void 0 : _o4_b_c1.d) || void 0 === _o4_b_c_d1 || _o4_b_c_d1.e, null === (_o5_b_c_d = null === (_o5_b_c = null === (_o5_b = o5.b) || void 0 === _o5_b ? void 0 : null === (_o5_b_call = _o5_b.call(o5)) || void 0 === _o5_b_call ? void 0 : _o5_b_call.c) || void 0 === _o5_b_c ? void 0 : _o5_b_c.d) || void 0 === _o5_b_c_d || _o5_b_c_d.e, null === (_o5_b_c_d1 = null === (_o5_b_c1 = null === (_o5_b1 = o5.b) || void 0 === _o5_b1 ? void 0 : null === (_o5_b_call1 = _o5_b1.call(o5)) || void 0 === _o5_b_call1 ? void 0 : _o5_b_call1.c) || void 0 === _o5_b_c1 ? void 0 : _o5_b_c1.d) || void 0 === _o5_b_c_d1 || _o5_b_c_d1.e, null === (_o5_b_c_d2 = null === (_o5_b_c2 = null === (_o5_b2 = o5.b) || void 0 === _o5_b2 ? void 0 : null === (_o5_b_call2 = _o5_b2.call(o5)) || void 0 === _o5_b_call2 ? void 0 : _o5_b_call2.c) || void 0 === _o5_b_c2 ? void 0 : _o5_b_c2.d) || void 0 === _o5_b_c_d2 || _o5_b_c_d2.e, null === (_o5_b_c_d3 = null === (_o5_b_c3 = null === (_o5_b3 = o5.b) || void 0 === _o5_b3 ? void 0 : null === (_o5_b_call3 = _o5_b3.call(o5)) || void 0 === _o5_b_call3 ? void 0 : _o5_b_call3.c) || void 0 === _o5_b_c3 ? void 0 : _o5_b_c3.d) || void 0 === _o5_b_c_d3 || _o5_b_c_d3.e, null === (_o6 = o6()) || void 0 === _o6 || _o6.x, null == o2 || o2.b.c, null == o2 || o2.b.c, null == o2 || o2.b.c, null == o2 || o2.b.c;
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;
null == o1 || o1.b, null == o2 || o2.b.c, null == o2 || o2.b.c, null === (_o3_b = o3.b) || void 0 === _o3_b || _o3_b.c, null === (_o3_b1 = o3.b) || void 0 === _o3_b1 || _o3_b1.c, null === (_o4_b_c_d = null === (_o4_b = o4.b) || void 0 === _o4_b ? void 0 : _o4_b.c.d) || void 0 === _o4_b_c_d || _o4_b_c_d.e, null === (_o4_b_c_d1 = null === (_o4_b1 = o4.b) || void 0 === _o4_b1 ? void 0 : _o4_b1.c.d) || void 0 === _o4_b_c_d1 || _o4_b_c_d1.e, null === (_o5_b_c_d = null === (_o5_b = o5.b) || void 0 === _o5_b ? void 0 : _o5_b.call(o5).c.d) || void 0 === _o5_b_c_d || _o5_b_c_d.e, null === (_o5_b_c_d1 = null === (_o5_b1 = o5.b) || void 0 === _o5_b1 ? void 0 : _o5_b1.call(o5).c.d) || void 0 === _o5_b_c_d1 || _o5_b_c_d1.e, null === (_o5_b_c_d2 = null === (_o5_b2 = o5.b) || void 0 === _o5_b2 ? void 0 : _o5_b2.call(o5).c.d) || void 0 === _o5_b_c_d2 || _o5_b_c_d2.e, null === (_o5_b_c_d3 = null === (_o5_b3 = o5.b) || void 0 === _o5_b3 ? void 0 : _o5_b3.call(o5).c.d) || void 0 === _o5_b_c_d3 || _o5_b_c_d3.e, null === (_o6 = o6()) || void 0 === _o6 || _o6.x, null == o2 || o2.b.c, null == o2 || o2.b.c, null == o2 || o2.b.c, null == o2 || o2.b.c;

View File

@ -1,10 +1,10 @@
//// [propertyAccessChain.ts]
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;
var _o3_b, _o4_b_c_d, _o4_b, _o5_b_c_d, _o5_b, _o6;
o1 === null || o1 === void 0 ? void 0 : o1.b;
o2 === null || o2 === void 0 ? void 0 : o2.b.c;
(_o3_b = o3.b) === null || _o3_b === void 0 ? void 0 : _o3_b.c;
(_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;
(_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;
(_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;
(_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;
(_o6 = o6()) === null || _o6 === void 0 ? void 0 : _o6.x;
// GH#34109
(o1 === null || o1 === void 0 ? void 0 : o1.b) ? 1 : 0;

View File

@ -1,3 +1,3 @@
//// [propertyAccessChain.ts]
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;
null == o1 || o1.b, null == o2 || o2.b.c, null === (_o3_b = o3.b) || void 0 === _o3_b || _o3_b.c, null === (_o4_b_c_d = null === (_o4_b = o4.b) || void 0 === _o4_b ? void 0 : null === (_o4_b_c = _o4_b.c) || void 0 === _o4_b_c ? void 0 : _o4_b_c.d) || void 0 === _o4_b_c_d || _o4_b_c_d.e, null === (_o5_b_c_d = null === (_o5_b_c = null === (_o5_b = o5.b) || void 0 === _o5_b ? void 0 : null === (_o5_b_call = _o5_b.call(o5)) || void 0 === _o5_b_call ? void 0 : _o5_b_call.c) || void 0 === _o5_b_c ? void 0 : _o5_b_c.d) || void 0 === _o5_b_c_d || _o5_b_c_d.e, null === (_o6 = o6()) || void 0 === _o6 || _o6.x, null == o1 || o1.b, null == o2 || o2.b.c, null == o2 || o2.b.c;
var _o3_b, _o4_b_c_d, _o4_b, _o5_b_c_d, _o5_b, _o6;
null == o1 || o1.b, null == o2 || o2.b.c, null === (_o3_b = o3.b) || void 0 === _o3_b || _o3_b.c, null === (_o4_b_c_d = null === (_o4_b = o4.b) || void 0 === _o4_b ? void 0 : _o4_b.c.d) || void 0 === _o4_b_c_d || _o4_b_c_d.e, null === (_o5_b_c_d = null === (_o5_b = o5.b) || void 0 === _o5_b ? void 0 : _o5_b.call(o5).c.d) || void 0 === _o5_b_c_d || _o5_b_c_d.e, null === (_o6 = o6()) || void 0 === _o6 || _o6.x, null == o1 || o1.b, null == o2 || o2.b.c, null == o2 || o2.b.c;

View File

@ -27,7 +27,6 @@ pub fn optional_chaining(c: Config) -> impl Fold + VisitMut {
struct OptChaining {
vars_without_init: Vec<VarDeclarator>,
vars_with_init: Vec<VarDeclarator>,
in_opt_chain: bool,
c: Config,
}
@ -149,6 +148,7 @@ impl OptChaining {
}
}
#[swc_trace]
impl OptChaining {
/// Only called from [VisitMut].
fn handle_unary(&mut self, e: &mut UnaryExpr) -> Expr {
@ -243,15 +243,6 @@ impl OptChaining {
}
fn handle_member(&mut self, e: &mut MemberExpr) -> Result<CondExpr, Expr> {
if self.in_opt_chain {
let mut opt = OptChainExpr {
span: e.span,
question_dot_token: DUMMY_SP,
base: OptChainBase::Member(e.take()),
};
return Ok(self.unwrap(&mut opt));
}
let obj = match &mut *e.obj {
Expr::Member(obj) => {
let obj = self.handle_member(obj).map(Expr::Cond);
@ -481,17 +472,19 @@ impl OptChaining {
});
match &mut *call.callee {
Expr::Member(obj) => Box::new(Expr::Member(MemberExpr {
span: obj.span,
obj: Expr::Assign(AssignExpr {
span: DUMMY_SP,
op: op!("="),
left: PatOrExpr::Pat(this_obj.clone().into()),
right: obj.obj.take(),
})
.into(),
prop: obj.prop.take(),
})),
Expr::Member(obj) if !obj.obj.is_opt_chain() => {
Box::new(Expr::Member(MemberExpr {
span: obj.span,
obj: Expr::Assign(AssignExpr {
span: DUMMY_SP,
op: op!("="),
left: PatOrExpr::Pat(this_obj.clone().into()),
right: obj.obj.take(),
})
.into(),
prop: obj.prop.take(),
}))
}
_ => Box::new(Expr::Assign(AssignExpr {
span: DUMMY_SP,
op: op!("="),
@ -557,10 +550,7 @@ impl OptChaining {
}
};
let old = self.in_opt_chain;
self.in_opt_chain = true;
base.visit_mut_with(self);
self.in_opt_chain = old;
base
}

View File

@ -433,17 +433,18 @@ orders[client.key]?.price;
"#,
r#"
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;
foo === null || foo === void 0 ? void 0 : foo.bar;
(_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;
(_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;
(_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;
orders === null || orders === void 0 ? void 0 : orders[0].price;
orders === null || orders === void 0 ? void 0 : (_orders_ = orders[0]) === null || _orders_ === void 0 ? void 0 : _orders_.price;
orders[client === null || client === void 0 ? void 0 : client.key].price;
(_orders_client_key = orders[client.key]) === null || _orders_client_key === void 0 ? void 0 : _orders_client_key.price;
(0, a === null || a === void 0 ? void 0 : a.b).c;
(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;"#
var _a_b_c, _a_b_c_d, _a_b, _a_b_c1, _a_b_c_d1, _orders_, _orders_client_key, _c;
foo === null || foo === void 0 ? void 0 : foo.bar;
(_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;
(_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;
(_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;
orders === null || orders === void 0 ? void 0 : orders[0].price;
orders === null || orders === void 0 ? void 0 : (_orders_ = orders[0]) === null || _orders_ === void 0 ? void 0 : _orders_.price;
orders[client === null || client === void 0 ? void 0 : client.key].price;
(_orders_client_key = orders[client.key]) === null || _orders_client_key === void 0 ? void 0 : _orders_client_key.price;
(0, a === null || a === void 0 ? void 0 : a.b).c;
(0, (_c = (0, a === null || a === void 0 ? void 0 : a.b).c) === null || _c === void 0 ? void 0 : _c.d).e;
"#
);
// general_unary

View File

@ -1,2 +1,2 @@
const Global = globalThis.Global;
const value = Global?.property.method?.()
const a = globalThis.Global;
const value = a?.b.c?.()