Skip to content

Commit eb8eeaf

Browse files
Allow parsing tagged templates with type arguments in new expressions.
1 parent 2510c19 commit eb8eeaf

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

src/compiler/parser.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4684,9 +4684,23 @@ namespace ts {
46844684
return finishNode(node);
46854685
}
46864686

4687+
let expression: MemberExpression = parsePrimaryExpression();
4688+
let typeArguments;
4689+
while (true) {
4690+
expression = parseMemberExpressionRest(expression);
4691+
typeArguments = tryParse(parseTypeArgumentsInExpression);
4692+
if (isTemplateStartOfTaggedTemplate()) {
4693+
Debug.assert(!!typeArguments,
4694+
"Expected a type argument list; all plain tagged template starts should be consumed in 'parseMemberExpressionRest'");
4695+
expression = parseTaggedTemplateRest(expression, typeArguments);
4696+
typeArguments = undefined;
4697+
}
4698+
break;
4699+
}
4700+
46874701
const node = <NewExpression>createNode(SyntaxKind.NewExpression, fullStart);
4688-
node.expression = parseMemberExpressionOrHigher();
4689-
node.typeArguments = tryParse(parseTypeArgumentsInExpression);
4702+
node.expression = expression;
4703+
node.typeArguments = typeArguments;
46904704
if (node.typeArguments || token() === SyntaxKind.OpenParenToken) {
46914705
node.arguments = parseArgumentList();
46924706
}

0 commit comments

Comments
 (0)