Merge pull request #23887 from agentcooper/async-generator-resolve-promise

Resolve promise inside async generator
This commit is contained in:
Ron Buckton
2018-05-09 00:23:47 -07:00
committed by GitHub
14 changed files with 150 additions and 115 deletions
+30 -12
View File
@@ -118,21 +118,38 @@ namespace ts {
}
function visitYieldExpression(node: YieldExpression) {
if (enclosingFunctionFlags & FunctionFlags.Async && enclosingFunctionFlags & FunctionFlags.Generator && node.asteriskToken) {
const expression = visitNode(node.expression, visitor, isExpression);
if (enclosingFunctionFlags & FunctionFlags.Async && enclosingFunctionFlags & FunctionFlags.Generator) {
if (node.asteriskToken) {
const expression = visitNode(node.expression, visitor, isExpression);
return setOriginalNode(
setTextRange(
createYield(
createAwaitHelper(context,
updateYield(
node,
node.asteriskToken,
createAsyncDelegatorHelper(
context,
createAsyncValuesHelper(context, expression, expression),
expression
)
)
)
),
node
),
node
);
}
return setOriginalNode(
setTextRange(
createYield(
createAwaitHelper(context,
updateYield(
node,
node.asteriskToken,
createAsyncDelegatorHelper(
context,
createAsyncValuesHelper(context, expression, expression),
expression
)
)
createDownlevelAwait(
node.expression
? visitNode(node.expression, visitor, isExpression)
: createVoidZero()
)
),
node
@@ -140,6 +157,7 @@ namespace ts {
node
);
}
return visitEachChild(node, visitor, context);
}
@@ -47,9 +47,10 @@ function foo() {
return __asyncGenerator(this, arguments, function foo_1() {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, "foo"];
case 1: return [4 /*yield*/, __await.apply(void 0, [Promise.resolve().then(function () { return require(_a.sent()); })])];
case 2:
case 0: return [4 /*yield*/, __await("foo")];
case 1: return [4 /*yield*/, _a.sent()];
case 2: return [4 /*yield*/, __await.apply(void 0, [Promise.resolve().then(function () { return require(_a.sent()); })])];
case 3:
Promise.resolve().then(function () { return require((_a.sent())["default"]); });
return [2 /*return*/];
}
@@ -95,7 +95,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
class C2 {
f() {
return __asyncGenerator(this, arguments, function* f_1() {
const x = yield;
const x = yield yield __await(void 0);
});
}
}
@@ -115,7 +115,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
class C3 {
f() {
return __asyncGenerator(this, arguments, function* f_1() {
const x = yield 1;
const x = yield yield __await(1);
});
}
}
@@ -175,7 +175,7 @@ var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
class C5 {
f() {
return __asyncGenerator(this, arguments, function* f_1() {
const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield 1; }); })())));
const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield yield __await(1); }); })())));
});
}
}
@@ -160,8 +160,9 @@ var C2 = /** @class */ (function () {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/];
case 1:
case 0: return [4 /*yield*/, __await(void 0)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
x = _a.sent();
return [2 /*return*/];
}
@@ -218,8 +219,9 @@ var C3 = /** @class */ (function () {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
case 0: return [4 /*yield*/, __await(1)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
x = _a.sent();
return [2 /*return*/];
}
@@ -377,8 +379,9 @@ var C5 = /** @class */ (function () {
switch (_a.label) {
case 0: return [5 /*yield**/, __values(__asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
case 0: return [4 /*yield*/, __await(1)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
_a.sent();
return [2 /*return*/];
}
@@ -61,7 +61,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
};
function f2() {
return __asyncGenerator(this, arguments, function* f2_1() {
const x = yield;
const x = yield yield __await(void 0);
});
}
//// [F3.js]
@@ -79,7 +79,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
};
function f3() {
return __asyncGenerator(this, arguments, function* f3_1() {
const x = yield 1;
const x = yield yield __await(1);
});
}
//// [F4.js]
@@ -135,7 +135,7 @@ var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
};
function f5() {
return __asyncGenerator(this, arguments, function* f5_1() {
const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield 1; }); })())));
const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield yield __await(1); }); })())));
});
}
//// [F6.js]
@@ -121,8 +121,9 @@ function f2() {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/];
case 1:
case 0: return [4 /*yield*/, __await(void 0)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
x = _a.sent();
return [2 /*return*/];
}
@@ -174,8 +175,9 @@ function f3() {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
case 0: return [4 /*yield*/, __await(1)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
x = _a.sent();
return [2 /*return*/];
}
@@ -323,8 +325,9 @@ function f5() {
switch (_a.label) {
case 0: return [5 /*yield**/, __values(__asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
case 0: return [4 /*yield*/, __await(1)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
_a.sent();
return [2 /*return*/];
}
@@ -61,7 +61,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
};
const f2 = function () {
return __asyncGenerator(this, arguments, function* () {
const x = yield;
const x = yield yield __await(void 0);
});
};
//// [F3.js]
@@ -79,7 +79,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
};
const f3 = function () {
return __asyncGenerator(this, arguments, function* () {
const x = yield 1;
const x = yield yield __await(1);
});
};
//// [F4.js]
@@ -135,7 +135,7 @@ var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
};
const f5 = function () {
return __asyncGenerator(this, arguments, function* () {
const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield 1; }); })())));
const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield yield __await(1); }); })())));
});
};
//// [F6.js]
@@ -121,8 +121,9 @@ var f2 = function () {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/];
case 1:
case 0: return [4 /*yield*/, __await(void 0)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
x = _a.sent();
return [2 /*return*/];
}
@@ -174,8 +175,9 @@ var f3 = function () {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
case 0: return [4 /*yield*/, __await(1)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
x = _a.sent();
return [2 /*return*/];
}
@@ -323,8 +325,9 @@ var f5 = function () {
switch (_a.label) {
case 0: return [5 /*yield**/, __values(__asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
case 0: return [4 /*yield*/, __await(1)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
_a.sent();
return [2 /*return*/];
}
@@ -78,7 +78,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
const o2 = {
f() {
return __asyncGenerator(this, arguments, function* f_1() {
const x = yield;
const x = yield yield __await(void 0);
});
}
};
@@ -98,7 +98,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
const o3 = {
f() {
return __asyncGenerator(this, arguments, function* f_1() {
const x = yield 1;
const x = yield yield __await(1);
});
}
};
@@ -158,7 +158,7 @@ var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
const o5 = {
f() {
return __asyncGenerator(this, arguments, function* f_1() {
const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield 1; }); })())));
const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield yield __await(1); }); })())));
});
}
};
@@ -138,8 +138,9 @@ var o2 = {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/];
case 1:
case 0: return [4 /*yield*/, __await(void 0)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
x = _a.sent();
return [2 /*return*/];
}
@@ -193,8 +194,9 @@ var o3 = {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
case 0: return [4 /*yield*/, __await(1)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
x = _a.sent();
return [2 /*return*/];
}
@@ -346,8 +348,9 @@ var o5 = {
switch (_a.label) {
case 0: return [5 /*yield**/, __values(__asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, 1];
case 1:
case 0: return [4 /*yield*/, __await(1)];
case 1: return [4 /*yield*/, _a.sent()];
case 2:
_a.sent();
return [2 /*return*/];
}
@@ -128,7 +128,7 @@ function f3() {
let y;
try {
for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) {
const x = yield __await(y_1_1.value);
const x = yield yield __await(__await(y_1_1.value));
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -164,7 +164,7 @@ function f4() {
let x, y;
try {
for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) {
x = yield __await(y_1_1.value);
x = yield yield __await(__await(y_1_1.value));
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -235,7 +235,7 @@ function f6() {
let y;
try {
outer: for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) {
const x = yield __await(y_1_1.value);
const x = yield yield __await(__await(y_1_1.value));
continue outer;
}
}
@@ -108,7 +108,7 @@ function f3() {
let y;
try {
for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) {
const x = yield __await(y_1_1.value);
const x = yield yield __await(__await(y_1_1.value));
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -144,7 +144,7 @@ function f4() {
let x, y;
try {
for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) {
x = yield __await(y_1_1.value);
x = yield yield __await(__await(y_1_1.value));
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -205,7 +205,7 @@ function f6() {
let y;
try {
outer: for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) {
const x = yield __await(y_1_1.value);
const x = yield yield __await(__await(y_1_1.value));
continue outer;
}
}
@@ -252,35 +252,36 @@ function f3() {
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 6, 7, 12]);
_b.trys.push([0, 7, 8, 13]);
y_1 = __asyncValues(y);
_b.label = 1;
case 1: return [4 /*yield*/, __await(y_1.next())];
case 2:
if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 5];
return [4 /*yield*/, __await(y_1_1.value)];
case 3:
if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 6];
return [4 /*yield*/, __await(__await(y_1_1.value))];
case 3: return [4 /*yield*/, _b.sent()];
case 4:
x = _b.sent();
_b.label = 4;
case 4: return [3 /*break*/, 1];
case 5: return [3 /*break*/, 12];
case 6:
_b.label = 5;
case 5: return [3 /*break*/, 1];
case 6: return [3 /*break*/, 13];
case 7:
e_1_1 = _b.sent();
e_1 = { error: e_1_1 };
return [3 /*break*/, 12];
case 7:
_b.trys.push([7, , 10, 11]);
if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 9];
return [4 /*yield*/, __await(_a.call(y_1))];
return [3 /*break*/, 13];
case 8:
_b.trys.push([8, , 11, 12]);
if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 10];
return [4 /*yield*/, __await(_a.call(y_1))];
case 9:
_b.sent();
_b.label = 9;
case 9: return [3 /*break*/, 11];
case 10:
_b.label = 10;
case 10: return [3 /*break*/, 12];
case 11:
if (e_1) throw e_1.error;
return [7 /*endfinally*/];
case 11: return [7 /*endfinally*/];
case 12: return [2 /*return*/];
case 12: return [7 /*endfinally*/];
case 13: return [2 /*return*/];
}
});
});
@@ -336,35 +337,36 @@ function f4() {
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 6, 7, 12]);
_b.trys.push([0, 7, 8, 13]);
y_1 = __asyncValues(y);
_b.label = 1;
case 1: return [4 /*yield*/, __await(y_1.next())];
case 2:
if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 5];
return [4 /*yield*/, __await(y_1_1.value)];
case 3:
if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 6];
return [4 /*yield*/, __await(__await(y_1_1.value))];
case 3: return [4 /*yield*/, _b.sent()];
case 4:
x = _b.sent();
_b.label = 4;
case 4: return [3 /*break*/, 1];
case 5: return [3 /*break*/, 12];
case 6:
_b.label = 5;
case 5: return [3 /*break*/, 1];
case 6: return [3 /*break*/, 13];
case 7:
e_1_1 = _b.sent();
e_1 = { error: e_1_1 };
return [3 /*break*/, 12];
case 7:
_b.trys.push([7, , 10, 11]);
if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 9];
return [4 /*yield*/, __await(_a.call(y_1))];
return [3 /*break*/, 13];
case 8:
_b.trys.push([8, , 11, 12]);
if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 10];
return [4 /*yield*/, __await(_a.call(y_1))];
case 9:
_b.sent();
_b.label = 9;
case 9: return [3 /*break*/, 11];
case 10:
_b.label = 10;
case 10: return [3 /*break*/, 12];
case 11:
if (e_1) throw e_1.error;
return [7 /*endfinally*/];
case 11: return [7 /*endfinally*/];
case 12: return [2 /*return*/];
case 12: return [7 /*endfinally*/];
case 13: return [2 /*return*/];
}
});
});
@@ -502,35 +504,36 @@ function f6() {
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 6, 7, 12]);
_b.trys.push([0, 7, 8, 13]);
y_1 = __asyncValues(y);
_b.label = 1;
case 1: return [4 /*yield*/, __await(y_1.next())];
case 2:
if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 5];
return [4 /*yield*/, __await(y_1_1.value)];
case 3:
if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 6];
return [4 /*yield*/, __await(__await(y_1_1.value))];
case 3: return [4 /*yield*/, _b.sent()];
case 4:
x = _b.sent();
return [3 /*break*/, 4];
case 4: return [3 /*break*/, 1];
case 5: return [3 /*break*/, 12];
case 6:
return [3 /*break*/, 5];
case 5: return [3 /*break*/, 1];
case 6: return [3 /*break*/, 13];
case 7:
e_1_1 = _b.sent();
e_1 = { error: e_1_1 };
return [3 /*break*/, 12];
case 7:
_b.trys.push([7, , 10, 11]);
if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 9];
return [4 /*yield*/, __await(_a.call(y_1))];
return [3 /*break*/, 13];
case 8:
_b.trys.push([8, , 11, 12]);
if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 10];
return [4 /*yield*/, __await(_a.call(y_1))];
case 9:
_b.sent();
_b.label = 9;
case 9: return [3 /*break*/, 11];
case 10:
_b.label = 10;
case 10: return [3 /*break*/, 12];
case 11:
if (e_1) throw e_1.error;
return [7 /*endfinally*/];
case 11: return [7 /*endfinally*/];
case 12: return [2 /*return*/];
case 12: return [7 /*endfinally*/];
case 13: return [2 /*return*/];
}
});
});
@@ -22,12 +22,13 @@ function f() {
case 0: return [4 /*yield*/, tslib_1.__await(1)];
case 1:
_a.sent();
return [4 /*yield*/, 2];
case 2:
return [4 /*yield*/, tslib_1.__await(2)];
case 2: return [4 /*yield*/, _a.sent()];
case 3:
_a.sent();
return [5 /*yield**/, tslib_1.__values(tslib_1.__asyncDelegator(tslib_1.__asyncValues([3])))];
case 3: return [4 /*yield*/, tslib_1.__await.apply(void 0, [_a.sent()])];
case 4:
case 4: return [4 /*yield*/, tslib_1.__await.apply(void 0, [_a.sent()])];
case 5:
_a.sent();
return [2 /*return*/];
}