Skip to content

Commit 1ca281a

Browse files
authoredNov 21, 2022
fix(es/codegen): Preserve parens for new in optional chaining (#6484)
1 parent 66b4966 commit 1ca281a

File tree

4 files changed

+81
-6
lines changed

4 files changed

+81
-6
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
{
2+
"jsc": {
3+
"parser": {
4+
"syntax": "typescript",
5+
"tsx": true
6+
},
7+
"transform": {
8+
"react": {
9+
"runtime": "automatic",
10+
"importSource": "preact",
11+
"development": true
12+
}
13+
},
14+
"target": "es2022",
15+
"loose": false,
16+
"minify": {
17+
"compress": {
18+
"arguments": false,
19+
"arrows": true,
20+
"booleans": true,
21+
"booleans_as_integers": false,
22+
"collapse_vars": true,
23+
"comparisons": true,
24+
"computed_props": true,
25+
"conditionals": true,
26+
"dead_code": true,
27+
"directives": true,
28+
"drop_console": false,
29+
"drop_debugger": true,
30+
"evaluate": true,
31+
"expression": false,
32+
"hoist_funs": false,
33+
"hoist_props": true,
34+
"hoist_vars": false,
35+
"if_return": true,
36+
"join_vars": true,
37+
"keep_classnames": false,
38+
"keep_fargs": true,
39+
"keep_fnames": false,
40+
"keep_infinity": false,
41+
"loops": true,
42+
"negate_iife": true,
43+
"properties": true,
44+
"reduce_funcs": false,
45+
"reduce_vars": false,
46+
"side_effects": true,
47+
"switches": true,
48+
"typeofs": true,
49+
"unsafe": false,
50+
"unsafe_arrows": false,
51+
"unsafe_comps": false,
52+
"unsafe_Function": false,
53+
"unsafe_math": false,
54+
"unsafe_symbols": false,
55+
"unsafe_methods": false,
56+
"unsafe_proto": false,
57+
"unsafe_regexp": false,
58+
"unsafe_undefined": false,
59+
"unused": true,
60+
"const_to_let": true,
61+
"pristine_globals": true,
62+
"passes": 2
63+
},
64+
"mangle": false
65+
}
66+
},
67+
"module": {
68+
"type": "es6"
69+
},
70+
"minify": true,
71+
"isModule": true
72+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
new Date()?.toLocaleDateString()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
new Date()?.toLocaleDateString();

‎crates/swc_ecma_codegen/src/lib.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -810,7 +810,11 @@ where
810810

811811
match n.base {
812812
OptChainBase::Member(ref e) => {
813-
emit!(e.obj);
813+
if let Expr::New(new) = &*e.obj {
814+
self.emit_new(new, false)?;
815+
} else {
816+
emit!(e.obj);
817+
}
814818
punct!("?.");
815819

816820
match &e.prop {
@@ -820,11 +824,8 @@ where
820824
}
821825
}
822826
OptChainBase::Call(ref e) => {
823-
if let Expr::New(new) = &*e.callee {
824-
self.emit_new(new, false)?;
825-
} else {
826-
emit!(e.callee);
827-
}
827+
debug_assert!(!e.callee.is_new());
828+
emit!(e.callee);
828829
punct!("?.");
829830

830831
punct!("(");

1 commit comments

Comments
 (1)

github-actions[bot] commented on Nov 21, 2022

@github-actions[bot]

Benchmark

Benchmark suite Current: 1ca281a Previous: c57307d Ratio
es/full/bugs-1 358335 ns/iter (± 26445) 374285 ns/iter (± 24614) 0.96
es/full/minify/libraries/antd 1959227523 ns/iter (± 38368445) 2009259990 ns/iter (± 40646178) 0.98
es/full/minify/libraries/d3 441250229 ns/iter (± 27160675) 430972970 ns/iter (± 12555504) 1.02
es/full/minify/libraries/echarts 1593756810 ns/iter (± 25329724) 1662554773 ns/iter (± 23161288) 0.96
es/full/minify/libraries/jquery 106409232 ns/iter (± 3129500) 106754203 ns/iter (± 4099451) 1.00
es/full/minify/libraries/lodash 131384339 ns/iter (± 16311308) 137363179 ns/iter (± 8907230) 0.96
es/full/minify/libraries/moment 62782646 ns/iter (± 3190796) 67505846 ns/iter (± 2041159) 0.93
es/full/minify/libraries/react 24060321 ns/iter (± 3029373) 22600132 ns/iter (± 1324463) 1.06
es/full/minify/libraries/terser 384910896 ns/iter (± 97191202) 353253471 ns/iter (± 7715785) 1.09
es/full/minify/libraries/three 593173907 ns/iter (± 75327624) 616425752 ns/iter (± 10261402) 0.96
es/full/minify/libraries/typescript 3452702783 ns/iter (± 42552357) 3714122264 ns/iter (± 86495381) 0.93
es/full/minify/libraries/victory 846944571 ns/iter (± 19298761) 875264815 ns/iter (± 25279076) 0.97
es/full/minify/libraries/vue 165847087 ns/iter (± 17970823) 168591942 ns/iter (± 4272102) 0.98
es/full/codegen/es3 34160 ns/iter (± 923) 35041 ns/iter (± 2859) 0.97
es/full/codegen/es5 34009 ns/iter (± 918) 34826 ns/iter (± 1843) 0.98
es/full/codegen/es2015 33914 ns/iter (± 2471) 34510 ns/iter (± 1941) 0.98
es/full/codegen/es2016 34060 ns/iter (± 1403) 34866 ns/iter (± 3230) 0.98
es/full/codegen/es2017 33991 ns/iter (± 1013) 35244 ns/iter (± 3399) 0.96
es/full/codegen/es2018 34018 ns/iter (± 796) 34830 ns/iter (± 3021) 0.98
es/full/codegen/es2019 34001 ns/iter (± 1149) 34946 ns/iter (± 6448) 0.97
es/full/codegen/es2020 34099 ns/iter (± 906) 35269 ns/iter (± 1905) 0.97
es/full/all/es3 197741490 ns/iter (± 11255192) 206383691 ns/iter (± 12014761) 0.96
es/full/all/es5 182518002 ns/iter (± 11445401) 192097152 ns/iter (± 7633575) 0.95
es/full/all/es2015 144805537 ns/iter (± 14450150) 156620071 ns/iter (± 10149761) 0.92
es/full/all/es2016 149935018 ns/iter (± 15651195) 155846925 ns/iter (± 10365733) 0.96
es/full/all/es2017 166111431 ns/iter (± 19211682) 156069905 ns/iter (± 10071350) 1.06
es/full/all/es2018 158962239 ns/iter (± 15091410) 152076254 ns/iter (± 10577652) 1.05
es/full/all/es2019 142850838 ns/iter (± 9250643) 150651751 ns/iter (± 12613714) 0.95
es/full/all/es2020 137419726 ns/iter (± 7020541) 147469465 ns/iter (± 11532949) 0.93
es/full/parser 723183 ns/iter (± 60130) 754708 ns/iter (± 50669) 0.96
es/full/base/fixer 26339 ns/iter (± 937) 28089 ns/iter (± 3589) 0.94
es/full/base/resolver_and_hygiene 92400 ns/iter (± 5831) 95214 ns/iter (± 9003) 0.97
serialization of ast node 207 ns/iter (± 16) 232 ns/iter (± 37) 0.89
serialization of serde 213 ns/iter (± 15) 228 ns/iter (± 24) 0.93

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

Please sign in to comment.