From 4bb0587dd44d173f0bb979988df6be0d14442b3f Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Wed, 4 Mar 2015 15:50:43 -0800 Subject: [PATCH] Fix createTempVariable to always record the name in the currentScopeNames --- src/compiler/emitter.ts | 11 ++++++++++- tests/baselines/reference/ES5For-of10.js | 4 ++-- tests/baselines/reference/ES5For-of15.js | 4 ++-- tests/baselines/reference/ES5For-of16.js | 4 ++-- tests/baselines/reference/ES5For-of17.js | 4 ++-- tests/baselines/reference/ES5For-of18.js | 4 ++-- tests/baselines/reference/ES5For-of19.js | 4 ++-- tests/baselines/reference/ES5For-of20.js | 4 ++-- tests/baselines/reference/ES5For-of21.js | 2 +- tests/baselines/reference/ES5For-of22.js | 12 ++++++++++++ tests/baselines/reference/ES5For-of23.js | 12 ++++++++++++ tests/baselines/reference/ES5For-of6.js | 4 ++-- tests/baselines/reference/ES5For-of7.js | 4 ++-- tests/baselines/reference/ES5For-of9.js | 4 ++-- .../reference/overloadResolutionOverNonCTLambdas.js | 4 ++-- .../statements/for-ofStatements/ES5For-of22.ts | 4 ++++ .../statements/for-ofStatements/ES5For-of23.ts | 4 ++++ 17 files changed, 65 insertions(+), 24 deletions(-) create mode 100644 tests/baselines/reference/ES5For-of22.js create mode 100644 tests/baselines/reference/ES5For-of23.js create mode 100644 tests/cases/conformance/statements/for-ofStatements/ES5For-of22.ts create mode 100644 tests/cases/conformance/statements/for-ofStatements/ES5For-of23.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 4eb2b3a8842..693391a19ba 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1684,7 +1684,11 @@ module ts { else { name = generateUniqueName(baseName, n => isExistingName(location, n)); } - + + return putNameInCurrentScopeNames(name); + } + + function putNameInCurrentScopeNames(name: string): string { if (!currentScopeNames) { currentScopeNames = {}; } @@ -2099,6 +2103,11 @@ module ts { name = "_" + (tempCount < 25 ? String.fromCharCode(tempCount + (tempCount < 8 ? 0 : 1) + CharacterCodes.a) : tempCount - 25); tempCount++; } + + // This is necessary so that a name generated via renameNonTopLevelLetAndConst will see the name + // we just generated. + putNameInCurrentScopeNames(name); + var result = createSynthesizedNode(SyntaxKind.Identifier); result.text = name; return result; diff --git a/tests/baselines/reference/ES5For-of10.js b/tests/baselines/reference/ES5For-of10.js index ea081ed8ab0..f12dc9d8acb 100644 --- a/tests/baselines/reference/ES5For-of10.js +++ b/tests/baselines/reference/ES5For-of10.js @@ -13,8 +13,8 @@ function foo() { } for (var _i = 0, _a = []; _i < _a.length; _i++) { foo().x = _a[_i]; - for (var _i_1 = 0, _a_1 = []; _i_1 < _a_1.length; _i_1++) { - foo().x = _a_1[_i_1]; + for (var _b = 0, _c = []; _b < _c.length; _b++) { + foo().x = _c[_b]; var p = foo().x; } } diff --git a/tests/baselines/reference/ES5For-of15.js b/tests/baselines/reference/ES5For-of15.js index 90ed376b805..46d3dbd1d6e 100644 --- a/tests/baselines/reference/ES5For-of15.js +++ b/tests/baselines/reference/ES5For-of15.js @@ -10,8 +10,8 @@ for (let v of []) { for (var _i = 0, _a = []; _i < _a.length; _i++) { var v = _a[_i]; v; - for (var _i_1 = 0, _a_1 = []; _i_1 < _a_1.length; _i_1++) { - var _v = _a_1[_i_1]; + for (var _b = 0, _c = []; _b < _c.length; _b++) { + var _v = _c[_b]; var x = _v; } } diff --git a/tests/baselines/reference/ES5For-of16.js b/tests/baselines/reference/ES5For-of16.js index da1f0e8b337..1649e4481f2 100644 --- a/tests/baselines/reference/ES5For-of16.js +++ b/tests/baselines/reference/ES5For-of16.js @@ -11,8 +11,8 @@ for (let v of []) { for (var _i = 0, _a = []; _i < _a.length; _i++) { var v = _a[_i]; v; - for (var _i_1 = 0, _a_1 = []; _i_1 < _a_1.length; _i_1++) { - var _v = _a_1[_i_1]; + for (var _b = 0, _c = []; _b < _c.length; _b++) { + var _v = _c[_b]; var x = _v; _v++; } diff --git a/tests/baselines/reference/ES5For-of17.js b/tests/baselines/reference/ES5For-of17.js index e7f059477b5..688375b82bc 100644 --- a/tests/baselines/reference/ES5For-of17.js +++ b/tests/baselines/reference/ES5For-of17.js @@ -11,8 +11,8 @@ for (let v of []) { for (var _i = 0, _a = []; _i < _a.length; _i++) { var v = _a[_i]; v; - for (var _i_1 = 0, _a_1 = [v]; _i_1 < _a_1.length; _i_1++) { - var _v = _a_1[_i_1]; + for (var _b = 0, _c = [v]; _b < _c.length; _b++) { + var _v = _c[_b]; var x = _v; _v++; } diff --git a/tests/baselines/reference/ES5For-of18.js b/tests/baselines/reference/ES5For-of18.js index 656d4f57233..a135b8b0463 100644 --- a/tests/baselines/reference/ES5For-of18.js +++ b/tests/baselines/reference/ES5For-of18.js @@ -12,7 +12,7 @@ for (var _i = 0, _a = []; _i < _a.length; _i++) { var v = _a[_i]; v; } -for (var _i = 0, _b = []; _i < _b.length; _i++) { - var _v = _b[_i]; +for (var _b = 0, _c = []; _b < _c.length; _b++) { + var _v = _c[_b]; _v; } diff --git a/tests/baselines/reference/ES5For-of19.js b/tests/baselines/reference/ES5For-of19.js index 9ff3f9aca2a..7af9418f04f 100644 --- a/tests/baselines/reference/ES5For-of19.js +++ b/tests/baselines/reference/ES5For-of19.js @@ -14,8 +14,8 @@ for (var _i = 0, _a = []; _i < _a.length; _i++) { var v = _a[_i]; v; function foo() { - for (var _i = 0, _a = []; _i < _a.length; _i++) { - var _v = _a[_i]; + for (var _b = 0, _c = []; _b < _c.length; _b++) { + var _v = _c[_b]; _v; } } diff --git a/tests/baselines/reference/ES5For-of20.js b/tests/baselines/reference/ES5For-of20.js index 04b7cca5cc4..b70ac66b767 100644 --- a/tests/baselines/reference/ES5For-of20.js +++ b/tests/baselines/reference/ES5For-of20.js @@ -10,8 +10,8 @@ for (let v of []) { for (var _i = 0, _a = []; _i < _a.length; _i++) { var v = _a[_i]; var _v; - for (var _i_1 = 0, _a_1 = [v]; _i_1 < _a_1.length; _i_1++) { - var _v_1 = _a_1[_i_1]; + for (var _b = 0, _c = [v]; _b < _c.length; _b++) { + var _v_1 = _c[_b]; var _v_2; } } diff --git a/tests/baselines/reference/ES5For-of21.js b/tests/baselines/reference/ES5For-of21.js index e23ea282998..9356514ea6b 100644 --- a/tests/baselines/reference/ES5For-of21.js +++ b/tests/baselines/reference/ES5For-of21.js @@ -7,6 +7,6 @@ for (let v of []) { for (var _i = 0, _a = []; _i < _a.length; _i++) { var v = _a[_i]; for (var _b = 0, _c = []; _b < _c.length; _b++) { - var _i = _c[_b]; + var _i_1 = _c[_b]; } } diff --git a/tests/baselines/reference/ES5For-of22.js b/tests/baselines/reference/ES5For-of22.js new file mode 100644 index 00000000000..d5ebc55e04a --- /dev/null +++ b/tests/baselines/reference/ES5For-of22.js @@ -0,0 +1,12 @@ +//// [ES5For-of22.ts] +for (var x of [1, 2, 3]) { + let _a = 0; + console.log(x); +} + +//// [ES5For-of22.js] +for (var _i = 0, _a = [1, 2, 3]; _i < _a.length; _i++) { + var x = _a[_i]; + var _a_1 = 0; + console.log(x); +} diff --git a/tests/baselines/reference/ES5For-of23.js b/tests/baselines/reference/ES5For-of23.js new file mode 100644 index 00000000000..3842591820f --- /dev/null +++ b/tests/baselines/reference/ES5For-of23.js @@ -0,0 +1,12 @@ +//// [ES5For-of23.ts] +for (var x of [1, 2, 3]) { + var _a = 0; + console.log(x); +} + +//// [ES5For-of23.js] +for (var _i = 0, _b = [1, 2, 3]; _i < _b.length; _i++) { + var x = _b[_i]; + var _a = 0; + console.log(x); +} diff --git a/tests/baselines/reference/ES5For-of6.js b/tests/baselines/reference/ES5For-of6.js index e0b134407c0..bf966a0a5ae 100644 --- a/tests/baselines/reference/ES5For-of6.js +++ b/tests/baselines/reference/ES5For-of6.js @@ -8,8 +8,8 @@ for (var w of []) { //// [ES5For-of6.js] for (var _i = 0, _a = []; _i < _a.length; _i++) { var w = _a[_i]; - for (var _i_1 = 0, _a_1 = []; _i_1 < _a_1.length; _i_1++) { - var v = _a_1[_i_1]; + for (var _b = 0, _c = []; _b < _c.length; _b++) { + var v = _c[_b]; var x = [w, v]; } } diff --git a/tests/baselines/reference/ES5For-of7.js b/tests/baselines/reference/ES5For-of7.js index 474cb2749ad..ad2302cdc5c 100644 --- a/tests/baselines/reference/ES5For-of7.js +++ b/tests/baselines/reference/ES5For-of7.js @@ -12,7 +12,7 @@ for (var _i = 0, _a = []; _i < _a.length; _i++) { var w = _a[_i]; var x = w; } -for (var _i = 0, _b = []; _i < _b.length; _i++) { - var v = _b[_i]; +for (var _b = 0, _c = []; _b < _c.length; _b++) { + var v = _c[_b]; var x = [w, v]; } diff --git a/tests/baselines/reference/ES5For-of9.js b/tests/baselines/reference/ES5For-of9.js index f0c5142d4eb..3a2cd2b1f74 100644 --- a/tests/baselines/reference/ES5For-of9.js +++ b/tests/baselines/reference/ES5For-of9.js @@ -14,8 +14,8 @@ function foo() { } for (var _i = 0, _a = []; _i < _a.length; _i++) { foo().x = _a[_i]; - for (var _i_1 = 0, _a_1 = []; _i_1 < _a_1.length; _i_1++) { - foo().x = _a_1[_i_1]; + for (var _b = 0, _c = []; _b < _c.length; _b++) { + foo().x = _c[_b]; var p = foo().x; } } diff --git a/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js index e77e8d3371f..b29941393d1 100644 --- a/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js +++ b/tests/baselines/reference/overloadResolutionOverNonCTLambdas.js @@ -39,8 +39,8 @@ var Bugs; } var result = message.replace(/\{(\d+)\}/g, function (match) { var rest = []; - for (var _i = 1; _i < arguments.length; _i++) { - rest[_i - 1] = arguments[_i]; + for (var _a = 1; _a < arguments.length; _a++) { + rest[_a - 1] = arguments[_a]; } var index = rest[0]; return typeof args[index] !== 'undefined' ? args[index] : match; diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of22.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of22.ts new file mode 100644 index 00000000000..ef35b6efd9c --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of22.ts @@ -0,0 +1,4 @@ +for (var x of [1, 2, 3]) { + let _a = 0; + console.log(x); +} \ No newline at end of file diff --git a/tests/cases/conformance/statements/for-ofStatements/ES5For-of23.ts b/tests/cases/conformance/statements/for-ofStatements/ES5For-of23.ts new file mode 100644 index 00000000000..7d93246f2bb --- /dev/null +++ b/tests/cases/conformance/statements/for-ofStatements/ES5For-of23.ts @@ -0,0 +1,4 @@ +for (var x of [1, 2, 3]) { + var _a = 0; + console.log(x); +} \ No newline at end of file