Skip to content

Commit f3d660f

Browse files
authoredMay 24, 2023
fix(es/compat): Fix variable scoping of object rest pass. (#7437)
**Related issue:** - Closes #6988.
1 parent c14306c commit f3d660f

File tree

5 files changed

+32
-9
lines changed

5 files changed

+32
-9
lines changed
 

‎crates/swc/tests/fixture/issues-2xxx/2531/2/output/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
22
const items = [];
33
for (const _ref of items){
4-
var item = _ref;
4+
let item = _ref;
55
const { name } = item, rest = _object_without_properties(item, [
66
"name"
77
]);

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
44
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
55
let array;
66
for (let _ref of array){
7-
var { x } = _ref, restOf = _object_without_properties(_ref, [
7+
let { x } = _ref, restOf = _object_without_properties(_ref, [
88
"x"
99
]);
1010
[

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

+7-4
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
44
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
55
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
66
for (let _ref of array){
7-
var _ref1, { x } = _ref;
7+
let { x } = _ref;
88
_object_without_properties(_ref, [
99
"x"
1010
]);
1111
}
12-
for (var _ref of array)_object_without_properties(_ref1 = _ref, [
13-
"x"
14-
]), { x: xx } = _ref1;
12+
for (var _ref of array){
13+
var _ref1;
14+
_object_without_properties(_ref1 = _ref, [
15+
"x"
16+
]), { x: xx } = _ref1;
17+
}
1518
for (let norest of array.map((a)=>_object_spread_props(_object_spread({}, a), {
1619
x: 'a string'
1720
})))norest.x, norest.y;

‎crates/swc_ecma_transforms_compat/src/es2018/object_rest_spread.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ macro_rules! impl_for_for_stmt {
8787
stmt = Some(Stmt::Decl(
8888
VarDecl {
8989
span: DUMMY_SP,
90-
kind: VarDeclKind::Var,
90+
kind: VarDeclKind::Let,
9191
decls,
9292
declare: false,
9393
}

‎crates/swc_ecma_transforms_compat/tests/es2018_object_rest_spread.rs

+22-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use swc_ecma_transforms_compat::{
55
es2015::{self, spread},
66
es2018::{object_rest_spread, object_rest_spread::Config},
77
};
8-
use swc_ecma_transforms_testing::{test, test_exec};
8+
use swc_ecma_transforms_testing::{compare_stdout, test, test_exec};
99
use swc_ecma_visit::Fold;
1010

1111
fn syntax() -> Syntax {
@@ -269,7 +269,7 @@ async function a() {
269269
r#"
270270
// ForXStatement
271271
for (var _ref of []) {
272-
var {
272+
let {
273273
a
274274
} = _ref,
275275
b = _object_without_properties(_ref, ["a"]);
@@ -3134,3 +3134,23 @@ test_exec!(
31343134
thing({ queryKey: [{ url: 'https://www.google.com', id: '1' }] })
31353135
"#
31363136
);
3137+
3138+
compare_stdout!(
3139+
syntax(),
3140+
|_| {
3141+
//
3142+
let unresolved_mark = Mark::new();
3143+
let top_level_mark = Mark::new();
3144+
chain!(
3145+
resolver(unresolved_mark, top_level_mark, false),
3146+
tr(Default::default()),
3147+
)
3148+
},
3149+
issue_6988_1,
3150+
r###"
3151+
for (const a of [1,2,3]) {
3152+
const { ...rest } = {};
3153+
setTimeout(() => { console.log(a) });
3154+
}
3155+
"###
3156+
);

1 commit comments

Comments
 (1)

github-actions[bot] commented on May 24, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: f3d660f Previous: 786cf3a Ratio
es/full/bugs-1 249536 ns/iter (± 8334) 250846 ns/iter (± 2422) 0.99
es/full/minify/libraries/antd 1267090522 ns/iter (± 16259381) 1202656009 ns/iter (± 7943686) 1.05
es/full/minify/libraries/d3 255687706 ns/iter (± 3952690) 239989340 ns/iter (± 4280540) 1.07
es/full/minify/libraries/echarts 1040692256 ns/iter (± 11117705) 959195840 ns/iter (± 5505870) 1.08
es/full/minify/libraries/jquery 78397711 ns/iter (± 635545) 76773137 ns/iter (± 121343) 1.02
es/full/minify/libraries/lodash 87240848 ns/iter (± 193711) 87033231 ns/iter (± 103509) 1.00
es/full/minify/libraries/moment 44709836 ns/iter (± 44877) 44806836 ns/iter (± 134693) 1.00
es/full/minify/libraries/react 16301441 ns/iter (± 60769) 16253759 ns/iter (± 40599) 1.00
es/full/minify/libraries/terser 199555208 ns/iter (± 1397748) 198014270 ns/iter (± 1716715) 1.01
es/full/minify/libraries/three 340668687 ns/iter (± 1207111) 339558001 ns/iter (± 2910219) 1.00
es/full/minify/libraries/typescript 2449631518 ns/iter (± 21635616) 2411538188 ns/iter (± 16154114) 1.02
es/full/minify/libraries/victory 520309185 ns/iter (± 6667667) 509649946 ns/iter (± 5917456) 1.02
es/full/minify/libraries/vue 110302065 ns/iter (± 751437) 109660660 ns/iter (± 222158) 1.01
es/full/codegen/es3 29972 ns/iter (± 64) 30794 ns/iter (± 109) 0.97
es/full/codegen/es5 29998 ns/iter (± 77) 30783 ns/iter (± 82) 0.97
es/full/codegen/es2015 29972 ns/iter (± 48) 30843 ns/iter (± 52) 0.97
es/full/codegen/es2016 29995 ns/iter (± 70) 30785 ns/iter (± 67) 0.97
es/full/codegen/es2017 29999 ns/iter (± 61) 30827 ns/iter (± 52) 0.97
es/full/codegen/es2018 29993 ns/iter (± 82) 30945 ns/iter (± 79) 0.97
es/full/codegen/es2019 30054 ns/iter (± 62) 30844 ns/iter (± 51) 0.97
es/full/codegen/es2020 30073 ns/iter (± 84) 30828 ns/iter (± 57) 0.98
es/full/all/es3 157741176 ns/iter (± 598075) 154605716 ns/iter (± 643229) 1.02
es/full/all/es5 151259573 ns/iter (± 1046718) 147727665 ns/iter (± 659314) 1.02
es/full/all/es2015 111540601 ns/iter (± 306770) 109771849 ns/iter (± 543422) 1.02
es/full/all/es2016 111132453 ns/iter (± 461193) 108869193 ns/iter (± 611139) 1.02
es/full/all/es2017 109816085 ns/iter (± 553609) 108010891 ns/iter (± 696024) 1.02
es/full/all/es2018 108195800 ns/iter (± 423408) 106233034 ns/iter (± 773007) 1.02
es/full/all/es2019 107666358 ns/iter (± 755676) 105231433 ns/iter (± 326297) 1.02
es/full/all/es2020 102377358 ns/iter (± 778197) 100622939 ns/iter (± 544251) 1.02
es/full/parser 470994 ns/iter (± 5608) 448273 ns/iter (± 4721) 1.05
es/full/base/fixer 18145 ns/iter (± 70) 17450 ns/iter (± 150) 1.04
es/full/base/resolver_and_hygiene 76326 ns/iter (± 228) 77263 ns/iter (± 155) 0.99
serialization of serde 120 ns/iter (± 0) 113 ns/iter (± 0) 1.06
css/minify/libraries/bootstrap 23455737 ns/iter (± 637161) 23390977 ns/iter (± 27477) 1.00
css/visitor/compare/clone 1655113 ns/iter (± 1826) 1644454 ns/iter (± 1759) 1.01
css/visitor/compare/visit_mut_span 1786422 ns/iter (± 4848) 1778606 ns/iter (± 3722) 1.00
css/visitor/compare/visit_mut_span_panic 1847906 ns/iter (± 2919) 1854888 ns/iter (± 4072) 1.00
css/visitor/compare/fold_span 2547376 ns/iter (± 13456) 2548043 ns/iter (± 11549) 1.00
css/visitor/compare/fold_span_panic 2745844 ns/iter (± 5737) 2735810 ns/iter (± 8882) 1.00
css/lexer/bootstrap_5_1_3 4602140 ns/iter (± 7785) 4537073 ns/iter (± 2354) 1.01
css/lexer/foundation_6_7_4 3800828 ns/iter (± 2267) 3794958 ns/iter (± 3100) 1.00
css/lexer/tailwind_3_1_1 721822 ns/iter (± 240) 720612 ns/iter (± 783) 1.00
css/parser/bootstrap_5_1_3 18139988 ns/iter (± 33128) 18027063 ns/iter (± 21727) 1.01
css/parser/foundation_6_7_4 14534459 ns/iter (± 14439) 14416797 ns/iter (± 18651) 1.01
css/parser/tailwind_3_1_1 2812738 ns/iter (± 6599) 2785228 ns/iter (± 2949) 1.01
es/codegen/colors 731793 ns/iter (± 399631) 731581 ns/iter (± 400747) 1.00
es/codegen/large 2967181 ns/iter (± 1570728) 2971698 ns/iter (± 1579031) 1.00
es/codegen/with-parser/colors 42455 ns/iter (± 483) 41492 ns/iter (± 496) 1.02
es/codegen/with-parser/large 467789 ns/iter (± 952) 464781 ns/iter (± 778) 1.01
es/minify/libraries/antd 1068277678 ns/iter (± 12141330) 1041272773 ns/iter (± 9691657) 1.03
es/minify/libraries/d3 216199402 ns/iter (± 856330) 212123331 ns/iter (± 1388214) 1.02
es/minify/libraries/echarts 899760060 ns/iter (± 12089003) 834684106 ns/iter (± 3803333) 1.08
es/minify/libraries/jquery 68544217 ns/iter (± 169476) 68269901 ns/iter (± 95367) 1.00
es/minify/libraries/lodash 79334568 ns/iter (± 147507) 79013564 ns/iter (± 198356) 1.00
es/minify/libraries/moment 40126144 ns/iter (± 85408) 39922420 ns/iter (± 48107) 1.01
es/minify/libraries/react 14787124 ns/iter (± 26677) 14691820 ns/iter (± 37131) 1.01
es/minify/libraries/terser 173773619 ns/iter (± 415548) 174125595 ns/iter (± 540408) 1.00
es/minify/libraries/three 289083833 ns/iter (± 994951) 291327871 ns/iter (± 1807553) 0.99
es/minify/libraries/typescript 2065376969 ns/iter (± 11957323) 2081917776 ns/iter (± 9380976) 0.99
es/minify/libraries/victory 439328203 ns/iter (± 2204879) 430598528 ns/iter (± 4264622) 1.02
es/minify/libraries/vue 98782254 ns/iter (± 244102) 99061084 ns/iter (± 289777) 1.00
es/visitor/compare/clone 2001303 ns/iter (± 2226) 2001018 ns/iter (± 8257) 1.00
es/visitor/compare/visit_mut_span 2341013 ns/iter (± 3747) 2342088 ns/iter (± 6314) 1.00
es/visitor/compare/visit_mut_span_panic 2379960 ns/iter (± 3966) 2389356 ns/iter (± 2427) 1.00
es/visitor/compare/fold_span 3412570 ns/iter (± 5991) 3419771 ns/iter (± 7392) 1.00
es/visitor/compare/fold_span_panic 3566318 ns/iter (± 7728) 3562449 ns/iter (± 20362) 1.00
es/lexer/colors 11435 ns/iter (± 31) 11470 ns/iter (± 12) 1.00
es/lexer/angular 5685602 ns/iter (± 8556) 5777241 ns/iter (± 20903) 0.98
es/lexer/backbone 732391 ns/iter (± 2208) 750034 ns/iter (± 1324) 0.98
es/lexer/jquery 4134151 ns/iter (± 2130) 4228694 ns/iter (± 10977) 0.98
es/lexer/jquery mobile 6392804 ns/iter (± 16435) 6451322 ns/iter (± 36532) 0.99
es/lexer/mootools 3264378 ns/iter (± 2499) 3315423 ns/iter (± 2027) 0.98
es/lexer/underscore 603175 ns/iter (± 1643) 613642 ns/iter (± 3187) 0.98
es/lexer/three 19511606 ns/iter (± 29786) 19808456 ns/iter (± 39822) 0.99
es/lexer/yui 3618225 ns/iter (± 44121) 3578932 ns/iter (± 40043) 1.01
es/parser/colors 25483 ns/iter (± 42) 25747 ns/iter (± 37) 0.99
es/parser/angular 12993328 ns/iter (± 65723) 13140999 ns/iter (± 58347) 0.99
es/parser/backbone 1935655 ns/iter (± 16041) 1964465 ns/iter (± 10241) 0.99
es/parser/jquery 10494210 ns/iter (± 44977) 10607360 ns/iter (± 44174) 0.99
es/parser/jquery mobile 16136192 ns/iter (± 36550) 16352583 ns/iter (± 85016) 0.99
es/parser/mootools 8121174 ns/iter (± 21184) 8163528 ns/iter (± 21125) 0.99
es/parser/underscore 1661201 ns/iter (± 15305) 1685347 ns/iter (± 11105) 0.99
es/parser/three 45454392 ns/iter (± 345635) 45600005 ns/iter (± 235656) 1.00
es/parser/yui 8032569 ns/iter (± 56563) 8128215 ns/iter (± 41837) 0.99
es/preset-env/usage/builtin_type 128431 ns/iter (± 33700) 130688 ns/iter (± 33262) 0.98
es/preset-env/usage/property 15182 ns/iter (± 78) 14944 ns/iter (± 51) 1.02
es/resolver/typescript 88521457 ns/iter (± 765215) 85891202 ns/iter (± 957170) 1.03
es/fixer/typescript 64631850 ns/iter (± 1785161) 62922363 ns/iter (± 303475) 1.03
es/hygiene/typescript 130646629 ns/iter (± 922969) 126892547 ns/iter (± 278799) 1.03
es/resolver_with_hygiene/typescript 232108883 ns/iter (± 1011361) 226596232 ns/iter (± 669227) 1.02
es/visitor/base-perf/module_clone 59115 ns/iter (± 233) 58923 ns/iter (± 169) 1.00
es/visitor/base-perf/fold_empty 62387 ns/iter (± 134) 62891 ns/iter (± 301) 0.99
es/visitor/base-perf/fold_noop_impl_all 62742 ns/iter (± 310) 63352 ns/iter (± 275) 0.99
es/visitor/base-perf/fold_noop_impl_vec 63139 ns/iter (± 458) 63456 ns/iter (± 346) 1.00
es/visitor/base-perf/boxing_boxed_clone 51 ns/iter (± 0) 51 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 36 ns/iter (± 0) 36 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 111 ns/iter (± 0) 110 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 76 ns/iter (± 0) 76 ns/iter (± 0) 1
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2563 ns/iter (± 10) 2580 ns/iter (± 6) 0.99
es/base/parallel/resolver/typescript 3903648015 ns/iter (± 262981242) 3918449390 ns/iter (± 311588868) 1.00
es/base/parallel/hygiene/typescript 1408726643 ns/iter (± 15029940) 1421160482 ns/iter (± 18339847) 0.99
misc/visitors/time-complexity/time 5 104 ns/iter (± 0) 108 ns/iter (± 0) 0.96
misc/visitors/time-complexity/time 10 308 ns/iter (± 0) 276 ns/iter (± 1) 1.12
misc/visitors/time-complexity/time 15 542 ns/iter (± 6) 758 ns/iter (± 17) 0.72
misc/visitors/time-complexity/time 20 1116 ns/iter (± 18) 1089 ns/iter (± 7) 1.02
misc/visitors/time-complexity/time 40 3688 ns/iter (± 39) 4317 ns/iter (± 250) 0.85
misc/visitors/time-complexity/time 60 7675 ns/iter (± 11) 9306 ns/iter (± 5) 0.82
es/full-target/es2016 226589 ns/iter (± 885) 225220 ns/iter (± 575) 1.01
es/full-target/es2017 215630 ns/iter (± 703) 213865 ns/iter (± 1223) 1.01
es/full-target/es2018 203566 ns/iter (± 662) 201500 ns/iter (± 521) 1.01
es2020_nullish_coalescing 67294 ns/iter (± 481) 68679 ns/iter (± 402) 0.98
es2020_optional_chaining 96848 ns/iter (± 262) 95129 ns/iter (± 507) 1.02
es2022_class_properties 116398 ns/iter (± 349) 116485 ns/iter (± 538) 1.00
es2018_object_rest_spread 73237 ns/iter (± 232) 72146 ns/iter (± 214) 1.02
es2019_optional_catch_binding 62758 ns/iter (± 192) 63788 ns/iter (± 208) 0.98
es2017_async_to_generator 62866 ns/iter (± 241) 64014 ns/iter (± 223) 0.98
es2016_exponentiation 66954 ns/iter (± 264) 67396 ns/iter (± 168) 0.99
es2015_arrow 68365 ns/iter (± 389) 70697 ns/iter (± 248) 0.97
es2015_block_scoped_fn 66518 ns/iter (± 294) 67985 ns/iter (± 252) 0.98
es2015_block_scoping 119019 ns/iter (± 475) 117305 ns/iter (± 418) 1.01

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

Please sign in to comment.