diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index b2fa553a73734..c3933451a7a2c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3614,10 +3614,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi // // for (let v of arr) { } // - // we don't want to emit a temporary variable for the RHS, just use it directly. - let rhsIsIdentifier = node.expression.kind === SyntaxKind.Identifier; + // we can't reuse 'arr' because it might be modified within the body of the loop. let counter = createTempVariable(TempFlags._i); - let rhsReference = rhsIsIdentifier ? node.expression : createTempVariable(TempFlags.Auto); + let rhsReference = createSynthesizedNode(SyntaxKind.Identifier) as Identifier; + rhsReference.text = node.expression.kind === SyntaxKind.Identifier ? + makeUniqueName((node.expression).text) : + makeTempVariableName(TempFlags.Auto); // This is the let keyword for the counter and rhsReference. The let keyword for // the LHS will be emitted inside the body. @@ -3629,15 +3631,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi write(" = 0"); emitEnd(node.expression); - if (!rhsIsIdentifier) { - // , _a = expr - write(", "); - emitStart(node.expression); - emitNodeWithoutSourceMap(rhsReference); - write(" = "); - emitNodeWithoutSourceMap(node.expression); - emitEnd(node.expression); - } + // , _a = expr + write(", "); + emitStart(node.expression); + emitNodeWithoutSourceMap(rhsReference); + write(" = "); + emitNodeWithoutSourceMap(node.expression); + emitEnd(node.expression); write("; "); diff --git a/tests/baselines/reference/ES3For-ofTypeCheck4.js b/tests/baselines/reference/ES3For-ofTypeCheck4.js index 7386a1967eb98..a628a81c51751 100644 --- a/tests/baselines/reference/ES3For-ofTypeCheck4.js +++ b/tests/baselines/reference/ES3For-ofTypeCheck4.js @@ -4,6 +4,6 @@ for (const v of union) { } //// [ES3For-ofTypeCheck4.js] var union; -for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + var v = union_1[_i]; } diff --git a/tests/baselines/reference/ES3For-ofTypeCheck6.js b/tests/baselines/reference/ES3For-ofTypeCheck6.js index ddc11808b1885..8b4a917eb85a7 100644 --- a/tests/baselines/reference/ES3For-ofTypeCheck6.js +++ b/tests/baselines/reference/ES3For-ofTypeCheck6.js @@ -4,6 +4,6 @@ for (var v of union) { } //// [ES3For-ofTypeCheck6.js] var union; -for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + var v = union_1[_i]; } diff --git a/tests/baselines/reference/ES5For-of24.js b/tests/baselines/reference/ES5For-of24.js index cdc0876692ffe..ce4376ad64859 100644 --- a/tests/baselines/reference/ES5For-of24.js +++ b/tests/baselines/reference/ES5For-of24.js @@ -6,7 +6,7 @@ for (var v of a) { //// [ES5For-of24.js] var a = [1, 2, 3]; -for (var _i = 0; _i < a.length; _i++) { - var v = a[_i]; - var a_1 = 0; +for (var _i = 0, a_1 = a; _i < a_1.length; _i++) { + var v = a_1[_i]; + var a_2 = 0; } diff --git a/tests/baselines/reference/ES5For-of25.js b/tests/baselines/reference/ES5For-of25.js index 756c14fbe8140..440c0b55efbd3 100644 --- a/tests/baselines/reference/ES5For-of25.js +++ b/tests/baselines/reference/ES5For-of25.js @@ -7,8 +7,8 @@ for (var v of a) { //// [ES5For-of25.js] var a = [1, 2, 3]; -for (var _i = 0; _i < a.length; _i++) { - var v = a[_i]; +for (var _i = 0, a_1 = a; _i < a_1.length; _i++) { + var v = a_1[_i]; v; a; } diff --git a/tests/baselines/reference/ES5For-of25.js.map b/tests/baselines/reference/ES5For-of25.js.map index cc31767128b2f..1c4d8c2101fab 100644 --- a/tests/baselines/reference/ES5For-of25.js.map +++ b/tests/baselines/reference/ES5For-of25.js.map @@ -1,2 +1,2 @@ //// [ES5For-of25.js.map] -{"version":3,"file":"ES5For-of25.js","sourceRoot":"","sources":["ES5For-of25.ts"],"names":[],"mappings":"AAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,GAAG,CAAC,CAAU,UAAC,EAAV,aAAK,EAAL,IAAU,CAAC;IAAX,IAAI,CAAC,GAAI,CAAC,IAAL;IACN,CAAC,CAAC;IACF,CAAC,CAAC;CACL"} \ No newline at end of file +{"version":3,"file":"ES5For-of25.js","sourceRoot":"","sources":["ES5For-of25.ts"],"names":[],"mappings":"AAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,GAAG,CAAC,CAAU,UAAC,EAAD,OAAC,EAAV,eAAK,EAAL,IAAU,CAAC;IAAX,IAAI,CAAC,UAAA;IACN,CAAC,CAAC;IACF,CAAC,CAAC;CACL"} \ No newline at end of file diff --git a/tests/baselines/reference/ES5For-of25.sourcemap.txt b/tests/baselines/reference/ES5For-of25.sourcemap.txt index 623627fde201e..453eef4ee4687 100644 --- a/tests/baselines/reference/ES5For-of25.sourcemap.txt +++ b/tests/baselines/reference/ES5For-of25.sourcemap.txt @@ -21,7 +21,7 @@ sourceFile:ES5For-of25.ts 10> ^ 11> ^ 12> ^ -13> ^^^^^^^^^^^^^^^^^^^^^^-> +13> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> 1 > 2 >var 3 > a @@ -47,17 +47,19 @@ sourceFile:ES5For-of25.ts 11>Emitted(1, 18) Source(1, 18) + SourceIndex(0) 12>Emitted(1, 19) Source(1, 19) + SourceIndex(0) --- ->>>for (var _i = 0; _i < a.length; _i++) { +>>>for (var _i = 0, a_1 = a; _i < a_1.length; _i++) { 1-> 2 >^^^ 3 > ^ 4 > ^ 5 > ^^^^^^^^^^ 6 > ^^ -7 > ^^^^^^^^^^^^^ -8 > ^^ -9 > ^^^^ -10> ^ +7 > ^^^^^^^ +8 > ^^ +9 > ^^^^^^^^^^^^^^^ +10> ^^ +11> ^^^^ +12> ^ 1-> > 2 >for @@ -65,40 +67,38 @@ sourceFile:ES5For-of25.ts 4 > (var v of 5 > a 6 > -7 > var v -8 > -9 > var v of a -10> ) +7 > a +8 > +9 > var v +10> +11> var v of a +12> ) 1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) 2 >Emitted(2, 4) Source(2, 4) + SourceIndex(0) 3 >Emitted(2, 5) Source(2, 5) + SourceIndex(0) 4 >Emitted(2, 6) Source(2, 15) + SourceIndex(0) 5 >Emitted(2, 16) Source(2, 16) + SourceIndex(0) -6 >Emitted(2, 18) Source(2, 6) + SourceIndex(0) -7 >Emitted(2, 31) Source(2, 11) + SourceIndex(0) -8 >Emitted(2, 33) Source(2, 6) + SourceIndex(0) -9 >Emitted(2, 37) Source(2, 16) + SourceIndex(0) -10>Emitted(2, 38) Source(2, 17) + SourceIndex(0) +6 >Emitted(2, 18) Source(2, 15) + SourceIndex(0) +7 >Emitted(2, 25) Source(2, 16) + SourceIndex(0) +8 >Emitted(2, 27) Source(2, 6) + SourceIndex(0) +9 >Emitted(2, 42) Source(2, 11) + SourceIndex(0) +10>Emitted(2, 44) Source(2, 6) + SourceIndex(0) +11>Emitted(2, 48) Source(2, 16) + SourceIndex(0) +12>Emitted(2, 49) Source(2, 17) + SourceIndex(0) --- ->>> var v = a[_i]; +>>> var v = a_1[_i]; 1 >^^^^ 2 > ^^^^ 3 > ^ -4 > ^^^ -5 > ^ -6 > ^^^^ +4 > ^^^^^^^^^^ 1 > 2 > var 3 > v -4 > of -5 > a -6 > +4 > 1 >Emitted(3, 5) Source(2, 6) + SourceIndex(0) 2 >Emitted(3, 9) Source(2, 10) + SourceIndex(0) 3 >Emitted(3, 10) Source(2, 11) + SourceIndex(0) -4 >Emitted(3, 13) Source(2, 15) + SourceIndex(0) -5 >Emitted(3, 14) Source(2, 16) + SourceIndex(0) -6 >Emitted(3, 18) Source(2, 11) + SourceIndex(0) +4 >Emitted(3, 20) Source(2, 11) + SourceIndex(0) --- >>> v; 1 >^^^^ diff --git a/tests/baselines/reference/ES5For-of30.js b/tests/baselines/reference/ES5For-of30.js index 2a1dc5a339934..fead25e7cf093 100644 --- a/tests/baselines/reference/ES5For-of30.js +++ b/tests/baselines/reference/ES5For-of30.js @@ -9,8 +9,8 @@ for ([a = 1, b = ""] of tuple) { //// [ES5For-of30.js] var a, b; var tuple = [2, "3"]; -for (var _i = 0; _i < tuple.length; _i++) { - _a = tuple[_i], _b = _a[0], a = _b === void 0 ? 1 : _b, _c = _a[1], b = _c === void 0 ? "" : _c; +for (var _i = 0, tuple_1 = tuple; _i < tuple_1.length; _i++) { + _a = tuple_1[_i], _b = _a[0], a = _b === void 0 ? 1 : _b, _c = _a[1], b = _c === void 0 ? "" : _c; a; b; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck11.js b/tests/baselines/reference/ES5For-ofTypeCheck11.js index c0e46a4545256..ce43942775583 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck11.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck11.js @@ -6,6 +6,6 @@ for (v of union) { } //// [ES5For-ofTypeCheck11.js] var union; var v; -for (var _i = 0; _i < union.length; _i++) { - v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + v = union_1[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck3.js b/tests/baselines/reference/ES5For-ofTypeCheck3.js index 76d8237997b94..61a60727cba13 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck3.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck3.js @@ -4,6 +4,6 @@ for (var v of tuple) { } //// [ES5For-ofTypeCheck3.js] var tuple = ["", 0]; -for (var _i = 0; _i < tuple.length; _i++) { - var v = tuple[_i]; +for (var _i = 0, tuple_1 = tuple; _i < tuple_1.length; _i++) { + var v = tuple_1[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck4.js b/tests/baselines/reference/ES5For-ofTypeCheck4.js index 630bc869c5822..6240b6a799a48 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck4.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck4.js @@ -4,6 +4,6 @@ for (const v of union) { } //// [ES5For-ofTypeCheck4.js] var union; -for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + var v = union_1[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck5.js b/tests/baselines/reference/ES5For-ofTypeCheck5.js index 2e6b47f779ddd..0d285d67d8b5d 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck5.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck5.js @@ -4,6 +4,6 @@ for (var v of union) { } //// [ES5For-ofTypeCheck5.js] var union; -for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + var v = union_1[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck6.js b/tests/baselines/reference/ES5For-ofTypeCheck6.js index 9249020b9d40b..c99fd415b23ae 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck6.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck6.js @@ -4,6 +4,6 @@ for (var v of union) { } //// [ES5For-ofTypeCheck6.js] var union; -for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + var v = union_1[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck7.js b/tests/baselines/reference/ES5For-ofTypeCheck7.js index d5b74a247285d..1bd360e5132fd 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck7.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck7.js @@ -4,6 +4,6 @@ for (var v of union) { } //// [ES5For-ofTypeCheck7.js] var union; -for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + var v = union_1[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck8.js b/tests/baselines/reference/ES5For-ofTypeCheck8.js index d73aea1cb7b60..ae4a823a18cb4 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck8.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck8.js @@ -6,6 +6,6 @@ for (v of union) { } //// [ES5For-ofTypeCheck8.js] var union; var v; -for (var _i = 0; _i < union.length; _i++) { - v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + v = union_1[_i]; } diff --git a/tests/baselines/reference/ES5For-ofTypeCheck9.js b/tests/baselines/reference/ES5For-ofTypeCheck9.js index 6c7465d10ec62..3e18c2da31f94 100644 --- a/tests/baselines/reference/ES5For-ofTypeCheck9.js +++ b/tests/baselines/reference/ES5For-ofTypeCheck9.js @@ -4,6 +4,6 @@ for (let v of union) { } //// [ES5For-ofTypeCheck9.js] var union; -for (var _i = 0; _i < union.length; _i++) { - var v = union[_i]; +for (var _i = 0, union_1 = union; _i < union_1.length; _i++) { + var v = union_1[_i]; } diff --git a/tests/baselines/reference/ES5for-of32.js b/tests/baselines/reference/ES5for-of32.js new file mode 100644 index 0000000000000..7af7cc3874a3a --- /dev/null +++ b/tests/baselines/reference/ES5for-of32.js @@ -0,0 +1,23 @@ +//// [ES5for-of32.ts] + +var array = [1,2,3]; +var sum = 0; + +for (let num of array) { + if (sum === 0) { + array = [4,5,6] + } + + sum += num; +} + +//// [ES5for-of32.js] +var array = [1, 2, 3]; +var sum = 0; +for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { + var num = array_1[_i]; + if (sum === 0) { + array = [4, 5, 6]; + } + sum += num; +} diff --git a/tests/baselines/reference/ES5for-of32.symbols b/tests/baselines/reference/ES5for-of32.symbols new file mode 100644 index 0000000000000..5672ad0110965 --- /dev/null +++ b/tests/baselines/reference/ES5for-of32.symbols @@ -0,0 +1,23 @@ +=== tests/cases/conformance/statements/for-ofStatements/ES5for-of32.ts === + +var array = [1,2,3]; +>array : Symbol(array, Decl(ES5for-of32.ts, 1, 3)) + +var sum = 0; +>sum : Symbol(sum, Decl(ES5for-of32.ts, 2, 3)) + +for (let num of array) { +>num : Symbol(num, Decl(ES5for-of32.ts, 4, 8)) +>array : Symbol(array, Decl(ES5for-of32.ts, 1, 3)) + + if (sum === 0) { +>sum : Symbol(sum, Decl(ES5for-of32.ts, 2, 3)) + + array = [4,5,6] +>array : Symbol(array, Decl(ES5for-of32.ts, 1, 3)) + } + + sum += num; +>sum : Symbol(sum, Decl(ES5for-of32.ts, 2, 3)) +>num : Symbol(num, Decl(ES5for-of32.ts, 4, 8)) +} diff --git a/tests/baselines/reference/ES5for-of32.types b/tests/baselines/reference/ES5for-of32.types new file mode 100644 index 0000000000000..6fe5ba2008b82 --- /dev/null +++ b/tests/baselines/reference/ES5for-of32.types @@ -0,0 +1,36 @@ +=== tests/cases/conformance/statements/for-ofStatements/ES5for-of32.ts === + +var array = [1,2,3]; +>array : number[] +>[1,2,3] : number[] +>1 : number +>2 : number +>3 : number + +var sum = 0; +>sum : number +>0 : number + +for (let num of array) { +>num : number +>array : number[] + + if (sum === 0) { +>sum === 0 : boolean +>sum : number +>0 : number + + array = [4,5,6] +>array = [4,5,6] : number[] +>array : number[] +>[4,5,6] : number[] +>4 : number +>5 : number +>6 : number + } + + sum += num; +>sum += num : number +>sum : number +>num : number +} diff --git a/tests/baselines/reference/argumentsObjectIterator01_ES5.js b/tests/baselines/reference/argumentsObjectIterator01_ES5.js index bc51d6f55824d..8378528dbf408 100644 --- a/tests/baselines/reference/argumentsObjectIterator01_ES5.js +++ b/tests/baselines/reference/argumentsObjectIterator01_ES5.js @@ -11,8 +11,8 @@ function doubleAndReturnAsArray(x: number, y: number, z: number): [number, numbe //// [argumentsObjectIterator01_ES5.js] function doubleAndReturnAsArray(x, y, z) { var result = []; - for (var _i = 0; _i < arguments.length; _i++) { - var arg = arguments[_i]; + for (var _i = 0, arguments_1 = arguments; _i < arguments_1.length; _i++) { + var arg = arguments_1[_i]; result.push(arg + arg); } return result; diff --git a/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5.js b/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5.js index 11c4f4e180798..52207ceda96b8 100644 --- a/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5.js +++ b/tests/baselines/reference/emptyVariableDeclarationBindingPatterns01_ES5.js @@ -80,22 +80,22 @@ })(); (function () { var ns = []; - for (var _i = 0; _i < ns.length; _i++) { - var _a = ns[_i]; + for (var _i = 0, ns_1 = ns; _i < ns_1.length; _i++) { + var _a = ns_1[_i]; } - for (var _b = 0; _b < ns.length; _b++) { - var _c = ns[_b]; + for (var _b = 0, ns_2 = ns; _b < ns_2.length; _b++) { + var _c = ns_2[_b]; } - for (var _d = 0; _d < ns.length; _d++) { - var _e = ns[_d]; + for (var _d = 0, ns_3 = ns; _d < ns_3.length; _d++) { + var _e = ns_3[_d]; } - for (var _f = 0; _f < ns.length; _f++) { - var _g = ns[_f]; + for (var _f = 0, ns_4 = ns; _f < ns_4.length; _f++) { + var _g = ns_4[_f]; } - for (var _h = 0; _h < ns.length; _h++) { - var _j = ns[_h]; + for (var _h = 0, ns_5 = ns; _h < ns_5.length; _h++) { + var _j = ns_5[_h]; } - for (var _k = 0; _k < ns.length; _k++) { - var _l = ns[_k]; + for (var _k = 0, ns_6 = ns; _k < ns_6.length; _k++) { + var _l = ns_6[_k]; } })(); diff --git a/tests/baselines/reference/parserES5ForOfStatement10.js b/tests/baselines/reference/parserES5ForOfStatement10.js index cac70523022ef..36c505b0a12c0 100644 --- a/tests/baselines/reference/parserES5ForOfStatement10.js +++ b/tests/baselines/reference/parserES5ForOfStatement10.js @@ -3,6 +3,6 @@ for (const v of X) { } //// [parserES5ForOfStatement10.js] -for (var _i = 0; _i < X.length; _i++) { - var v = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var v = X_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement11.js b/tests/baselines/reference/parserES5ForOfStatement11.js index 40e4ca68d6bb9..e3bac1584fca1 100644 --- a/tests/baselines/reference/parserES5ForOfStatement11.js +++ b/tests/baselines/reference/parserES5ForOfStatement11.js @@ -3,6 +3,6 @@ for (const [a, b] of X) { } //// [parserES5ForOfStatement11.js] -for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a[0], b = _a[1]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var _a = X_1[_i], a = _a[0], b = _a[1]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement12.js b/tests/baselines/reference/parserES5ForOfStatement12.js index f877ebdb757be..2a43ca2dea3df 100644 --- a/tests/baselines/reference/parserES5ForOfStatement12.js +++ b/tests/baselines/reference/parserES5ForOfStatement12.js @@ -3,6 +3,6 @@ for (const {a, b} of X) { } //// [parserES5ForOfStatement12.js] -for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a.a, b = _a.b; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var _a = X_1[_i], a = _a.a, b = _a.b; } diff --git a/tests/baselines/reference/parserES5ForOfStatement13.js b/tests/baselines/reference/parserES5ForOfStatement13.js index 4519948051848..2f1f280090fa3 100644 --- a/tests/baselines/reference/parserES5ForOfStatement13.js +++ b/tests/baselines/reference/parserES5ForOfStatement13.js @@ -3,6 +3,6 @@ for (let {a, b} of X) { } //// [parserES5ForOfStatement13.js] -for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a.a, b = _a.b; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var _a = X_1[_i], a = _a.a, b = _a.b; } diff --git a/tests/baselines/reference/parserES5ForOfStatement14.js b/tests/baselines/reference/parserES5ForOfStatement14.js index d05fdb96e5728..cb753328937bf 100644 --- a/tests/baselines/reference/parserES5ForOfStatement14.js +++ b/tests/baselines/reference/parserES5ForOfStatement14.js @@ -3,6 +3,6 @@ for (let [a, b] of X) { } //// [parserES5ForOfStatement14.js] -for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a[0], b = _a[1]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var _a = X_1[_i], a = _a[0], b = _a[1]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement15.js b/tests/baselines/reference/parserES5ForOfStatement15.js index 0af7496114596..c7c4db351a61f 100644 --- a/tests/baselines/reference/parserES5ForOfStatement15.js +++ b/tests/baselines/reference/parserES5ForOfStatement15.js @@ -3,6 +3,6 @@ for (var [a, b] of X) { } //// [parserES5ForOfStatement15.js] -for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a[0], b = _a[1]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var _a = X_1[_i], a = _a[0], b = _a[1]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement16.js b/tests/baselines/reference/parserES5ForOfStatement16.js index 1e7c6e005a890..149b6ce3df706 100644 --- a/tests/baselines/reference/parserES5ForOfStatement16.js +++ b/tests/baselines/reference/parserES5ForOfStatement16.js @@ -3,6 +3,6 @@ for (var {a, b} of X) { } //// [parserES5ForOfStatement16.js] -for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i], a = _a.a, b = _a.b; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var _a = X_1[_i], a = _a.a, b = _a.b; } diff --git a/tests/baselines/reference/parserES5ForOfStatement18.js b/tests/baselines/reference/parserES5ForOfStatement18.js index 905ba9c1d1e97..0427adb52d844 100644 --- a/tests/baselines/reference/parserES5ForOfStatement18.js +++ b/tests/baselines/reference/parserES5ForOfStatement18.js @@ -2,6 +2,6 @@ for (var of of of) { } //// [parserES5ForOfStatement18.js] -for (var _i = 0; _i < of.length; _i++) { - var of = of[_i]; +for (var _i = 0, of_1 = of; _i < of_1.length; _i++) { + var of = of_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement2.js b/tests/baselines/reference/parserES5ForOfStatement2.js index 287602dfb9c40..43b557d9c8f9d 100644 --- a/tests/baselines/reference/parserES5ForOfStatement2.js +++ b/tests/baselines/reference/parserES5ForOfStatement2.js @@ -3,6 +3,6 @@ for (var of X) { } //// [parserES5ForOfStatement2.js] -for (var _i = 0; _i < X.length; _i++) { - var _a = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var _a = X_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement21.js b/tests/baselines/reference/parserES5ForOfStatement21.js index dcdffbc3cf0d6..e5d7ebcac2125 100644 --- a/tests/baselines/reference/parserES5ForOfStatement21.js +++ b/tests/baselines/reference/parserES5ForOfStatement21.js @@ -2,6 +2,6 @@ for (var of of) { } //// [parserES5ForOfStatement21.js] -for (var _i = 0; _i < of.length; _i++) { - var _a = of[_i]; +for (var _i = 0, of_1 = of; _i < of_1.length; _i++) { + var _a = of_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement3.js b/tests/baselines/reference/parserES5ForOfStatement3.js index a99e96a23b8ce..953a59fb9b8a9 100644 --- a/tests/baselines/reference/parserES5ForOfStatement3.js +++ b/tests/baselines/reference/parserES5ForOfStatement3.js @@ -3,6 +3,6 @@ for (var a, b of X) { } //// [parserES5ForOfStatement3.js] -for (var _i = 0; _i < X.length; _i++) { - var a = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var a = X_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement4.js b/tests/baselines/reference/parserES5ForOfStatement4.js index f1558005f20b5..8ad35187e51cf 100644 --- a/tests/baselines/reference/parserES5ForOfStatement4.js +++ b/tests/baselines/reference/parserES5ForOfStatement4.js @@ -3,6 +3,6 @@ for (var a = 1 of X) { } //// [parserES5ForOfStatement4.js] -for (var _i = 0; _i < X.length; _i++) { - var a = 1 = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var a = 1 = X_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement5.js b/tests/baselines/reference/parserES5ForOfStatement5.js index 328b2fba0a7c6..3138b05e49922 100644 --- a/tests/baselines/reference/parserES5ForOfStatement5.js +++ b/tests/baselines/reference/parserES5ForOfStatement5.js @@ -3,6 +3,6 @@ for (var a: number of X) { } //// [parserES5ForOfStatement5.js] -for (var _i = 0; _i < X.length; _i++) { - var a = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var a = X_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement6.js b/tests/baselines/reference/parserES5ForOfStatement6.js index 15747b93ba9ee..75454de208ed7 100644 --- a/tests/baselines/reference/parserES5ForOfStatement6.js +++ b/tests/baselines/reference/parserES5ForOfStatement6.js @@ -3,6 +3,6 @@ for (var a = 1, b = 2 of X) { } //// [parserES5ForOfStatement6.js] -for (var _i = 0; _i < X.length; _i++) { - var a = 1 = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var a = 1 = X_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement7.js b/tests/baselines/reference/parserES5ForOfStatement7.js index 29e4de8787f3b..ef3a02e45eb67 100644 --- a/tests/baselines/reference/parserES5ForOfStatement7.js +++ b/tests/baselines/reference/parserES5ForOfStatement7.js @@ -3,6 +3,6 @@ for (var a: number = 1, b: string = "" of X) { } //// [parserES5ForOfStatement7.js] -for (var _i = 0; _i < X.length; _i++) { - var a = 1 = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var a = 1 = X_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement8.js b/tests/baselines/reference/parserES5ForOfStatement8.js index 5c449fc64333e..7aa61972601d1 100644 --- a/tests/baselines/reference/parserES5ForOfStatement8.js +++ b/tests/baselines/reference/parserES5ForOfStatement8.js @@ -3,6 +3,6 @@ for (var v of X) { } //// [parserES5ForOfStatement8.js] -for (var _i = 0; _i < X.length; _i++) { - var v = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var v = X_1[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement9.js b/tests/baselines/reference/parserES5ForOfStatement9.js index 6b63d58a88a92..8202d2812c1db 100644 --- a/tests/baselines/reference/parserES5ForOfStatement9.js +++ b/tests/baselines/reference/parserES5ForOfStatement9.js @@ -3,6 +3,6 @@ for (let v of X) { } //// [parserES5ForOfStatement9.js] -for (var _i = 0; _i < X.length; _i++) { - var v = X[_i]; +for (var _i = 0, X_1 = X; _i < X_1.length; _i++) { + var v = X_1[_i]; } diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5for-of32.ts b/tests/cases/conformance/statements/for-ofStatements/ES5for-of32.ts new file mode 100644 index 0000000000000..9f646e2c851e4 --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5for-of32.ts @@ -0,0 +1,12 @@ +//@target: ES5 + +var array = [1,2,3]; +var sum = 0; + +for (let num of array) { + if (sum === 0) { + array = [4,5,6] + } + + sum += num; +} \ No newline at end of file