(decorators?: DecoratorNode[])
| 813 | |
| 814 | // classdef: 'class' NAME ['(' [arglist] ')'] suite |
| 815 | private _parseClassDef(decorators?: DecoratorNode[]): ClassNode { |
| 816 | let classToken = this._getKeywordToken(KeywordType.Class); |
| 817 | |
| 818 | let nameToken = this._getTokenIfIdentifier(); |
| 819 | if (!nameToken) { |
| 820 | this._addError('Expected class name', this._peekToken()); |
| 821 | nameToken = new IdentifierToken(0, 0, ''); |
| 822 | } |
| 823 | |
| 824 | let argList: ArgumentNode[] = []; |
| 825 | if (this._consumeTokenIfType(TokenType.OpenParenthesis)) { |
| 826 | argList = this._parseArgList(); |
| 827 | |
| 828 | if (!this._consumeTokenIfType(TokenType.CloseParenthesis)) { |
| 829 | this._addError('Expected ")"', this._peekToken()); |
| 830 | } |
| 831 | } |
| 832 | |
| 833 | let suite = this._parseSuite(); |
| 834 | |
| 835 | let classNode = new ClassNode(classToken, new NameNode(nameToken), suite); |
| 836 | classNode.arguments = argList; |
| 837 | if (decorators) { |
| 838 | classNode.decorators = decorators; |
| 839 | if (decorators.length > 0) { |
| 840 | classNode.extend(decorators[0]); |
| 841 | } |
| 842 | } |
| 843 | |
| 844 | return classNode; |
| 845 | } |
| 846 | |
| 847 | private _parsePassStatement(): PassNode { |
| 848 | return new PassNode(this._getKeywordToken(KeywordType.Pass)); |
no test coverage detected