Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(es/compat): Improve
destructuring
pass (#6412)
- Loading branch information
1 parent
81816f9
commit 6728603
Showing
76 changed files
with
328 additions
and
290 deletions.
There are no files selected for viewing
6 changes: 3 additions & 3 deletions
6
crates/swc/tests/fixture/issues-1xxx/1449/case1/output/index.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 2 additions & 1 deletion
3
crates/swc/tests/fixture/issues-1xxx/pr-1579/checkingExtend/output/index.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
import _extends from "@swc/helpers/src/_extends.mjs"; | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
var a = {}; | ||
var b = _extends({}, a); | ||
var b = _extends({}, _object_destructuring_empty(a)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
"use strict"; | ||
x = {} = null; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
"use strict"; | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
x = _object_destructuring_empty(null); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
new (function ({}) {})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
new function(param) { | ||
var ref = _object_destructuring_empty(param); | ||
}(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
var { ...x } = null; | ||
var { ...y } = undefined; | ||
|
||
var z; | ||
({...z} = null); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import _extends from "@swc/helpers/src/_extends.mjs"; | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
var x = _extends({}, _object_destructuring_empty(null)); | ||
var y = _extends({}, _object_destructuring_empty(undefined)); | ||
var z; | ||
var _tmp; | ||
_tmp = null, z = _extends({}, _object_destructuring_empty(_tmp)), _tmp; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
let {} = x; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
var ref = _object_destructuring_empty(x); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
let x = 42; | ||
|
||
function f() { | ||
let {} = x; | ||
console.log(x); | ||
} | ||
|
||
f(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
var x = 42; | ||
function f() { | ||
var ref = _object_destructuring_empty(x); | ||
console.log(x); | ||
} | ||
f(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 6 additions & 6 deletions
12
crates/swc/tests/tsc-references/destructuringAssignabilityCheck.1.normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,23 @@ | ||
//// [destructuringAssignabilityCheck.ts] | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
import _sliced_to_array from "@swc/helpers/src/_sliced_to_array.mjs"; | ||
import _throw from "@swc/helpers/src/_throw.mjs"; | ||
var _ref = _sliced_to_array({}, 0); // should be error | ||
var undefined = undefined !== null ? undefined : _throw(new TypeError("Cannot destructure undefined")); // error correctly | ||
var ref = _object_destructuring_empty(undefined); // error correctly | ||
(function(param) { | ||
var _param = _sliced_to_array(param, 0); | ||
return 0; | ||
})({}); // should be error | ||
(function(param) { | ||
var param = param !== null ? param : _throw(new TypeError("Cannot destructure undefined")); | ||
var ref = _object_destructuring_empty(param); | ||
return 0; | ||
})(undefined); // should be error | ||
function foo(param) { | ||
var param = param !== null ? param : _throw(new TypeError("Cannot destructure undefined")); | ||
var ref = _object_destructuring_empty(param); | ||
return 0; | ||
} | ||
function bar(param) { | ||
var _param = _sliced_to_array(param, 0); | ||
return 0; | ||
} | ||
var _ref1 = 1, _ref1 = _ref1 !== null ? _ref1 : _throw(new TypeError("Cannot destructure undefined")); | ||
var _ref2 = _sliced_to_array({}, 0); | ||
var ref1 = _object_destructuring_empty(1); | ||
var _ref1 = _sliced_to_array({}, 0); |
10 changes: 2 additions & 8 deletions
10
crates/swc/tests/tsc-references/destructuringAssignabilityCheck.2.minified.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,4 @@ | ||
//// [destructuringAssignabilityCheck.ts] | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
import _sliced_to_array from "@swc/helpers/src/_sliced_to_array.mjs"; | ||
import _throw from "@swc/helpers/src/_throw.mjs"; | ||
_sliced_to_array({}, 0); | ||
var undefined = undefined; | ||
_sliced_to_array({}, 0), function(param) { | ||
var param = null !== param ? param : _throw(new TypeError("Cannot destructure undefined")); | ||
}(undefined); | ||
var _ref = 1, _ref = null !== _ref ? _ref : _throw(new TypeError("Cannot destructure undefined")); | ||
_sliced_to_array({}, 0); | ||
_sliced_to_array({}, 0), _object_destructuring_empty(void 0), _sliced_to_array({}, 0), _object_destructuring_empty(void 0), _object_destructuring_empty(1), _sliced_to_array({}, 0); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 5 additions & 5 deletions
10
crates/swc/tests/tsc-references/destructuringParameterDeclaration7ES5.1.normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 5 additions & 5 deletions
10
crates/swc/tests/tsc-references/destructuringParameterDeclaration7ES5iterable.1.normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
crates/swc/tests/tsc-references/destructuringVoid.1.normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
//// [destructuringVoid.ts] | ||
import _throw from "@swc/helpers/src/_throw.mjs"; | ||
var v = v !== null ? v : _throw(new TypeError("Cannot destructure undefined")); | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
var ref = _object_destructuring_empty(v); |
4 changes: 2 additions & 2 deletions
4
crates/swc/tests/tsc-references/destructuringVoid.2.minified.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
//// [destructuringVoid.ts] | ||
import _throw from "@swc/helpers/src/_throw.mjs"; | ||
var v = null !== v ? v : _throw(new TypeError("Cannot destructure undefined")); | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
_object_destructuring_empty(v); |
4 changes: 2 additions & 2 deletions
4
crates/swc/tests/tsc-references/destructuringVoidStrictNullChecks.1.normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
//// [destructuringVoidStrictNullChecks.ts] | ||
import _throw from "@swc/helpers/src/_throw.mjs"; | ||
var v = v !== null ? v : _throw(new TypeError("Cannot destructure undefined")); | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
var ref = _object_destructuring_empty(v); |
4 changes: 2 additions & 2 deletions
4
crates/swc/tests/tsc-references/destructuringVoidStrictNullChecks.2.minified.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
//// [destructuringVoidStrictNullChecks.ts] | ||
import _throw from "@swc/helpers/src/_throw.mjs"; | ||
var v = null !== v ? v : _throw(new TypeError("Cannot destructure undefined")); | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
_object_destructuring_empty(v); |
6 changes: 3 additions & 3 deletions
6
crates/swc/tests/tsc-references/emptyAssignmentPatterns01_ES5.1.normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 2 additions & 1 deletion
3
crates/swc/tests/tsc-references/emptyAssignmentPatterns01_ES5.2.minified.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
//// [emptyAssignmentPatterns01_ES5.ts] | ||
var a; | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
import _sliced_to_array from "@swc/helpers/src/_sliced_to_array.mjs"; | ||
_sliced_to_array(a, 0); | ||
_object_destructuring_empty(a), _sliced_to_array(a, 0); |
6 changes: 3 additions & 3 deletions
6
crates/swc/tests/tsc-references/emptyAssignmentPatterns01_ES5iterable.1.normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
//// [emptyAssignmentPatterns01_ES5iterable.ts] | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
import _sliced_to_array from "@swc/helpers/src/_sliced_to_array.mjs"; | ||
var a; | ||
_object_destructuring_empty(a); | ||
var ref; | ||
ref = a, ref; | ||
var ref1; | ||
ref1 = _sliced_to_array(a, 0), ref1; | ||
ref = _sliced_to_array(a, 0), ref; |
3 changes: 2 additions & 1 deletion
3
crates/swc/tests/tsc-references/emptyAssignmentPatterns01_ES5iterable.2.minified.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
//// [emptyAssignmentPatterns01_ES5iterable.ts] | ||
var a; | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
import _sliced_to_array from "@swc/helpers/src/_sliced_to_array.mjs"; | ||
_sliced_to_array(a, 0); | ||
_object_destructuring_empty(a), _sliced_to_array(a, 0); |
9 changes: 5 additions & 4 deletions
9
crates/swc/tests/tsc-references/emptyAssignmentPatterns02_ES5.1.normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,9 @@ | ||
//// [emptyAssignmentPatterns02_ES5.ts] | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
import _sliced_to_array from "@swc/helpers/src/_sliced_to_array.mjs"; | ||
var a; | ||
var x, y, z, a1, a2, a3; | ||
var ref, ref1; | ||
ref1 = (ref = a, x = ref.x, y = ref.y, z = ref.z, ref), ref1; | ||
var ref2, ref3; | ||
ref3 = _sliced_to_array((ref2 = _sliced_to_array(a, 3), a1 = ref2[0], a2 = ref2[1], a3 = ref2[2], ref2), 0), ref3; | ||
var ref; | ||
_object_destructuring_empty((ref = a, x = ref.x, y = ref.y, z = ref.z, ref)); | ||
var ref1, ref2; | ||
ref2 = _sliced_to_array((ref1 = _sliced_to_array(a, 3), a1 = ref1[0], a2 = ref1[1], a3 = ref1[2], ref1), 0), ref2; |
3 changes: 2 additions & 1 deletion
3
crates/swc/tests/tsc-references/emptyAssignmentPatterns02_ES5.2.minified.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
//// [emptyAssignmentPatterns02_ES5.ts] | ||
var a, ref; | ||
import _object_destructuring_empty from "@swc/helpers/src/_object_destructuring_empty.mjs"; | ||
import _sliced_to_array from "@swc/helpers/src/_sliced_to_array.mjs"; | ||
a.x, a.y, a.z, _sliced_to_array(((ref = _sliced_to_array(a, 3))[0], ref[1], ref[2], ref), 0); | ||
_object_destructuring_empty((a.x, a.y, a.z, a)), _sliced_to_array(((ref = _sliced_to_array(a, 3))[0], ref[1], ref[2], ref), 0); |
Oops, something went wrong.
6728603
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Benchmark
es/full/bugs-1
415024
ns/iter (± 11128
)331740
ns/iter (± 27508
)1.25
es/full/minify/libraries/antd
2059852743
ns/iter (± 21382128
)1849928006
ns/iter (± 22932446
)1.11
es/full/minify/libraries/d3
400056910
ns/iter (± 12122381
)370049033
ns/iter (± 16917712
)1.08
es/full/minify/libraries/echarts
1747708510
ns/iter (± 51799219
)1560028342
ns/iter (± 48132412
)1.12
es/full/minify/libraries/jquery
114822889
ns/iter (± 2099146
)101871750
ns/iter (± 2568297
)1.13
es/full/minify/libraries/lodash
136021333
ns/iter (± 2885108
)117314005
ns/iter (± 5404659
)1.16
es/full/minify/libraries/moment
68753123
ns/iter (± 1921550
)58823483
ns/iter (± 2871460
)1.17
es/full/minify/libraries/react
23768869
ns/iter (± 371905
)21288136
ns/iter (± 1661783
)1.12
es/full/minify/libraries/terser
319858540
ns/iter (± 7732483
)310018263
ns/iter (± 18548098
)1.03
es/full/minify/libraries/three
587466327
ns/iter (± 16970628
)584480462
ns/iter (± 34434334
)1.01
es/full/minify/libraries/typescript
3928839245
ns/iter (± 96394563
)3277302496
ns/iter (± 73091238
)1.20
es/full/minify/libraries/victory
858729512
ns/iter (± 44506772
)803494342
ns/iter (± 25895480
)1.07
es/full/minify/libraries/vue
176970113
ns/iter (± 4334526
)145461710
ns/iter (± 1752431
)1.22
es/full/codegen/es3
39903
ns/iter (± 393
)33711
ns/iter (± 1029
)1.18
es/full/codegen/es5
39878
ns/iter (± 1156
)33696
ns/iter (± 1239
)1.18
es/full/codegen/es2015
39900
ns/iter (± 2029
)33619
ns/iter (± 1746
)1.19
es/full/codegen/es2016
39958
ns/iter (± 1408
)33769
ns/iter (± 339
)1.18
es/full/codegen/es2017
39856
ns/iter (± 6764
)33691
ns/iter (± 373
)1.18
es/full/codegen/es2018
39962
ns/iter (± 1280
)33795
ns/iter (± 415
)1.18
es/full/codegen/es2019
39774
ns/iter (± 398
)33630
ns/iter (± 1003
)1.18
es/full/codegen/es2020
39770
ns/iter (± 2499
)33727
ns/iter (± 883
)1.18
es/full/all/es3
231297844
ns/iter (± 12075968
)190737316
ns/iter (± 12758128
)1.21
es/full/all/es5
221334095
ns/iter (± 6321418
)179069335
ns/iter (± 7101289
)1.24
es/full/all/es2015
177746904
ns/iter (± 5251374
)147282439
ns/iter (± 7399404
)1.21
es/full/all/es2016
176211727
ns/iter (± 6218441
)139400862
ns/iter (± 4018966
)1.26
es/full/all/es2017
176323630
ns/iter (± 5322826
)146013879
ns/iter (± 13918127
)1.21
es/full/all/es2018
173754346
ns/iter (± 5824901
)141916501
ns/iter (± 4554118
)1.22
es/full/all/es2019
172430481
ns/iter (± 8524138
)141032613
ns/iter (± 10883016
)1.22
es/full/all/es2020
166146618
ns/iter (± 11099605
)139976513
ns/iter (± 9890605
)1.19
es/full/parser
860817
ns/iter (± 29437
)722357
ns/iter (± 24014
)1.19
es/full/base/fixer
32970
ns/iter (± 2391
)27083
ns/iter (± 2145
)1.22
es/full/base/resolver_and_hygiene
114336
ns/iter (± 7573
)90715
ns/iter (± 5926
)1.26
serialization of ast node
260
ns/iter (± 3
)213
ns/iter (± 8
)1.22
serialization of serde
264
ns/iter (± 5
)222
ns/iter (± 11
)1.19
This comment was automatically generated by workflow using github-action-benchmark.