Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 35b7088

Browse files
committedJun 16, 2020
Reparse top-level 'await' in modules
1 parent 3c0fb4c commit 35b7088

File tree

41 files changed

+2097
-44
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2097
-44
lines changed
 

‎src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33533,7 +33533,7 @@ namespace ts {
3353333533
function checkThrowStatement(node: ThrowStatement) {
3353433534
// Grammar checking
3353533535
if (!checkGrammarStatementInAmbientContext(node)) {
33536-
if (node.expression === undefined) {
33536+
if (isIdentifier(node.expression) && !node.expression.escapedText) {
3353733537
grammarErrorAfterFirstToken(node, Diagnostics.Line_break_not_permitted_here);
3353833538
}
3353933539
}

‎src/compiler/factory/nodeFactory.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,13 @@ namespace ts {
557557
modifiers
558558
);
559559
node.name = asName(name);
560-
node.transformFlags |= propagateChildFlags(node.name);
560+
node.transformFlags |=
561+
kind === SyntaxKind.MethodDeclaration ||
562+
kind === SyntaxKind.GetAccessor ||
563+
kind === SyntaxKind.SetAccessor ||
564+
kind === SyntaxKind.PropertyDeclaration ?
565+
propagatePropertyNameFlags(node.name) :
566+
propagateChildFlags(node.name) ;
561567
return node;
562568
}
563569

@@ -824,6 +830,9 @@ namespace ts {
824830
// NOTE: we do not use `setChildren` here because typeArguments in an identifier do not contribute to transformations
825831
node.typeArguments = createNodeArray(typeArguments);
826832
}
833+
if (node.originalKeywordKind === SyntaxKind.AwaitKeyword) {
834+
node.transformFlags |= TransformFlags.ContainsPossibleTopLevelAwait;
835+
}
827836
return node;
828837
}
829838

@@ -2094,7 +2103,7 @@ namespace ts {
20942103
node.name = asName(name);
20952104
node.transformFlags =
20962105
propagateChildFlags(node.expression) |
2097-
propagateChildFlags(node.name);
2106+
propagatePropertyNameFlags(node.name);
20982107
if (isSuperKeyword(expression)) {
20992108
// super method calls require a lexical 'this'
21002109
// super method calls require 'super' hoisting in ES2017 and ES2018 async functions and async generators
@@ -5777,14 +5786,23 @@ namespace ts {
57775786
return tokenValue;
57785787
}
57795788

5780-
function propagatePropertyNameFlags(node: PropertyName, transformFlags: TransformFlags) {
5789+
function propagatePropertyNameFlags(node: Node | undefined) {
5790+
if (!node) return TransformFlags.None;
5791+
// `await` in a property name should not be considered a possible top-level await keyword
5792+
const transformFlags = propagateChildFlags(node);
5793+
return isIdentifier(node) ?
5794+
transformFlags & ~TransformFlags.ContainsPossibleTopLevelAwait :
5795+
transformFlags;
5796+
}
5797+
5798+
function propagatePropertyNameFlagsOfChild(node: PropertyName, transformFlags: TransformFlags) {
57815799
return transformFlags | (node.transformFlags & TransformFlags.PropertyNamePropagatingFlags);
57825800
}
57835801

57845802
function propagateChildFlags(child: Node | undefined): TransformFlags {
57855803
if (!child) return TransformFlags.None;
57865804
const childFlags = child.transformFlags & ~getTransformFlagsSubtreeExclusions(child.kind);
5787-
return isNamedDeclaration(child) && isPropertyName(child.name) ? propagatePropertyNameFlags(child.name, childFlags) : childFlags;
5805+
return isNamedDeclaration(child) && isPropertyName(child.name) ? propagatePropertyNameFlagsOfChild(child.name, childFlags) : childFlags;
57885806
}
57895807

57905808
function propagateChildrenFlags(children: NodeArray<Node> | undefined): TransformFlags {

0 commit comments

Comments
 (0)
Please sign in to comment.