diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 995df97e971..d5c92bdbdb6 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3497,7 +3497,7 @@ module ts { if (variableDeclarationList.declarations.length >= 1) { var decl = variableDeclarationList.declarations[0]; // TODO handle binding patterns - emit(decl.name); + emit(decl); write(", "); } } @@ -3944,7 +3944,7 @@ module ts { } } else { - var isLet = renameNonTopLevelLetAndConst(node.name); + renameNonTopLevelLetAndConst(node.name); emitModuleMemberName(node); var initializer = node.initializer; diff --git a/tests/baselines/reference/ES5For-of13.js b/tests/baselines/reference/ES5For-of13.js new file mode 100644 index 00000000000..8c8318e27fd --- /dev/null +++ b/tests/baselines/reference/ES5For-of13.js @@ -0,0 +1,10 @@ +//// [ES5For-of13.ts] +for (let v of []) { + var x = v; +} + +//// [ES5For-of13.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + var x = v; +} diff --git a/tests/baselines/reference/ES5For-of14.js b/tests/baselines/reference/ES5For-of14.js new file mode 100644 index 00000000000..d7a35913ef1 --- /dev/null +++ b/tests/baselines/reference/ES5For-of14.js @@ -0,0 +1,10 @@ +//// [ES5For-of14.ts] +for (const v of []) { + var x = v; +} + +//// [ES5For-of14.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + var x = v; +} diff --git a/tests/baselines/reference/ES5For-of15.js b/tests/baselines/reference/ES5For-of15.js new file mode 100644 index 00000000000..30b896165e5 --- /dev/null +++ b/tests/baselines/reference/ES5For-of15.js @@ -0,0 +1,17 @@ +//// [ES5For-of15.ts] +for (let v of []) { + v; + for (const v of []) { + var x = v; + } +} + +//// [ES5For-of15.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + v; + for (var _v, _i_1 = 0, _a_1 = []; _i_1 < _a_1.length; _i_1++) { + _v = _a_1[_i_1]; + var x = _v; + } +} diff --git a/tests/baselines/reference/ES5For-of16.js b/tests/baselines/reference/ES5For-of16.js new file mode 100644 index 00000000000..5e15af3f9c3 --- /dev/null +++ b/tests/baselines/reference/ES5For-of16.js @@ -0,0 +1,19 @@ +//// [ES5For-of16.ts] +for (let v of []) { + v; + for (let v of []) { + var x = v; + v++; + } +} + +//// [ES5For-of16.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + v; + for (var _v, _i_1 = 0, _a_1 = []; _i_1 < _a_1.length; _i_1++) { + _v = _a_1[_i_1]; + var x = _v; + _v++; + } +} diff --git a/tests/baselines/reference/ES5For-of17.js b/tests/baselines/reference/ES5For-of17.js new file mode 100644 index 00000000000..5a6cddcb605 --- /dev/null +++ b/tests/baselines/reference/ES5For-of17.js @@ -0,0 +1,19 @@ +//// [ES5For-of17.ts] +for (let v of []) { + v; + for (let v of [v]) { + var x = v; + v++; + } +} + +//// [ES5For-of17.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + v; + for (var _v, _i_1 = 0, _a_1 = [_v]; _i_1 < _a_1.length; _i_1++) { + _v = _a_1[_i_1]; + var x = _v; + _v++; + } +} diff --git a/tests/baselines/reference/ES5For-of18.js b/tests/baselines/reference/ES5For-of18.js new file mode 100644 index 00000000000..6bb7a37b579 --- /dev/null +++ b/tests/baselines/reference/ES5For-of18.js @@ -0,0 +1,18 @@ +//// [ES5For-of18.ts] +for (let v of []) { + v; +} +for (let v of []) { + v; +} + + +//// [ES5For-of18.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + v; +} +for (var _v, _i_1 = 0, _a_1 = []; _i_1 < _a_1.length; _i_1++) { + _v = _a_1[_i_1]; + _v; +} diff --git a/tests/baselines/reference/ES5For-of19.js b/tests/baselines/reference/ES5For-of19.js new file mode 100644 index 00000000000..97718ab0337 --- /dev/null +++ b/tests/baselines/reference/ES5For-of19.js @@ -0,0 +1,22 @@ +//// [ES5For-of19.ts] +for (let v of []) { + v; + function foo() { + for (const v of []) { + v; + } + } +} + + +//// [ES5For-of19.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + v; + function foo() { + for (var _v, _i = 0, _a = []; _i < _a.length; _i++) { + _v = _a[_i]; + _v; + } + } +} diff --git a/tests/baselines/reference/ES5For-of20.js b/tests/baselines/reference/ES5For-of20.js new file mode 100644 index 00000000000..65fb4bfd39e --- /dev/null +++ b/tests/baselines/reference/ES5For-of20.js @@ -0,0 +1,17 @@ +//// [ES5For-of20.ts] +for (let v of []) { + let v; + for (let v of [v]) { + const v; + } +} + +//// [ES5For-of20.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + var _v; + for (var _v_1, _i_1 = 0, _a_1 = [_v_1]; _i_1 < _a_1.length; _i_1++) { + _v_1 = _a_1[_i_1]; + var _v_2; + } +} diff --git a/tests/baselines/reference/ES5For-of21.js b/tests/baselines/reference/ES5For-of21.js new file mode 100644 index 00000000000..f616c328ca0 --- /dev/null +++ b/tests/baselines/reference/ES5For-of21.js @@ -0,0 +1,12 @@ +//// [ES5For-of21.ts] +for (let v of []) { + for (let _i of []) { } +} + +//// [ES5For-of21.js] +for (var v, _i = 0, _a = []; _i < _a.length; _i++) { + v = _a[_i]; + for (var _i_1, _i_2 = 0, _a_1 = []; _i_2 < _a_1.length; _i_2++) { + _i_1 = _a_1[_i_2]; + } +} diff --git a/tests/baselines/reference/downlevelLetConst16.js b/tests/baselines/reference/downlevelLetConst16.js index 36da8ac36fe..8998ad23540 100644 --- a/tests/baselines/reference/downlevelLetConst16.js +++ b/tests/baselines/reference/downlevelLetConst16.js @@ -404,7 +404,8 @@ function foo6() { } // TODO: once for-of is supported downlevel function foo7() { - for (var _x of []) { + for (var _x, _i = 0, _a = []; _i < _a.length; _i++) { + _x = _a[_i]; use(_x); } use(x); @@ -422,7 +423,8 @@ function foo9() { use(x); } function foo10() { - for (var _x of []) { + for (var _x, _i = 0, _a = []; _i < _a.length; _i++) { + _x = _a[_i]; use(_x); } use(x); diff --git a/tests/baselines/reference/downlevelLetConst17.js b/tests/baselines/reference/downlevelLetConst17.js index 1fe9c1a01ed..d0ad931bd8f 100644 --- a/tests/baselines/reference/downlevelLetConst17.js +++ b/tests/baselines/reference/downlevelLetConst17.js @@ -119,6 +119,7 @@ for (var _x_11 in []) { use(_x_11); } // TODO: update once for-of statements are supported downlevel -for (var _x_12 of []) { +for (var _x_12, _i = 0, _a = []; _i < _a.length; _i++) { + _x_12 = _a[_i]; use(_x_12); } diff --git a/tests/baselines/reference/parserES5ForOfStatement4.js b/tests/baselines/reference/parserES5ForOfStatement4.js index bd64f807597..81184fc7225 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 a, _i = 0, _a = X; _i < _a.length; _i++) { +for (var a = 1, _i = 0, _a = X; _i < _a.length; _i++) { a = _a[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement6.js b/tests/baselines/reference/parserES5ForOfStatement6.js index 0865d27fcb8..be7054234ff 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 a, _i = 0, _a = X; _i < _a.length; _i++) { +for (var a = 1, _i = 0, _a = X; _i < _a.length; _i++) { a = _a[_i]; } diff --git a/tests/baselines/reference/parserES5ForOfStatement7.js b/tests/baselines/reference/parserES5ForOfStatement7.js index 42408cba235..fea53d7ec2f 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 a, _i = 0, _a = X; _i < _a.length; _i++) { +for (var a = 1, _i = 0, _a = X; _i < _a.length; _i++) { a = _a[_i]; } diff --git a/tests/cases/compiler/downlevelLetConst17.ts b/tests/cases/compiler/downlevelLetConst17.ts index 5cbb7b605fe..b581281f679 100644 --- a/tests/cases/compiler/downlevelLetConst17.ts +++ b/tests/cases/compiler/downlevelLetConst17.ts @@ -63,7 +63,6 @@ for (const x in []) { use(x); } -// TODO: update once for-of statements are supported downlevel for (const x of []) { use(x); } \ No newline at end of file diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of13.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of13.ts new file mode 100644 index 00000000000..743cdf919f6 --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of13.ts @@ -0,0 +1,3 @@ +for (let v of []) { + var x = v; +} \ No newline at end of file diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of14.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of14.ts new file mode 100644 index 00000000000..26dcea71a0e --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of14.ts @@ -0,0 +1,3 @@ +for (const v of []) { + var x = v; +} \ No newline at end of file diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of15.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of15.ts new file mode 100644 index 00000000000..2124870d7e3 --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of15.ts @@ -0,0 +1,6 @@ +for (let v of []) { + v; + for (const v of []) { + var x = v; + } +} \ No newline at end of file diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of16.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of16.ts new file mode 100644 index 00000000000..d1354999340 --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of16.ts @@ -0,0 +1,7 @@ +for (let v of []) { + v; + for (let v of []) { + var x = v; + v++; + } +} \ No newline at end of file diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of17.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of17.ts new file mode 100644 index 00000000000..6a782dba2a4 --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of17.ts @@ -0,0 +1,7 @@ +for (let v of []) { + v; + for (let v of [v]) { + var x = v; + v++; + } +} \ No newline at end of file diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of18.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of18.ts new file mode 100644 index 00000000000..e7de82d2785 --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of18.ts @@ -0,0 +1,6 @@ +for (let v of []) { + v; +} +for (let v of []) { + v; +} diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of19.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of19.ts new file mode 100644 index 00000000000..447048c374b --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of19.ts @@ -0,0 +1,8 @@ +for (let v of []) { + v; + function foo() { + for (const v of []) { + v; + } + } +} diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of20.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of20.ts new file mode 100644 index 00000000000..6a1a77d82ae --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of20.ts @@ -0,0 +1,6 @@ +for (let v of []) { + let v; + for (let v of [v]) { + const v; + } +} \ No newline at end of file diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of21.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of21.ts new file mode 100644 index 00000000000..cb0c3cf2329 --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of21.ts @@ -0,0 +1,3 @@ +for (let v of []) { + for (let _i of []) { } +} \ No newline at end of file