Fix loop block scope binding in generator

This commit is contained in:
Ron Buckton
2017-04-19 17:06:12 -07:00
parent 6793466cc5
commit 6c176138ca
5 changed files with 142 additions and 5 deletions

View File

@@ -2714,9 +2714,8 @@ namespace ts {
loopBody = createBlock([loopBody], /*multiline*/ true);
}
const isAsyncBlockContainingAwait =
hierarchyFacts & HierarchyFacts.AsyncFunctionBody
&& (node.statement.transformFlags & TransformFlags.ContainsYield) !== 0;
const containsYield = (node.statement.transformFlags & TransformFlags.ContainsYield) !== 0;
const isAsyncBlockContainingAwait = containsYield && (hierarchyFacts & HierarchyFacts.AsyncFunctionBody) !== 0;
let loopBodyFlags: EmitFlags = 0;
if (currentState.containsLexicalThis) {
@@ -2739,7 +2738,7 @@ namespace ts {
setEmitFlags(
createFunctionExpression(
/*modifiers*/ undefined,
isAsyncBlockContainingAwait ? createToken(SyntaxKind.AsteriskToken) : undefined,
containsYield ? createToken(SyntaxKind.AsteriskToken) : undefined,
/*name*/ undefined,
/*typeParameters*/ undefined,
loopParameters,
@@ -2833,7 +2832,7 @@ namespace ts {
));
}
const convertedLoopBodyStatements = generateCallToConvertedLoop(functionName, loopParameters, currentState, isAsyncBlockContainingAwait);
const convertedLoopBodyStatements = generateCallToConvertedLoop(functionName, loopParameters, currentState, containsYield);
let loop: Statement;
if (convert) {