()
| 5690 | } |
| 5691 | |
| 5692 | func (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 | |
| 5731 | func (p *Parser) parseOptionalBindingIdentifier() *ast.Node { |
| 5732 | if p.isBindingIdentifier() { |
no test coverage detected