Skip to content

Commit 9950b98

Browse files
authored
Merge pull request #11132 from Microsoft/fix11024
Fix missing visit of expression in for..of
2 parents 1f791e2 + 018bc74 commit 9950b98

File tree

5 files changed

+80
-2
lines changed

5 files changed

+80
-2
lines changed

src/compiler/transformers/es6.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1790,7 +1790,7 @@ namespace ts {
17901790
// Note also that because an extra statement is needed to assign to the LHS,
17911791
// for-of bodies are always emitted as blocks.
17921792

1793-
const expression = node.expression;
1793+
const expression = visitNode(node.expression, visitor, isExpression);
17941794
const initializer = node.initializer;
17951795
const statements: Statement[] = [];
17961796

@@ -2039,7 +2039,7 @@ namespace ts {
20392039
case SyntaxKind.ForOfStatement:
20402040
const initializer = (<ForStatement | ForInStatement | ForOfStatement>node).initializer;
20412041
if (initializer && initializer.kind === SyntaxKind.VariableDeclarationList) {
2042-
loopInitializer = <VariableDeclarationList>(<ForStatement | ForInStatement | ForOfStatement>node).initializer;
2042+
loopInitializer = <VariableDeclarationList>initializer;
20432043
}
20442044
break;
20452045
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [forOfTransformsExpression.ts]
2+
// https://github.com/Microsoft/TypeScript/issues/11024
3+
let items = [{ name: "A" }, { name: "C" }, { name: "B" }];
4+
for (var item of items.sort((a, b) => a.name.localeCompare(b.name))) {
5+
6+
}
7+
8+
//// [forOfTransformsExpression.js]
9+
// https://github.com/Microsoft/TypeScript/issues/11024
10+
var items = [{ name: "A" }, { name: "C" }, { name: "B" }];
11+
for (var _i = 0, _a = items.sort(function (a, b) { return a.name.localeCompare(b.name); }); _i < _a.length; _i++) {
12+
var item = _a[_i];
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== tests/cases/compiler/forOfTransformsExpression.ts ===
2+
// https://github.com/Microsoft/TypeScript/issues/11024
3+
let items = [{ name: "A" }, { name: "C" }, { name: "B" }];
4+
>items : Symbol(items, Decl(forOfTransformsExpression.ts, 1, 3))
5+
>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14))
6+
>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 29))
7+
>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 44))
8+
9+
for (var item of items.sort((a, b) => a.name.localeCompare(b.name))) {
10+
>item : Symbol(item, Decl(forOfTransformsExpression.ts, 2, 8))
11+
>items.sort : Symbol(Array.sort, Decl(lib.d.ts, --, --))
12+
>items : Symbol(items, Decl(forOfTransformsExpression.ts, 1, 3))
13+
>sort : Symbol(Array.sort, Decl(lib.d.ts, --, --))
14+
>a : Symbol(a, Decl(forOfTransformsExpression.ts, 2, 29))
15+
>b : Symbol(b, Decl(forOfTransformsExpression.ts, 2, 31))
16+
>a.name.localeCompare : Symbol(String.localeCompare, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
17+
>a.name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14))
18+
>a : Symbol(a, Decl(forOfTransformsExpression.ts, 2, 29))
19+
>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14))
20+
>localeCompare : Symbol(String.localeCompare, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
21+
>b.name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14))
22+
>b : Symbol(b, Decl(forOfTransformsExpression.ts, 2, 31))
23+
>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14))
24+
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/compiler/forOfTransformsExpression.ts ===
2+
// https://github.com/Microsoft/TypeScript/issues/11024
3+
let items = [{ name: "A" }, { name: "C" }, { name: "B" }];
4+
>items : { name: string; }[]
5+
>[{ name: "A" }, { name: "C" }, { name: "B" }] : { name: string; }[]
6+
>{ name: "A" } : { name: string; }
7+
>name : string
8+
>"A" : "A"
9+
>{ name: "C" } : { name: string; }
10+
>name : string
11+
>"C" : "C"
12+
>{ name: "B" } : { name: string; }
13+
>name : string
14+
>"B" : "B"
15+
16+
for (var item of items.sort((a, b) => a.name.localeCompare(b.name))) {
17+
>item : { name: string; }
18+
>items.sort((a, b) => a.name.localeCompare(b.name)) : { name: string; }[]
19+
>items.sort : (compareFn?: (a: { name: string; }, b: { name: string; }) => number) => { name: string; }[]
20+
>items : { name: string; }[]
21+
>sort : (compareFn?: (a: { name: string; }, b: { name: string; }) => number) => { name: string; }[]
22+
>(a, b) => a.name.localeCompare(b.name) : (a: { name: string; }, b: { name: string; }) => number
23+
>a : { name: string; }
24+
>b : { name: string; }
25+
>a.name.localeCompare(b.name) : number
26+
>a.name.localeCompare : { (that: string): number; (that: string, locales?: string | string[], options?: Intl.CollatorOptions): number; }
27+
>a.name : string
28+
>a : { name: string; }
29+
>name : string
30+
>localeCompare : { (that: string): number; (that: string, locales?: string | string[], options?: Intl.CollatorOptions): number; }
31+
>b.name : string
32+
>b : { name: string; }
33+
>name : string
34+
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// https://github.com/Microsoft/TypeScript/issues/11024
2+
let items = [{ name: "A" }, { name: "C" }, { name: "B" }];
3+
for (var item of items.sort((a, b) => a.name.localeCompare(b.name))) {
4+
5+
}

0 commit comments

Comments
 (0)