Skip to content

Commit

Permalink
fix(es/compat): Revert #7610 (#7813)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Reverts #7610.
 - Closes #7798.
 - Closes #7789.
 - Opens #7561.
  • Loading branch information
kdy1 committed Aug 15, 2023
1 parent 47350a8 commit 42dec55
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 61 deletions.
5 changes: 5 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7789/input/1.js
@@ -0,0 +1,5 @@
function ap() {
return this?.foo
}

blackbox(ap)
5 changes: 5 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7789/output/1.js
@@ -0,0 +1,5 @@
function ap() {
var _this;
return (_this = this) === null || _this === void 0 ? void 0 : _this.foo;
}
blackbox(ap);
3 changes: 3 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7898/input/1.js
@@ -0,0 +1,3 @@
info({
...(this?.$current?.$getBase() || {}),
});
3 changes: 3 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7898/output/1.js
@@ -0,0 +1,3 @@
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
var _this_$current, _this;
info(_object_spread({}, ((_this = this) === null || _this === void 0 ? void 0 : (_this_$current = _this.$current) === null || _this_$current === void 0 ? void 0 : _this_$current.$getBase()) || {}));
49 changes: 2 additions & 47 deletions crates/swc_ecma_transforms_compat/src/es2020/optional_chaining.rs
@@ -1,7 +1,6 @@
use std::mem;

