diff --git a/src/compiler/transformers/es6.ts b/src/compiler/transformers/es6.ts index 51a6a088fb717..41629fbf6d472 100644 --- a/src/compiler/transformers/es6.ts +++ b/src/compiler/transformers/es6.ts @@ -1765,7 +1765,7 @@ namespace ts { // Note also that because an extra statement is needed to assign to the LHS, // for-of bodies are always emitted as blocks. - const expression = node.expression; + const expression = visitNode(node.expression, visitor, isExpression); const initializer = node.initializer; const statements: Statement[] = []; @@ -2014,7 +2014,7 @@ namespace ts { case SyntaxKind.ForOfStatement: const initializer = (node).initializer; if (initializer && initializer.kind === SyntaxKind.VariableDeclarationList) { - loopInitializer = (node).initializer; + loopInitializer = initializer; } break; } diff --git a/tests/baselines/reference/forOfTransformsExpression.js b/tests/baselines/reference/forOfTransformsExpression.js new file mode 100644 index 0000000000000..4b953b5cba1bc --- /dev/null +++ b/tests/baselines/reference/forOfTransformsExpression.js @@ -0,0 +1,13 @@ +//// [forOfTransformsExpression.ts] +// https://github.com/Microsoft/TypeScript/issues/11024 +let items = [{ name: "A" }, { name: "C" }, { name: "B" }]; +for (var item of items.sort((a, b) => a.name.localeCompare(b.name))) { + +} + +//// [forOfTransformsExpression.js] +// https://github.com/Microsoft/TypeScript/issues/11024 +var items = [{ name: "A" }, { name: "C" }, { name: "B" }]; +for (var _i = 0, _a = items.sort(function (a, b) { return a.name.localeCompare(b.name); }); _i < _a.length; _i++) { + var item = _a[_i]; +} diff --git a/tests/baselines/reference/forOfTransformsExpression.symbols b/tests/baselines/reference/forOfTransformsExpression.symbols new file mode 100644 index 0000000000000..9348f587084d4 --- /dev/null +++ b/tests/baselines/reference/forOfTransformsExpression.symbols @@ -0,0 +1,25 @@ +=== tests/cases/compiler/forOfTransformsExpression.ts === +// https://github.com/Microsoft/TypeScript/issues/11024 +let items = [{ name: "A" }, { name: "C" }, { name: "B" }]; +>items : Symbol(items, Decl(forOfTransformsExpression.ts, 1, 3)) +>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14)) +>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 29)) +>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 44)) + +for (var item of items.sort((a, b) => a.name.localeCompare(b.name))) { +>item : Symbol(item, Decl(forOfTransformsExpression.ts, 2, 8)) +>items.sort : Symbol(Array.sort, Decl(lib.d.ts, --, --)) +>items : Symbol(items, Decl(forOfTransformsExpression.ts, 1, 3)) +>sort : Symbol(Array.sort, Decl(lib.d.ts, --, --)) +>a : Symbol(a, Decl(forOfTransformsExpression.ts, 2, 29)) +>b : Symbol(b, Decl(forOfTransformsExpression.ts, 2, 31)) +>a.name.localeCompare : Symbol(String.localeCompare, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>a.name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14)) +>a : Symbol(a, Decl(forOfTransformsExpression.ts, 2, 29)) +>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14)) +>localeCompare : Symbol(String.localeCompare, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>b.name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14)) +>b : Symbol(b, Decl(forOfTransformsExpression.ts, 2, 31)) +>name : Symbol(name, Decl(forOfTransformsExpression.ts, 1, 14)) + +} diff --git a/tests/baselines/reference/forOfTransformsExpression.types b/tests/baselines/reference/forOfTransformsExpression.types new file mode 100644 index 0000000000000..212cb202aab72 --- /dev/null +++ b/tests/baselines/reference/forOfTransformsExpression.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/forOfTransformsExpression.ts === +// https://github.com/Microsoft/TypeScript/issues/11024 +let items = [{ name: "A" }, { name: "C" }, { name: "B" }]; +>items : { name: string; }[] +>[{ name: "A" }, { name: "C" }, { name: "B" }] : { name: string; }[] +>{ name: "A" } : { name: string; } +>name : string +>"A" : "A" +>{ name: "C" } : { name: string; } +>name : string +>"C" : "C" +>{ name: "B" } : { name: string; } +>name : string +>"B" : "B" + +for (var item of items.sort((a, b) => a.name.localeCompare(b.name))) { +>item : { name: string; } +>items.sort((a, b) => a.name.localeCompare(b.name)) : { name: string; }[] +>items.sort : (compareFn?: (a: { name: string; }, b: { name: string; }) => number) => { name: string; }[] +>items : { name: string; }[] +>sort : (compareFn?: (a: { name: string; }, b: { name: string; }) => number) => { name: string; }[] +>(a, b) => a.name.localeCompare(b.name) : (a: { name: string; }, b: { name: string; }) => number +>a : { name: string; } +>b : { name: string; } +>a.name.localeCompare(b.name) : number +>a.name.localeCompare : { (that: string): number; (that: string, locales?: string | string[], options?: Intl.CollatorOptions): number; } +>a.name : string +>a : { name: string; } +>name : string +>localeCompare : { (that: string): number; (that: string, locales?: string | string[], options?: Intl.CollatorOptions): number; } +>b.name : string +>b : { name: string; } +>name : string + +} diff --git a/tests/cases/compiler/forOfTransformsExpression.ts b/tests/cases/compiler/forOfTransformsExpression.ts new file mode 100644 index 0000000000000..e91bec012b1e6 --- /dev/null +++ b/tests/cases/compiler/forOfTransformsExpression.ts @@ -0,0 +1,5 @@ +// https://github.com/Microsoft/TypeScript/issues/11024 +let items = [{ name: "A" }, { name: "C" }, { name: "B" }]; +for (var item of items.sort((a, b) => a.name.localeCompare(b.name))) { + +} \ No newline at end of file