Skip to content

Commit 343bb5a

Browse files
authored
Actuallt preserve nonblock for of statements in forofs with object rest (microsoft#23122)
1 parent c676893 commit 343bb5a

5 files changed

Lines changed: 62 additions & 0 deletions

src/compiler/transformers/esnext.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,11 @@ namespace ts {
304304
bodyLocation = node.statement;
305305
statementsLocation = node.statement.statements;
306306
}
307+
else if (node.statement) {
308+
append(statements, node.statement);
309+
bodyLocation = node.statement;
310+
statementsLocation = node.statement;
311+
}
307312
return updateForOf(
308313
node,
309314
node.awaitModifier,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [forLoopWithDestructuringDoesNotElideFollowingStatement.ts]
2+
let array = [{a: 0, b: 1}]
3+
for (let { a, ...rest } of array)
4+
void a
5+
6+
//// [forLoopWithDestructuringDoesNotElideFollowingStatement.js]
7+
var __rest = (this && this.__rest) || function (s, e) {
8+
var t = {};
9+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
10+
t[p] = s[p];
11+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
12+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
13+
t[p[i]] = s[p[i]];
14+
return t;
15+
};
16+
var array = [{ a: 0, b: 1 }];
17+
for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
18+
var _a = array_1[_i];
19+
var a = _a.a, rest = __rest(_a, ["a"]);
20+
void a;
21+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
=== tests/cases/compiler/forLoopWithDestructuringDoesNotElideFollowingStatement.ts ===
2+
let array = [{a: 0, b: 1}]
3+
>array : Symbol(array, Decl(forLoopWithDestructuringDoesNotElideFollowingStatement.ts, 0, 3))
4+
>a : Symbol(a, Decl(forLoopWithDestructuringDoesNotElideFollowingStatement.ts, 0, 14))
5+
>b : Symbol(b, Decl(forLoopWithDestructuringDoesNotElideFollowingStatement.ts, 0, 19))
6+
7+
for (let { a, ...rest } of array)
8+
>a : Symbol(a, Decl(forLoopWithDestructuringDoesNotElideFollowingStatement.ts, 1, 10))
9+
>rest : Symbol(rest, Decl(forLoopWithDestructuringDoesNotElideFollowingStatement.ts, 1, 13))
10+
>array : Symbol(array, Decl(forLoopWithDestructuringDoesNotElideFollowingStatement.ts, 0, 3))
11+
12+
void a
13+
>a : Symbol(a, Decl(forLoopWithDestructuringDoesNotElideFollowingStatement.ts, 1, 10))
14+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
=== tests/cases/compiler/forLoopWithDestructuringDoesNotElideFollowingStatement.ts ===
2+
let array = [{a: 0, b: 1}]
3+
>array : { a: number; b: number; }[]
4+
>[{a: 0, b: 1}] : { a: number; b: number; }[]
5+
>{a: 0, b: 1} : { a: number; b: number; }
6+
>a : number
7+
>0 : 0
8+
>b : number
9+
>1 : 1
10+
11+
for (let { a, ...rest } of array)
12+
>a : number
13+
>rest : { b: number; }
14+
>array : { a: number; b: number; }[]
15+
16+
void a
17+
>void a : undefined
18+
>a : number
19+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
let array = [{a: 0, b: 1}]
2+
for (let { a, ...rest } of array)
3+
void a

0 commit comments

Comments
 (0)