mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Always yield await in async generator
This commit is contained in:
@@ -118,28 +118,44 @@ namespace ts {
|
||||
}
|
||||
|
||||
function visitYieldExpression(node: YieldExpression) {
|
||||
if (enclosingFunctionFlags & FunctionFlags.Async && enclosingFunctionFlags & FunctionFlags.Generator && 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
|
||||
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
|
||||
),
|
||||
node
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
if (node.expression && node.expression.kind !== SyntaxKind.AwaitExpression) {
|
||||
return setOriginalNode(
|
||||
setTextRange(
|
||||
createYield(
|
||||
createDownlevelAwait(node.expression)
|
||||
),
|
||||
node
|
||||
),
|
||||
node
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return visitEachChild(node, visitor, context);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,9 +54,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*/];
|
||||
}
|
||||
|
||||
@@ -136,7 +136,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);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -210,7 +210,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); }); })())));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,8 +239,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*/];
|
||||
}
|
||||
@@ -412,8 +413,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*/];
|
||||
}
|
||||
|
||||
@@ -100,7 +100,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]
|
||||
@@ -170,7 +170,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]
|
||||
|
||||
@@ -195,8 +195,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*/];
|
||||
}
|
||||
@@ -358,8 +359,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*/];
|
||||
}
|
||||
|
||||
@@ -100,7 +100,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]
|
||||
@@ -170,7 +170,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]
|
||||
|
||||
@@ -195,8 +195,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*/];
|
||||
}
|
||||
@@ -358,8 +359,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*/];
|
||||
}
|
||||
|
||||
@@ -119,7 +119,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);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -193,7 +193,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); }); })())));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -214,8 +214,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*/];
|
||||
}
|
||||
@@ -381,8 +382,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*/];
|
||||
}
|
||||
|
||||
@@ -135,7 +135,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 }; }
|
||||
@@ -178,7 +178,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 }; }
|
||||
@@ -256,7 +256,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +115,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 }; }
|
||||
@@ -158,7 +158,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 }; }
|
||||
@@ -226,7 +226,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,35 +259,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*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -350,35 +351,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*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -523,35 +525,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*/];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user