Merge pull request #21897 from Microsoft/fix21626

Fix duplicate label in es2017 async function
This commit is contained in:
Ron Buckton
2018-02-12 13:04:39 -08:00
committed by GitHub
13 changed files with 150 additions and 9 deletions

View File

@@ -153,7 +153,7 @@ namespace ts {
if (statement.kind === SyntaxKind.ForOfStatement && (<ForOfStatement>statement).awaitModifier) {
return visitForOfStatement(<ForOfStatement>statement, node);
}
return restoreEnclosingLabel(visitEachChild(node, visitor, context), node);
return restoreEnclosingLabel(visitEachChild(statement, visitor, context), node);
}
return visitEachChild(node, visitor, context);
}

View File

@@ -14,7 +14,7 @@ let f6 = async function(): MyPromise<void> { }
let f7 = async () => { };
let f8 = async (): Promise<void> => { };
let f9 = async (): MyPromise<void> => { };
let f9 = async (): MyPromise<void> => { };
let f10 = async () => p;
let f11 = async () => mp;
let f12 = async (): Promise<number> => mp;
@@ -37,6 +37,13 @@ class C {
module M {
export async function f1() { }
}
async function f14() {
block: {
await 1;
break block;
}
}
//// [asyncAwait_es2017.js]
@@ -71,3 +78,9 @@ var M;
async function f1() { }
M.f1 = f1;
})(M || (M = {}));
async function f14() {
block: {
await 1;
break block;
}
}

View File

@@ -46,7 +46,7 @@ let f8 = async (): Promise<void> => { };
>f8 : Symbol(f8, Decl(asyncAwait_es2017.ts, 14, 3))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
let f9 = async (): MyPromise<void> => { };
let f9 = async (): MyPromise<void> => { };
>f9 : Symbol(f9, Decl(asyncAwait_es2017.ts, 15, 3))
>MyPromise : Symbol(MyPromise, Decl(asyncAwait_es2017.ts, 0, 0), Decl(asyncAwait_es2017.ts, 1, 11))
@@ -116,3 +116,12 @@ module M {
export async function f1() { }
>f1 : Symbol(f1, Decl(asyncAwait_es2017.ts, 36, 10))
}
async function f14() {
>f14 : Symbol(f14, Decl(asyncAwait_es2017.ts, 38, 1))
block: {
await 1;
break block;
}
}

View File

@@ -51,7 +51,7 @@ let f8 = async (): Promise<void> => { };
>async (): Promise<void> => { } : () => Promise<void>
>Promise : Promise<T>
let f9 = async (): MyPromise<void> => { };
let f9 = async (): MyPromise<void> => { };
>f9 : () => Promise<void>
>async (): MyPromise<void> => { } : () => Promise<void>
>MyPromise : Promise<T>
@@ -127,3 +127,18 @@ module M {
export async function f1() { }
>f1 : () => Promise<void>
}
async function f14() {
>f14 : () => Promise<void>
block: {
>block : any
await 1;
>await 1 : 1
>1 : 1
break block;
>block : any
}
}

View File

@@ -37,6 +37,13 @@ class C {
module M {
export async function f1() { }
}
async function f14() {
block: {
await 1;
break block;
}
}
//// [asyncAwait_es5.js]
@@ -188,3 +195,16 @@ var M;
}
M.f1 = f1;
})(M || (M = {}));
function f14() {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
_a.sent();
return [3 /*break*/, 2];
case 2: return [2 /*return*/];
}
});
});
}

View File

@@ -116,3 +116,12 @@ module M {
export async function f1() { }
>f1 : Symbol(f1, Decl(asyncAwait_es5.ts, 36, 10))
}
async function f14() {
>f14 : Symbol(f14, Decl(asyncAwait_es5.ts, 38, 1))
block: {
await 1;
break block;
}
}

View File

@@ -127,3 +127,18 @@ module M {
export async function f1() { }
>f1 : () => Promise<void>
}
async function f14() {
>f14 : () => Promise<void>
block: {
>block : any
await 1;
>await 1 : 1
>1 : 1
break block;
>block : any
}
}

View File

@@ -14,7 +14,7 @@ let f6 = async function(): MyPromise<void> { }
let f7 = async () => { };
let f8 = async (): Promise<void> => { };
let f9 = async (): MyPromise<void> => { };
let f9 = async (): MyPromise<void> => { };
let f10 = async () => p;
let f11 = async () => mp;
let f12 = async (): Promise<number> => mp;
@@ -37,6 +37,13 @@ class C {
module M {
export async function f1() { }
}
async function f14() {
block: {
await 1;
break block;
}
}
//// [asyncAwait_es6.js]
@@ -111,3 +118,11 @@ var M;
}
M.f1 = f1;
})(M || (M = {}));
function f14() {
return __awaiter(this, void 0, void 0, function* () {
block: {
yield 1;
break block;
}
});
}

View File

@@ -46,7 +46,7 @@ let f8 = async (): Promise<void> => { };
>f8 : Symbol(f8, Decl(asyncAwait_es6.ts, 14, 3))
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --))
let f9 = async (): MyPromise<void> => { };
let f9 = async (): MyPromise<void> => { };
>f9 : Symbol(f9, Decl(asyncAwait_es6.ts, 15, 3))
>MyPromise : Symbol(MyPromise, Decl(asyncAwait_es6.ts, 0, 0), Decl(asyncAwait_es6.ts, 1, 11))
@@ -116,3 +116,12 @@ module M {
export async function f1() { }
>f1 : Symbol(f1, Decl(asyncAwait_es6.ts, 36, 10))
}
async function f14() {
>f14 : Symbol(f14, Decl(asyncAwait_es6.ts, 38, 1))
block: {
await 1;
break block;
}
}

View File

@@ -51,7 +51,7 @@ let f8 = async (): Promise<void> => { };
>async (): Promise<void> => { } : () => Promise<void>
>Promise : Promise<T>
let f9 = async (): MyPromise<void> => { };
let f9 = async (): MyPromise<void> => { };
>f9 : () => Promise<void>
>async (): MyPromise<void> => { } : () => Promise<void>
>MyPromise : Promise<T>
@@ -127,3 +127,18 @@ module M {
export async function f1() { }
>f1 : () => Promise<void>
}
async function f14() {
>f14 : () => Promise<void>
block: {
>block : any
await 1;
>await 1 : 1
>1 : 1
break block;
>block : any
}
}

View File

@@ -14,7 +14,7 @@ let f6 = async function(): MyPromise<void> { }
let f7 = async () => { };
let f8 = async (): Promise<void> => { };
let f9 = async (): MyPromise<void> => { };
let f9 = async (): MyPromise<void> => { };
let f10 = async () => p;
let f11 = async () => mp;
let f12 = async (): Promise<number> => mp;
@@ -37,4 +37,11 @@ class C {
module M {
export async function f1() { }
}
async function f14() {
block: {
await 1;
break block;
}
}

View File

@@ -38,4 +38,11 @@ class C {
module M {
export async function f1() { }
}
async function f14() {
block: {
await 1;
break block;
}
}

View File

@@ -14,7 +14,7 @@ let f6 = async function(): MyPromise<void> { }
let f7 = async () => { };
let f8 = async (): Promise<void> => { };
let f9 = async (): MyPromise<void> => { };
let f9 = async (): MyPromise<void> => { };
let f10 = async () => p;
let f11 = async () => mp;
let f12 = async (): Promise<number> => mp;
@@ -37,4 +37,11 @@ class C {
module M {
export async function f1() { }
}
async function f14() {
block: {
await 1;
break block;
}
}