Always yield await in async generator

This commit is contained in:
Artem Tyurin
2018-05-05 02:44:35 +02:00
parent 3e4279195f
commit fa94fb079c
14 changed files with 137 additions and 108 deletions

View File

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