(pos int, expression *ast.Expression)
| 5461 | } |
| 5462 | |
| 5463 | func (p *Parser) parseCallExpressionRest(pos int, expression *ast.Expression) *ast.Expression { |
| 5464 | for { |
| 5465 | expression = p.parseMemberExpressionRest(pos, expression /*allowOptionalChain*/, true) |
| 5466 | var typeArguments *ast.NodeList |
| 5467 | questionDotToken := p.parseOptionalToken(ast.KindQuestionDotToken) |
| 5468 | if questionDotToken != nil { |
| 5469 | typeArguments = p.tryParseTypeArgumentsInExpression() |
| 5470 | if p.isTemplateStartOfTaggedTemplate() { |
| 5471 | expression = p.parseTaggedTemplateRest(pos, expression, questionDotToken, typeArguments) |
| 5472 | continue |
| 5473 | } |
| 5474 | } |
| 5475 | if typeArguments != nil || p.token == ast.KindOpenParenToken { |
| 5476 | // Absorb type arguments into CallExpression when preceding expression is ExpressionWithTypeArguments |
| 5477 | if questionDotToken == nil && expression.Kind == ast.KindExpressionWithTypeArguments { |
| 5478 | typeArguments = expression.TypeArgumentList() |
| 5479 | expression = expression.AsExpressionWithTypeArguments().Expression |
| 5480 | } |
| 5481 | inner := expression |
| 5482 | argumentList := p.parseArgumentList() |
| 5483 | isOptionalChain := questionDotToken != nil || p.tryReparseOptionalChain(expression) |
| 5484 | expression = p.checkJSSyntax(p.finishNode(p.factory.NewCallExpression(expression, questionDotToken, typeArguments, argumentList, core.IfElse(isOptionalChain, ast.NodeFlagsOptionalChain, ast.NodeFlagsNone)), pos)) |
| 5485 | p.unparseExpressionWithTypeArguments(inner, typeArguments, expression) |
| 5486 | continue |
| 5487 | } |
| 5488 | if questionDotToken != nil { |
| 5489 | // We parsed `?.` but then failed to parse anything, so report a missing identifier here. |
| 5490 | p.parseErrorAtCurrentToken(diagnostics.Identifier_expected) |
| 5491 | name := p.createMissingIdentifier() |
| 5492 | expression = p.finishNode(p.factory.NewPropertyAccessExpression(expression, questionDotToken, name, ast.NodeFlagsOptionalChain), pos) |
| 5493 | } |
| 5494 | break |
| 5495 | } |
| 5496 | return expression |
| 5497 | } |
| 5498 | |
| 5499 | func (p *Parser) parseArgumentList() *ast.NodeList { |
| 5500 | p.parseExpected(ast.KindOpenParenToken) |
no test coverage detected