(pos int, jsdoc jsdocScannerInfo, modifiers *ast.ModifierList)
| 1714 | } |
| 1715 | |
| 1716 | func (p *Parser) parseFunctionDeclaration(pos int, jsdoc jsdocScannerInfo, modifiers *ast.ModifierList) *ast.Node { |
| 1717 | p.parseExpected(ast.KindFunctionKeyword) |
| 1718 | asteriskToken := p.parseOptionalToken(ast.KindAsteriskToken) |
| 1719 | // We don't parse the name here in await context, instead we will report a grammar error in the checker. |
| 1720 | var name *ast.Node |
| 1721 | if modifiers == nil || modifiers.ModifierFlags&ast.ModifierFlagsDefault == 0 || p.isBindingIdentifier() { |
| 1722 | name = p.parseBindingIdentifier() |
| 1723 | } |
| 1724 | signatureFlags := core.IfElse(asteriskToken != nil, ParseFlagsYield, ParseFlagsNone) | core.IfElse(modifiers != nil && modifiers.ModifierFlags&ast.ModifierFlagsAsync != 0, ParseFlagsAwait, ParseFlagsNone) |
| 1725 | typeParameters := p.parseTypeParameters() |
| 1726 | saveContextFlags := p.contextFlags |
| 1727 | if modifiers != nil && modifiers.ModifierFlags&ast.ModifierFlagsExport != 0 { |
| 1728 | p.setContextFlags(ast.NodeFlagsAwaitContext, true) |
| 1729 | } |
| 1730 | parameters := p.parseParameters(signatureFlags) |
| 1731 | returnType := p.parseReturnType(ast.KindColonToken, false /*isType*/) |
| 1732 | body := p.parseFunctionBlockOrSemicolon(signatureFlags, diagnostics.X_or_expected) |
| 1733 | p.contextFlags = saveContextFlags |
| 1734 | result := p.finishNode(p.factory.NewFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, returnType, nil /*fullSignature*/, body), pos) |
| 1735 | p.withJSDoc(result, jsdoc) |
| 1736 | p.checkJSSyntax(result) |
| 1737 | return result |
| 1738 | } |
| 1739 | |
| 1740 | func (p *Parser) parseClassDeclaration(pos int, jsdoc jsdocScannerInfo, modifiers *ast.ModifierList) *ast.Node { |
| 1741 | return p.parseClassDeclarationOrExpression(pos, jsdoc, modifiers, ast.KindClassDeclaration) |
no test coverage detected