Emit 'for...of' statements with let/const initializers

This commit is contained in:
Jason Freeman
2015-03-03 16:14:03 -08:00
parent f915efa6d7
commit a0f108c4fb
25 changed files with 204 additions and 9 deletions

View File

@@ -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(<Identifier>node.name);
renameNonTopLevelLetAndConst(<Identifier>node.name);
emitModuleMemberName(node);
var initializer = node.initializer;

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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++;
}
}

View File

@@ -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++;
}
}

View File

@@ -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;
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}

View File

@@ -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];
}
}

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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];
}

View File

@@ -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];
}

View File

@@ -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];
}

View File

@@ -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);
}

View File

@@ -0,0 +1,3 @@
for (let v of []) {
var x = v;
}

View File

@@ -0,0 +1,3 @@
for (const v of []) {
var x = v;
}

View File

@@ -0,0 +1,6 @@
for (let v of []) {
v;
for (const v of []) {
var x = v;
}
}

View File

@@ -0,0 +1,7 @@
for (let v of []) {
v;
for (let v of []) {
var x = v;
v++;
}
}

View File

@@ -0,0 +1,7 @@
for (let v of []) {
v;
for (let v of [v]) {
var x = v;
v++;
}
}

View File

@@ -0,0 +1,6 @@
for (let v of []) {
v;
}
for (let v of []) {
v;
}

View File

@@ -0,0 +1,8 @@
for (let v of []) {
v;
function foo() {
for (const v of []) {
v;
}
}
}

View File

@@ -0,0 +1,6 @@
for (let v of []) {
let v;
for (let v of [v]) {
const v;
}
}

View File

@@ -0,0 +1,3 @@
for (let v of []) {
for (let _i of []) { }
}