use serde::Deserialize;
use swc_atoms::js_word;
use swc_common::{util::take::Take, DUMMY_SP};
use swc_ecma_ast::*;
use swc_ecma_utils::{
Expand Down Expand Up @@ -182,13 +181,7 @@ impl OptChaining {
next = m.obj.take();
m.prop.visit_mut_with(self);
chain.push(if optional {
match *next {
Expr::This(_) => Gathering::OptMember(
m.take(),
Ident::new(js_word!("this"), DUMMY_SP),
),
_ => Gathering::OptMember(m.take(), self.memoize(&next)),
}
Gathering::OptMember(m.take(), self.memoize(&next))
} else {
Gathering::Member(m.take())
});
Expand Down Expand Up @@ -306,11 +299,7 @@ impl OptChaining {
Gathering::OptMember(mut m, memo) => {
committed_cond.push(CondExpr {
span: DUMMY_SP,
test: if memo.sym == js_word!("this") {
eq_null_or_undefined(&memo, no_document_all)
} else {
init_and_eq_null_or_undefined(&memo, current, no_document_all)
},
test: init_and_eq_null_or_undefined(&memo, current, no_document_all),
cons: if is_delete {
true.into()
} else {
Expand Down Expand Up @@ -420,37 +409,3 @@ fn init_and_eq_null_or_undefined(i: &Ident, init: Expr, no_document_all: bool) -
right: void_cmp,
}))
}

fn eq_null_or_undefined(i: &Ident, no_document_all: bool) -> Box<Expr> {
let lhs = Box::new(Expr::Ident(i.clone()));

if no_document_all {
return Box::new(Expr::Bin(BinExpr {
span: DUMMY_SP,
left: lhs,
op: op!("=="),
right: Box::new(Expr::Lit(Lit::Null(Null { span: DUMMY_SP }))),
}));
}

let null_cmp = Box::new(Expr::Bin(BinExpr {
span: DUMMY_SP,
left: lhs,
op: op!("==="),
right: Box::new(Expr::Lit(Lit::Null(Null { span: DUMMY_SP }))),
}));

let void_cmp = Box::new(Expr::Bin(BinExpr {
span: DUMMY_SP,
left: Box::new(Expr::Ident(i.clone())),
op: op!("==="),
right: undefined(DUMMY_SP),
}));

Box::new(Expr::Bin(BinExpr {
span: DUMMY_SP,
left: null_cmp,
op: op!("||"),
right: void_cmp,
}))
}
@@ -1,6 +1,7 @@
class Foo {
#x;
test() {
this == null ? void 0 : this.y.#x;
var _this;
(_this = this) == null ? void 0 : _this.y.#x;
}
}

This file was deleted.

This file was deleted.

1 comment on commit 42dec55

@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: 42dec55 Previous: fe1ca26 Ratio
es/full/bugs-1 291098 ns/iter (± 8640) 296665 ns/iter (± 5591) 0.98
es/full/minify/libraries/antd 1317080452 ns/iter (± 6582890) 1417616450 ns/iter (± 12880450) 0.93
es/full/minify/libraries/d3 277478556 ns/iter (± 2045777) 300195188 ns/iter (± 5734109) 0.92
es/full/minify/libraries/echarts 1049827358 ns/iter (± 3810725) 1167013457 ns/iter (± 21327701) 0.90
es/full/minify/libraries/jquery 85265346 ns/iter (± 88939) 87845045 ns/iter (± 644684) 0.97
es/full/minify/libraries/lodash 98821508 ns/iter (± 265580) 101009767 ns/iter (± 1487556) 0.98
es/full/minify/libraries/moment 50253553 ns/iter (± 42439) 51024735 ns/iter (± 94607) 0.98
es/full/minify/libraries/react 18036961 ns/iter (± 44637) 18296757 ns/iter (± 186704) 0.99
es/full/minify/libraries/terser 219629102 ns/iter (± 646599) 230045951 ns/iter (± 4161414) 0.95
es/full/minify/libraries/three 386301394 ns/iter (± 1247042) 415789690 ns/iter (± 4263690) 0.93
es/full/minify/libraries/typescript 2666427161 ns/iter (± 10174405) 2805731536 ns/iter (± 11567293) 0.95
es/full/minify/libraries/victory 570105429 ns/iter (± 2845977) 622509144 ns/iter (± 19057283) 0.92
es/full/minify/libraries/vue 121160647 ns/iter (± 252826) 124486106 ns/iter (± 1844332) 0.97
es/full/codegen/es3 34020 ns/iter (± 54) 34443 ns/iter (± 74) 0.99
es/full/codegen/es5 33935 ns/iter (± 204) 34518 ns/iter (± 103) 0.98
es/full/codegen/es2015 33994 ns/iter (± 86) 34419 ns/iter (± 125) 0.99
es/full/codegen/es2016 33917 ns/iter (± 105) 34521 ns/iter (± 346) 0.98
es/full/codegen/es2017 34027 ns/iter (± 61) 34326 ns/iter (± 102) 0.99
es/full/codegen/es2018 33994 ns/iter (± 219) 34372 ns/iter (± 148) 0.99
es/full/codegen/es2019 33942 ns/iter (± 80) 34352 ns/iter (± 139) 0.99
es/full/codegen/es2020 34043 ns/iter (± 106) 34357 ns/iter (± 95) 0.99
es/full/all/es3 170270327 ns/iter (± 1248413) 172803410 ns/iter (± 852403) 0.99
es/full/all/es5 161913930 ns/iter (± 889603) 163915784 ns/iter (± 1349704) 0.99
es/full/all/es2015 120715607 ns/iter (± 589220) 123374710 ns/iter (± 601065) 0.98
es/full/all/es2016 120495128 ns/iter (± 416679) 122477574 ns/iter (± 1326481) 0.98
es/full/all/es2017 119735148 ns/iter (± 935923) 122339539 ns/iter (± 604776) 0.98
es/full/all/es2018 117936879 ns/iter (± 708872) 119241749 ns/iter (± 731825) 0.99
es/full/all/es2019 117238449 ns/iter (± 490473) 118281645 ns/iter (± 725933) 0.99
es/full/all/es2020 112803465 ns/iter (± 830486) 113935645 ns/iter (± 477055) 0.99
es/full/parser 504137 ns/iter (± 5869) 503563 ns/iter (± 5652) 1.00
es/full/base/fixer 18208 ns/iter (± 482) 17483 ns/iter (± 70) 1.04
es/full/base/resolver_and_hygiene 79600 ns/iter (± 103) 79112 ns/iter (± 161) 1.01
serialization of serde 292 ns/iter (± 3) 295 ns/iter (± 2) 0.99
css/minify/libraries/bootstrap 28357138 ns/iter (± 93907) 28874055 ns/iter (± 425853) 0.98
css/visitor/compare/clone 1645213 ns/iter (± 6986) 1638739 ns/iter (± 9596) 1.00
css/visitor/compare/visit_mut_span 1779771 ns/iter (± 701) 1774332 ns/iter (± 3885) 1.00
css/visitor/compare/visit_mut_span_panic 1859124 ns/iter (± 4192) 1851417 ns/iter (± 5499) 1.00
css/visitor/compare/fold_span 2585403 ns/iter (± 14148) 2580863 ns/iter (± 16883) 1.00
css/visitor/compare/fold_span_panic 2761336 ns/iter (± 13227) 2767776 ns/iter (± 15272) 1.00
css/lexer/bootstrap_5_1_3 4440535 ns/iter (± 10890) 4493075 ns/iter (± 5295) 0.99
css/lexer/foundation_6_7_4 3789116 ns/iter (± 4785) 3778608 ns/iter (± 4569) 1.00
css/lexer/tailwind_3_1_1 722012 ns/iter (± 1348) 717159 ns/iter (± 788) 1.01
css/parser/bootstrap_5_1_3 19312756 ns/iter (± 167108) 19664743 ns/iter (± 112028) 0.98
css/parser/foundation_6_7_4 15533918 ns/iter (± 275756) 15533572 ns/iter (± 273780) 1.00
css/parser/tailwind_3_1_1 2960584 ns/iter (± 4898) 3016064 ns/iter (± 6707) 0.98
es/codegen/colors 737275 ns/iter (± 403513) 727456 ns/iter (± 395578) 1.01
es/codegen/large 3147417 ns/iter (± 1668065) 3146727 ns/iter (± 1677202) 1.00
es/codegen/with-parser/colors 45070 ns/iter (± 106) 46440 ns/iter (± 209) 0.97
es/codegen/with-parser/large 488850 ns/iter (± 1475) 491542 ns/iter (± 979) 0.99
es/minify/libraries/antd 1160223294 ns/iter (± 11396374) 1196686730 ns/iter (± 28294856) 0.97
es/minify/libraries/d3 242518717 ns/iter (± 485513) 245533920 ns/iter (± 1594102) 0.99
es/minify/libraries/echarts 915986929 ns/iter (± 7124209) 951450407 ns/iter (± 23733309) 0.96
es/minify/libraries/jquery 74763872 ns/iter (± 239514) 75413031 ns/iter (± 682065) 0.99
es/minify/libraries/lodash 89234693 ns/iter (± 146393) 90508309 ns/iter (± 671207) 0.99
es/minify/libraries/moment 44002506 ns/iter (± 24917) 44659277 ns/iter (± 368815) 0.99
es/minify/libraries/react 16166879 ns/iter (± 39770) 16246300 ns/iter (± 119562) 1.00
es/minify/libraries/terser 188573574 ns/iter (± 453850) 190892146 ns/iter (± 2584495) 0.99
es/minify/libraries/three 322183340 ns/iter (± 1114619) 340658726 ns/iter (± 13937443) 0.95
es/minify/libraries/typescript 2282012886 ns/iter (± 12917213) 2351135169 ns/iter (± 25629848) 0.97
es/minify/libraries/victory 487214670 ns/iter (± 1858815) 498727882 ns/iter (± 6309830) 0.98
es/minify/libraries/vue 108483342 ns/iter (± 234183) 108969721 ns/iter (± 714696) 1.00
es/visitor/compare/clone 1936514 ns/iter (± 5842) 1942619 ns/iter (± 8690) 1.00
es/visitor/compare/visit_mut_span 2240588 ns/iter (± 3517) 2243940 ns/iter (± 4040) 1.00
es/visitor/compare/visit_mut_span_panic 2306231 ns/iter (± 18912) 2314505 ns/iter (± 8377) 1.00
es/visitor/compare/fold_span 3349981 ns/iter (± 4860) 3366617 ns/iter (± 9921) 1.00
es/visitor/compare/fold_span_panic 3500135 ns/iter (± 9874) 3469188 ns/iter (± 6554) 1.01
es/lexer/colors 13177 ns/iter (± 86) 13305 ns/iter (± 60) 0.99
es/lexer/angular 6160573 ns/iter (± 3270) 6200450 ns/iter (± 25721) 0.99
es/lexer/backbone 805147 ns/iter (± 1543) 807744 ns/iter (± 475) 1.00
es/lexer/jquery 4559217 ns/iter (± 2521) 4550202 ns/iter (± 7037) 1.00
es/lexer/jquery mobile 6937817 ns/iter (± 10309) 7013218 ns/iter (± 4487) 0.99
es/lexer/mootools 3584977 ns/iter (± 16826) 3643983 ns/iter (± 9135) 0.98
es/lexer/underscore 670913 ns/iter (± 1051) 678020 ns/iter (± 873) 0.99
es/lexer/three 21432020 ns/iter (± 347308) 21690225 ns/iter (± 51334) 0.99
es/lexer/yui 3863024 ns/iter (± 2313) 3929042 ns/iter (± 2203) 0.98
es/parser/colors 27398 ns/iter (± 95) 27100 ns/iter (± 84) 1.01
es/parser/angular 13399337 ns/iter (± 54911) 13527382 ns/iter (± 66339) 0.99
es/parser/backbone 1983140 ns/iter (± 12297) 1991018 ns/iter (± 11542) 1.00
es/parser/jquery 10864832 ns/iter (± 41107) 10863778 ns/iter (± 110072) 1.00
es/parser/jquery mobile 16515068 ns/iter (± 62868) 16683481 ns/iter (± 48465) 0.99
es/parser/mootools 8351794 ns/iter (± 18668) 8363031 ns/iter (± 31488) 1.00
es/parser/underscore 1713876 ns/iter (± 9647) 1717267 ns/iter (± 9296) 1.00
es/parser/three 46540781 ns/iter (± 250407) 47566231 ns/iter (± 827096) 0.98
es/parser/yui 8262560 ns/iter (± 33078) 8299270 ns/iter (± 41665) 1.00
es/preset-env/usage/builtin_type 139015 ns/iter (± 32111) 135719 ns/iter (± 31524) 1.02
es/preset-env/usage/property 17007 ns/iter (± 80) 16692 ns/iter (± 79) 1.02
es/resolver/typescript 87397191 ns/iter (± 1392369) 89680036 ns/iter (± 1643505) 0.97
es/fixer/typescript 62884136 ns/iter (± 400164) 64996440 ns/iter (± 1449749) 0.97
es/hygiene/typescript 130009428 ns/iter (± 718762) 141248546 ns/iter (± 1985704) 0.92
es/resolver_with_hygiene/typescript 243759393 ns/iter (± 658841) 257038535 ns/iter (± 3802440) 0.95
es/visitor/base-perf/module_clone 59693 ns/iter (± 296) 59622 ns/iter (± 255) 1.00
es/visitor/base-perf/fold_empty 64021 ns/iter (± 214) 63862 ns/iter (± 276) 1.00
es/visitor/base-perf/fold_noop_impl_all 64081 ns/iter (± 221) 64069 ns/iter (± 221) 1.00
es/visitor/base-perf/fold_noop_impl_vec 64647 ns/iter (± 325) 64093 ns/iter (± 575) 1.01
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 57 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 105 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 74 ns/iter (± 0) 75 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2655 ns/iter (± 20) 2564 ns/iter (± 10) 1.04
es/base/parallel/resolver/typescript 3674469532 ns/iter (± 231768319) 3804184787 ns/iter (± 286215483) 0.97
es/base/parallel/hygiene/typescript 1459359993 ns/iter (± 28685604) 1436214226 ns/iter (± 18912821) 1.02
misc/visitors/time-complexity/time 5 120 ns/iter (± 0) 137 ns/iter (± 1) 0.88
misc/visitors/time-complexity/time 10 371 ns/iter (± 0) 399 ns/iter (± 0) 0.93
misc/visitors/time-complexity/time 15 678 ns/iter (± 2) 683 ns/iter (± 24) 0.99
misc/visitors/time-complexity/time 20 1053 ns/iter (± 4) 1052 ns/iter (± 4) 1.00
misc/visitors/time-complexity/time 40 3558 ns/iter (± 61) 4145 ns/iter (± 6) 0.86
misc/visitors/time-complexity/time 60 7360 ns/iter (± 59) 8798 ns/iter (± 3) 0.84
es/full-target/es2016 236478 ns/iter (± 469) 228049 ns/iter (± 429) 1.04
es/full-target/es2017 222505 ns/iter (± 489) 215598 ns/iter (± 394) 1.03
es/full-target/es2018 211863 ns/iter (± 591) 205035 ns/iter (± 718) 1.03
es2020_nullish_coalescing 71374 ns/iter (± 221) 71016 ns/iter (± 422) 1.01
es2020_optional_chaining 80150 ns/iter (± 433) 82618 ns/iter (± 236) 0.97
es2022_class_properties 115698 ns/iter (± 356) 114113 ns/iter (± 464) 1.01
es2018_object_rest_spread 75159 ns/iter (± 106) 75168 ns/iter (± 271) 1.00
es2019_optional_catch_binding 66131 ns/iter (± 252) 65448 ns/iter (± 192) 1.01
es2017_async_to_generator 65532 ns/iter (± 246) 65585 ns/iter (± 220) 1.00
es2016_exponentiation 69977 ns/iter (± 227) 69894 ns/iter (± 218) 1.00
es2015_arrow 71763 ns/iter (± 225) 72777 ns/iter (± 172) 0.99
es2015_block_scoped_fn 69875 ns/iter (± 206) 69894 ns/iter (± 146) 1.00
es2015_block_scoping 124822 ns/iter (± 445) 125212 ns/iter (± 380) 1.00

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

Please sign in to comment.