MCPcopy Index your code
hub / github.com/microsoft/typescript-go / parseFunctionExpression

Method parseFunctionExpression

internal/parser/parser.go:5692–5729  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

5690}
5691
5692func (p *Parser) parseFunctionExpression() *ast.Expression {
5693 // GeneratorExpression:
5694 // function* BindingIdentifier [Yield][opt](FormalParameters[Yield]){ GeneratorBody }
5695 //
5696 // FunctionExpression:
5697 // function BindingIdentifier[opt](FormalParameters){ FunctionBody }
5698 saveContexFlags := p.contextFlags
5699 p.setContextFlags(ast.NodeFlagsDecoratorContext, false)
5700 pos := p.nodePos()
5701 jsdoc := p.jsdocScannerInfo()
5702 modifiers := p.parseModifiers()
5703 p.parseExpected(ast.KindFunctionKeyword)
5704 asteriskToken := p.parseOptionalToken(ast.KindAsteriskToken)
5705 isGenerator := asteriskToken != nil
5706 isAsync := modifierListHasAsync(modifiers)
5707 signatureFlags := core.IfElse(isGenerator, ParseFlagsYield, ParseFlagsNone) | core.IfElse(isAsync, ParseFlagsAwait, ParseFlagsNone)
5708 var name *ast.Node
5709 switch {
5710 case isGenerator && isAsync:
5711 name = doInContext(p, ast.NodeFlagsYieldContext|ast.NodeFlagsAwaitContext, true, (*Parser).parseOptionalBindingIdentifier)
5712 case isGenerator:
5713 name = doInContext(p, ast.NodeFlagsYieldContext, true, (*Parser).parseOptionalBindingIdentifier)
5714 case isAsync:
5715 name = doInContext(p, ast.NodeFlagsAwaitContext, true, (*Parser).parseOptionalBindingIdentifier)
5716 default:
5717 name = p.parseOptionalBindingIdentifier()
5718 }
5719 typeParameters := p.parseTypeParameters()
5720 parameters := p.parseParameters(signatureFlags)
5721 returnType := p.parseReturnType(ast.KindColonToken, false /*isType*/)
5722 body := p.parseFunctionBlock(signatureFlags, nil /*diagnosticMessage*/)
5723 p.contextFlags = saveContexFlags
5724 result := p.factory.NewFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, returnType, nil /*fullSignature*/, body)
5725 p.finishNode(result, pos)
5726 p.withJSDoc(result, jsdoc)
5727 p.checkJSSyntax(result)
5728 return result
5729}
5730
5731func (p *Parser) parseOptionalBindingIdentifier() *ast.Node {
5732 if p.isBindingIdentifier() {

Callers 1

Calls 15

setContextFlagsMethod · 0.95
nodePosMethod · 0.95
jsdocScannerInfoMethod · 0.95
parseModifiersMethod · 0.95
parseExpectedMethod · 0.95
parseOptionalTokenMethod · 0.95
parseTypeParametersMethod · 0.95
parseParametersMethod · 0.95
parseReturnTypeMethod · 0.95
parseFunctionBlockMethod · 0.95
finishNodeMethod · 0.95

Tested by

no test coverage detected