forked from qt-creator/qt-creator
		
	Mainly comma tokens. Referencing all tokens is necessary to be able to implement pretty-printing based on the AST while maintaining user formatting. Reviewed-by: Roberto Raggi
		
			
				
	
	
		
			2417 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			2417 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**************************************************************************
 | |
| **
 | |
| ** This file is part of Qt Creator
 | |
| **
 | |
| ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 | |
| **
 | |
| ** Contact:  Qt Software Information (qt-info@nokia.com)
 | |
| **
 | |
| ** Commercial Usage
 | |
| **
 | |
| ** Licensees holding valid Qt Commercial licenses may use this file in
 | |
| ** accordance with the Qt Commercial License Agreement provided with the
 | |
| ** Software or, alternatively, in accordance with the terms contained in
 | |
| ** a written agreement between you and Nokia.
 | |
| **
 | |
| ** GNU Lesser General Public License Usage
 | |
| **
 | |
| ** Alternatively, this file may be used under the terms of the GNU Lesser
 | |
| ** General Public License version 2.1 as published by the Free Software
 | |
| ** Foundation and appearing in the file LICENSE.LGPL included in the
 | |
| ** packaging of this file.  Please review the following information to
 | |
| ** ensure the GNU Lesser General Public License version 2.1 requirements
 | |
| ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | |
| **
 | |
| ** If you are unsure which license is appropriate for your use, please
 | |
| ** contact the sales department at qt-sales@nokia.com.
 | |
| **
 | |
| **************************************************************************/
 | |
| // Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
 | |
| //
 | |
| // Permission is hereby granted, free of charge, to any person obtaining a copy
 | |
| // of this software and associated documentation files (the "Software"), to deal
 | |
| // in the Software without restriction, including without limitation the rights
 | |
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | |
| // copies of the Software, and to permit persons to whom the Software is
 | |
| // furnished to do so, subject to the following conditions:
 | |
| //
 | |
| // The above copyright notice and this permission notice shall be included in
 | |
| // all copies or substantial portions of the Software.
 | |
| //
 | |
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | |
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | |
| // THE SOFTWARE.
 | |
| 
 | |
| #ifndef CPLUSPLUS_AST_H
 | |
| #define CPLUSPLUS_AST_H
 | |
| 
 | |
| #include "CPlusPlusForwardDeclarations.h"
 | |
| #include "ASTfwd.h"
 | |
| #include "MemoryPool.h"
 | |
| 
 | |
| CPLUSPLUS_BEGIN_HEADER
 | |
| CPLUSPLUS_BEGIN_NAMESPACE
 | |
| 
 | |
| template <typename _Tp>
 | |
| class List: public Managed
 | |
| {
 | |
|     List(const List &other);
 | |
|     void operator =(const List &other);
 | |
| 
 | |
| public:
 | |
|     List()
 | |
|     { }
 | |
| 
 | |
|     _Tp value;
 | |
|     List *next;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT AST: public Managed
 | |
| {
 | |
|     AST(const AST &other);
 | |
|     void operator =(const AST &other);
 | |
| 
 | |
| public:
 | |
|     AST();
 | |
|     virtual ~AST();
 | |
| 
 | |
|     void accept(ASTVisitor *visitor);
 | |
| 
 | |
|     static void accept(AST *ast, ASTVisitor *visitor)
 | |
|     { if (ast) ast->accept(visitor); }
 | |
| 
 | |
|     virtual unsigned firstToken() const = 0;
 | |
|     virtual unsigned lastToken() const = 0;
 | |
| 
 | |
|     virtual AccessDeclarationAST *asAccessDeclaration() { return 0; }
 | |
|     virtual ArrayAccessAST *asArrayAccess() { return 0; }
 | |
|     virtual ArrayDeclaratorAST *asArrayDeclarator() { return 0; }
 | |
|     virtual ArrayInitializerAST *asArrayInitializer() { return 0; }
 | |
|     virtual AsmDefinitionAST *asAsmDefinition() { return 0; }
 | |
|     virtual AttributeAST *asAttribute() { return 0; }
 | |
|     virtual AttributeSpecifierAST *asAttributeSpecifier() { return 0; }
 | |
|     virtual BaseSpecifierAST *asBaseSpecifier() { return 0; }
 | |
|     virtual QtMethodAST *asQtMethod() { return 0; }
 | |
|     virtual BinaryExpressionAST *asBinaryExpression() { return 0; }
 | |
|     virtual BoolLiteralAST *asBoolLiteral() { return 0; }
 | |
|     virtual BreakStatementAST *asBreakStatement() { return 0; }
 | |
|     virtual CallAST *asCall() { return 0; }
 | |
|     virtual CaseStatementAST *asCaseStatement() { return 0; }
 | |
|     virtual CastExpressionAST *asCastExpression() { return 0; }
 | |
|     virtual CatchClauseAST *asCatchClause() { return 0; }
 | |
|     virtual ClassSpecifierAST *asClassSpecifier() { return 0; }
 | |
|     virtual CompoundLiteralAST *asCompoundLiteral() { return 0; }
 | |
|     virtual CompoundStatementAST *asCompoundStatement() { return 0; }
 | |
|     virtual ConditionAST *asCondition() { return 0; }
 | |
|     virtual ConditionalExpressionAST *asConditionalExpression() { return 0; }
 | |
|     virtual ContinueStatementAST *asContinueStatement() { return 0; }
 | |
|     virtual ConversionFunctionIdAST *asConversionFunctionId() { return 0; }
 | |
|     virtual CoreDeclaratorAST *asCoreDeclarator() { return 0; }
 | |
|     virtual CppCastExpressionAST *asCppCastExpression() { return 0; }
 | |
|     virtual CtorInitializerAST *asCtorInitializer() { return 0; }
 | |
|     virtual DeclarationAST *asDeclaration() { return 0; }
 | |
|     virtual DeclarationStatementAST *asDeclarationStatement() { return 0; }
 | |
|     virtual DeclaratorAST *asDeclarator() { return 0; }
 | |
|     virtual DeclaratorIdAST *asDeclaratorId() { return 0; }
 | |
|     virtual DeclaratorListAST *asDeclaratorList() { return 0; }
 | |
|     virtual DeleteExpressionAST *asDeleteExpression() { return 0; }
 | |
|     virtual DestructorNameAST *asDestructorName() { return 0; }
 | |
|     virtual DoStatementAST *asDoStatement() { return 0; }
 | |
|     virtual ElaboratedTypeSpecifierAST *asElaboratedTypeSpecifier() { return 0; }
 | |
|     virtual EmptyDeclarationAST *asEmptyDeclaration() { return 0; }
 | |
|     virtual EnumSpecifierAST *asEnumSpecifier() { return 0; }
 | |
|     virtual EnumeratorAST *asEnumerator() { return 0; }
 | |
|     virtual ExceptionDeclarationAST *asExceptionDeclaration() { return 0; }
 | |
|     virtual ExceptionSpecificationAST *asExceptionSpecification() { return 0; }
 | |
|     virtual ExpressionAST *asExpression() { return 0; }
 | |
|     virtual ExpressionListAST *asExpressionList() { return 0; }
 | |
|     virtual ExpressionOrDeclarationStatementAST *asExpressionOrDeclarationStatement() { return 0; }
 | |
|     virtual ExpressionStatementAST *asExpressionStatement() { return 0; }
 | |
|     virtual ForStatementAST *asForStatement() { return 0; }
 | |
|     virtual FunctionDeclaratorAST *asFunctionDeclarator() { return 0; }
 | |
|     virtual FunctionDefinitionAST *asFunctionDefinition() { return 0; }
 | |
|     virtual GotoStatementAST *asGotoStatement() { return 0; }
 | |
|     virtual IfStatementAST *asIfStatement() { return 0; }
 | |
|     virtual LabeledStatementAST *asLabeledStatement() { return 0; }
 | |
|     virtual LinkageBodyAST *asLinkageBody() { return 0; }
 | |
|     virtual LinkageSpecificationAST *asLinkageSpecification() { return 0; }
 | |
|     virtual MemInitializerAST *asMemInitializer() { return 0; }
 | |
|     virtual MemberAccessAST *asMemberAccess() { return 0; }
 | |
|     virtual NameAST *asName() { return 0; }
 | |
|     virtual NamedTypeSpecifierAST *asNamedTypeSpecifier() { return 0; }
 | |
|     virtual NamespaceAST *asNamespace() { return 0; }
 | |
|     virtual NamespaceAliasDefinitionAST *asNamespaceAliasDefinition() { return 0; }
 | |
|     virtual NestedDeclaratorAST *asNestedDeclarator() { return 0; }
 | |
|     virtual NestedExpressionAST *asNestedExpression() { return 0; }
 | |
|     virtual NestedNameSpecifierAST *asNestedNameSpecifier() { return 0; }
 | |
|     virtual NewPlacementAST *asNewPlacement() { return 0; }
 | |
|     virtual NewArrayDeclaratorAST *asNewArrayDeclarator() { return 0; }
 | |
|     virtual NewExpressionAST *asNewExpression() { return 0; }
 | |
|     virtual NewInitializerAST *asNewInitializer() { return 0; }
 | |
|     virtual NewTypeIdAST *asNewTypeId() { return 0; }
 | |
|     virtual NumericLiteralAST *asNumericLiteral() { return 0; }
 | |
|     virtual OperatorAST *asOperator() { return 0; }
 | |
|     virtual OperatorFunctionIdAST *asOperatorFunctionId() { return 0; }
 | |
|     virtual ParameterDeclarationAST *asParameterDeclaration() { return 0; }
 | |
|     virtual ParameterDeclarationClauseAST *asParameterDeclarationClause() { return 0; }
 | |
|     virtual PointerAST *asPointer() { return 0; }
 | |
|     virtual PointerToMemberAST *asPointerToMember() { return 0; }
 | |
|     virtual PostIncrDecrAST *asPostIncrDecr() { return 0; }
 | |
|     virtual PostfixAST *asPostfix() { return 0; }
 | |
|     virtual PostfixDeclaratorAST *asPostfixDeclarator() { return 0; }
 | |
|     virtual PostfixExpressionAST *asPostfixExpression() { return 0; }
 | |
|     virtual PtrOperatorAST *asPtrOperator() { return 0; }
 | |
|     virtual QualifiedNameAST *asQualifiedName() { return 0; }
 | |
|     virtual ReferenceAST *asReference() { return 0; }
 | |
|     virtual ReturnStatementAST *asReturnStatement() { return 0; }
 | |
|     virtual SimpleDeclarationAST *asSimpleDeclaration() { return 0; }
 | |
|     virtual SimpleNameAST *asSimpleName() { return 0; }
 | |
|     virtual SimpleSpecifierAST *asSimpleSpecifier() { return 0; }
 | |
|     virtual SizeofExpressionAST *asSizeofExpression() { return 0; }
 | |
|     virtual SpecifierAST *asSpecifier() { return 0; }
 | |
|     virtual StatementAST *asStatement() { return 0; }
 | |
|     virtual StringLiteralAST *asStringLiteral() { return 0; }
 | |
|     virtual SwitchStatementAST *asSwitchStatement() { return 0; }
 | |
|     virtual TemplateArgumentListAST *asTemplateArgumentList() { return 0; }
 | |
|     virtual TemplateDeclarationAST *asTemplateDeclaration() { return 0; }
 | |
|     virtual TemplateIdAST *asTemplateId() { return 0; }
 | |
|     virtual TemplateTypeParameterAST *asTemplateTypeParameter() { return 0; }
 | |
|     virtual ThisExpressionAST *asThisExpression() { return 0; }
 | |
|     virtual ThrowExpressionAST *asThrowExpression() { return 0; }
 | |
|     virtual TranslationUnitAST *asTranslationUnit() { return 0; }
 | |
|     virtual TryBlockStatementAST *asTryBlockStatement() { return 0; }
 | |
|     virtual TypeConstructorCallAST *asTypeConstructorCall() { return 0; }
 | |
|     virtual TypeIdAST *asTypeId() { return 0; }
 | |
|     virtual TypeidExpressionAST *asTypeidExpression() { return 0; }
 | |
|     virtual TypenameCallExpressionAST *asTypenameCallExpression() { return 0; }
 | |
|     virtual TypenameTypeParameterAST *asTypenameTypeParameter() { return 0; }
 | |
|     virtual TypeofSpecifierAST *asTypeofSpecifier() { return 0; }
 | |
|     virtual UnaryExpressionAST *asUnaryExpression() { return 0; }
 | |
|     virtual UsingAST *asUsing() { return 0; }
 | |
|     virtual UsingDirectiveAST *asUsingDirective() { return 0; }
 | |
|     virtual WhileStatementAST *asWhileStatement() { return 0; }
 | |
|     virtual IdentifierListAST *asIdentifierList() { return 0; }
 | |
|     virtual ObjCClassDeclarationAST *asObjCClassDeclaration() { return 0; }
 | |
| 
 | |
|     virtual AST *clone(MemoryPool *pool) const = 0;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor) = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT SpecifierAST: public AST
 | |
| {
 | |
| public:
 | |
|     SpecifierAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual SpecifierAST *asSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual SpecifierAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT SimpleSpecifierAST: public SpecifierAST
 | |
| {
 | |
| public:
 | |
|     unsigned specifier_token;
 | |
| 
 | |
| public:
 | |
|     virtual SimpleSpecifierAST *asSimpleSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual SimpleSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT AttributeSpecifierAST: public SpecifierAST
 | |
| {
 | |
| public:
 | |
|     unsigned attribute_token;
 | |
|     unsigned first_lparen_token;
 | |
|     unsigned second_lparen_token;
 | |
|     AttributeAST *attributes;
 | |
|     unsigned first_rparen_token;
 | |
|     unsigned second_rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual AttributeSpecifierAST *asAttributeSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual AttributeSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT AttributeAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned identifier_token;
 | |
|     unsigned lparen_token;
 | |
|     unsigned tag_token;
 | |
|     ExpressionListAST *expression_list;
 | |
|     unsigned rparen_token;
 | |
|     AttributeAST *next;
 | |
|     unsigned comma_token;
 | |
| 
 | |
| public:
 | |
|     virtual AttributeAST *asAttribute()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual AttributeAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TypeofSpecifierAST: public SpecifierAST
 | |
| {
 | |
| public:
 | |
|     unsigned typeof_token;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual TypeofSpecifierAST *asTypeofSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TypeofSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT StatementAST: public AST
 | |
| {
 | |
| public:
 | |
|     StatementAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual StatementAST *asStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual StatementAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ExpressionAST: public AST
 | |
| {
 | |
| public:
 | |
|     virtual ExpressionAST *asExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual ExpressionAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT DeclarationAST: public AST
 | |
| {
 | |
| public:
 | |
|     DeclarationAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual DeclarationAST *asDeclaration()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual DeclarationAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CoreDeclaratorAST: public AST
 | |
| {
 | |
| public:
 | |
|     virtual CoreDeclaratorAST *asCoreDeclarator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual CoreDeclaratorAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT PostfixDeclaratorAST: public AST
 | |
| {
 | |
| public:
 | |
|     PostfixDeclaratorAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual PostfixDeclaratorAST *asPostfixDeclarator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual PostfixDeclaratorAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT DeclaratorAST: public AST
 | |
| {
 | |
| public:
 | |
|     PtrOperatorAST *ptr_operators;
 | |
|     CoreDeclaratorAST *core_declarator;
 | |
|     PostfixDeclaratorAST *postfix_declarators;
 | |
|     SpecifierAST *attributes;
 | |
|     unsigned equals_token;
 | |
|     ExpressionAST *initializer;
 | |
| 
 | |
| public:
 | |
|     virtual DeclaratorAST *asDeclarator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual DeclaratorAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ExpressionListAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned comma_token;
 | |
|     ExpressionAST *expression;
 | |
|     ExpressionListAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual ExpressionListAST *asExpressionList()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ExpressionListAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT SimpleDeclarationAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned qt_invokable_token;
 | |
|     SpecifierAST *decl_specifier_seq;
 | |
|     DeclaratorListAST *declarators;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     List<Declaration *> *symbols;
 | |
| 
 | |
| public:
 | |
|     virtual SimpleDeclarationAST *asSimpleDeclaration()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual SimpleDeclarationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT EmptyDeclarationAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual EmptyDeclarationAST *asEmptyDeclaration()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual EmptyDeclarationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT AccessDeclarationAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned access_specifier_token;
 | |
|     unsigned slots_token;
 | |
|     unsigned colon_token;
 | |
| 
 | |
| public:
 | |
|     virtual AccessDeclarationAST *asAccessDeclaration()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual AccessDeclarationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT AsmDefinitionAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned asm_token;
 | |
|     unsigned volatile_token;
 | |
|     unsigned lparen_token;
 | |
|     // ### string literals
 | |
|     // ### asm operand list
 | |
|     unsigned rparen_token;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual AsmDefinitionAST *asAsmDefinition()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual AsmDefinitionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT BaseSpecifierAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned comma_token;
 | |
|     unsigned token_virtual;
 | |
|     unsigned token_access_specifier;
 | |
|     NameAST *name;
 | |
|     BaseSpecifierAST *next;
 | |
| 
 | |
| public: // annotations
 | |
|     BaseClass *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual BaseSpecifierAST *asBaseSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual BaseSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CompoundLiteralAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *type_id;
 | |
|     unsigned rparen_token;
 | |
|     ExpressionAST *initializer;
 | |
| 
 | |
| public:
 | |
|     virtual CompoundLiteralAST *asCompoundLiteral()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual CompoundLiteralAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT QtMethodAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned method_token;
 | |
|     unsigned lparen_token;
 | |
|     DeclaratorAST *declarator;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual QtMethodAST *asQtMethod()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual QtMethodAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT BinaryExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     ExpressionAST *left_expression;
 | |
|     unsigned binary_op_token;
 | |
|     ExpressionAST *right_expression;
 | |
| 
 | |
| public:
 | |
|     virtual BinaryExpressionAST *asBinaryExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual BinaryExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CastExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *type_id;
 | |
|     unsigned rparen_token;
 | |
|     ExpressionAST *expression;
 | |
| 
 | |
| public:
 | |
|     virtual CastExpressionAST *asCastExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual CastExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ClassSpecifierAST: public SpecifierAST
 | |
| {
 | |
| public:
 | |
|     unsigned classkey_token;
 | |
|     SpecifierAST *attributes;
 | |
|     NameAST *name;
 | |
|     unsigned colon_token;
 | |
|     BaseSpecifierAST *base_clause;
 | |
|     unsigned lbrace_token;
 | |
|     DeclarationAST *member_specifiers;
 | |
|     unsigned rbrace_token;
 | |
| 
 | |
| public: // annotations
 | |
|     Class *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual ClassSpecifierAST *asClassSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ClassSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CaseStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned case_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned colon_token;
 | |
|     StatementAST *statement;
 | |
| 
 | |
| public:
 | |
|     virtual CaseStatementAST *asCaseStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual CaseStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CompoundStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned lbrace_token;
 | |
|     StatementAST *statements;
 | |
|     unsigned rbrace_token;
 | |
| 
 | |
| public: // annotations
 | |
|     Block *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual CompoundStatementAST *asCompoundStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual CompoundStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ConditionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     SpecifierAST *type_specifier;
 | |
|     DeclaratorAST *declarator;
 | |
| 
 | |
| public:
 | |
|     virtual ConditionAST *asCondition()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ConditionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ConditionalExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     ExpressionAST *condition;
 | |
|     unsigned question_token;
 | |
|     ExpressionAST *left_expression;
 | |
|     unsigned colon_token;
 | |
|     ExpressionAST *right_expression;
 | |
| 
 | |
| public:
 | |
|     virtual ConditionalExpressionAST *asConditionalExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ConditionalExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CppCastExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned cast_token;
 | |
|     unsigned less_token;
 | |
|     ExpressionAST *type_id;
 | |
|     unsigned greater_token;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual CppCastExpressionAST *asCppCastExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual CppCastExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CtorInitializerAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned colon_token;
 | |
|     MemInitializerAST *member_initializers;
 | |
| 
 | |
| public:
 | |
|     virtual CtorInitializerAST *asCtorInitializer()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual CtorInitializerAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT DeclarationStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     DeclarationAST *declaration;
 | |
| 
 | |
| public:
 | |
|     virtual DeclarationStatementAST *asDeclarationStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual DeclarationStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT DeclaratorIdAST: public CoreDeclaratorAST
 | |
| {
 | |
| public:
 | |
|     NameAST *name;
 | |
| 
 | |
| public:
 | |
|     virtual DeclaratorIdAST *asDeclaratorId()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual DeclaratorIdAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NestedDeclaratorAST: public CoreDeclaratorAST
 | |
| {
 | |
| public:
 | |
|     unsigned lparen_token;
 | |
|     DeclaratorAST *declarator;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual NestedDeclaratorAST *asNestedDeclarator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NestedDeclaratorAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT FunctionDeclaratorAST: public PostfixDeclaratorAST
 | |
| {
 | |
| public:
 | |
|     unsigned lparen_token;
 | |
|     ParameterDeclarationClauseAST *parameters;
 | |
|     unsigned rparen_token;
 | |
|     SpecifierAST *cv_qualifier_seq;
 | |
|     ExceptionSpecificationAST *exception_specification;
 | |
|     ExpressionAST *as_cpp_initializer;
 | |
| 
 | |
| public: // annotations
 | |
|     Function *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual FunctionDeclaratorAST *asFunctionDeclarator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual FunctionDeclaratorAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ArrayDeclaratorAST: public PostfixDeclaratorAST
 | |
| {
 | |
| public:
 | |
|     unsigned lbracket_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rbracket_token;
 | |
| 
 | |
| public:
 | |
|     virtual ArrayDeclaratorAST *asArrayDeclarator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ArrayDeclaratorAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT DeclaratorListAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned comma_token;
 | |
|     DeclaratorAST *declarator;
 | |
|     DeclaratorListAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual DeclaratorListAST *asDeclaratorList()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual DeclaratorListAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT DeleteExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned scope_token;
 | |
|     unsigned delete_token;
 | |
|     unsigned lbracket_token;
 | |
|     unsigned rbracket_token;
 | |
|     ExpressionAST *expression;
 | |
| 
 | |
| public:
 | |
|     virtual DeleteExpressionAST *asDeleteExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual DeleteExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT DoStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned do_token;
 | |
|     StatementAST *statement;
 | |
|     unsigned while_token;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rparen_token;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual DoStatementAST *asDoStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual DoStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NamedTypeSpecifierAST: public SpecifierAST
 | |
| {
 | |
| public:
 | |
|     NameAST *name;
 | |
| 
 | |
| public:
 | |
|     virtual NamedTypeSpecifierAST *asNamedTypeSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NamedTypeSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ElaboratedTypeSpecifierAST: public SpecifierAST
 | |
| {
 | |
| public:
 | |
|     unsigned classkey_token;
 | |
|     NameAST *name;
 | |
| 
 | |
| public:
 | |
|     virtual ElaboratedTypeSpecifierAST *asElaboratedTypeSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ElaboratedTypeSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT EnumSpecifierAST: public SpecifierAST
 | |
| {
 | |
| public:
 | |
|     unsigned enum_token;
 | |
|     NameAST *name;
 | |
|     unsigned lbrace_token;
 | |
|     EnumeratorAST *enumerators;
 | |
|     unsigned rbrace_token;
 | |
| 
 | |
| public:
 | |
|     virtual EnumSpecifierAST *asEnumSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual EnumSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT EnumeratorAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned comma_token;
 | |
|     unsigned identifier_token;
 | |
|     unsigned equal_token;
 | |
|     ExpressionAST *expression;
 | |
|     EnumeratorAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual EnumeratorAST *asEnumerator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual EnumeratorAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ExceptionDeclarationAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     SpecifierAST *type_specifier;
 | |
|     DeclaratorAST *declarator;
 | |
|     unsigned dot_dot_dot_token;
 | |
| 
 | |
| public:
 | |
|     virtual ExceptionDeclarationAST *asExceptionDeclaration()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ExceptionDeclarationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ExceptionSpecificationAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned throw_token;
 | |
|     unsigned lparen_token;
 | |
|     unsigned dot_dot_dot_token;
 | |
|     ExpressionListAST *type_ids;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual ExceptionSpecificationAST *asExceptionSpecification()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ExceptionSpecificationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ExpressionOrDeclarationStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     StatementAST *expression;
 | |
|     StatementAST *declaration;
 | |
| 
 | |
| public:
 | |
|     virtual ExpressionOrDeclarationStatementAST *asExpressionOrDeclarationStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ExpressionOrDeclarationStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ExpressionStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     ExpressionAST *expression;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual ExpressionStatementAST *asExpressionStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ExpressionStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT FunctionDefinitionAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned qt_invokable_token;
 | |
|     SpecifierAST *decl_specifier_seq;
 | |
|     DeclaratorAST *declarator;
 | |
|     CtorInitializerAST *ctor_initializer;
 | |
|     StatementAST *function_body;
 | |
| 
 | |
| public: // annotations
 | |
|     Function *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual FunctionDefinitionAST *asFunctionDefinition()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual FunctionDefinitionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ForStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned for_token;
 | |
|     unsigned lparen_token;
 | |
|     StatementAST *initializer;
 | |
|     ExpressionAST *condition;
 | |
|     unsigned semicolon_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rparen_token;
 | |
|     StatementAST *statement;
 | |
| 
 | |
| public: // annotations
 | |
|     Block *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual ForStatementAST *asForStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ForStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT IfStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned if_token;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *condition;
 | |
|     unsigned rparen_token;
 | |
|     StatementAST *statement;
 | |
|     unsigned else_token;
 | |
|     StatementAST *else_statement;
 | |
| 
 | |
| public: // annotations
 | |
|     Block *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual IfStatementAST *asIfStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual IfStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ArrayInitializerAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned lbrace_token;
 | |
|     ExpressionListAST *expression_list;
 | |
|     unsigned rbrace_token;
 | |
| 
 | |
| public:
 | |
|     virtual ArrayInitializerAST *asArrayInitializer()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ArrayInitializerAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT LabeledStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned label_token;
 | |
|     unsigned colon_token;
 | |
|     StatementAST *statement;
 | |
| 
 | |
| public:
 | |
|     virtual LabeledStatementAST *asLabeledStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual LabeledStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT LinkageBodyAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned lbrace_token;
 | |
|     DeclarationAST *declarations;
 | |
|     unsigned rbrace_token;
 | |
| 
 | |
| public:
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual LinkageBodyAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT LinkageSpecificationAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned extern_token;
 | |
|     unsigned extern_type;
 | |
|     DeclarationAST *declaration;
 | |
| 
 | |
| public:
 | |
|     virtual LinkageSpecificationAST *asLinkageSpecification()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual LinkageSpecificationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT MemInitializerAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned comma_token;
 | |
|     NameAST *name;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rparen_token;
 | |
|     MemInitializerAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual MemInitializerAST *asMemInitializer()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual MemInitializerAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NameAST: public ExpressionAST
 | |
| {
 | |
| public: // annotations
 | |
|     Name *name;
 | |
| 
 | |
| public:
 | |
|     virtual NameAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NestedNameSpecifierAST: public AST
 | |
| {
 | |
| public:
 | |
|     NameAST *class_or_namespace_name;
 | |
|     unsigned scope_token;
 | |
|     NestedNameSpecifierAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual NestedNameSpecifierAST *asNestedNameSpecifier()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NestedNameSpecifierAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT QualifiedNameAST: public NameAST
 | |
| {
 | |
| public:
 | |
|     unsigned global_scope_token;
 | |
|     NestedNameSpecifierAST *nested_name_specifier;
 | |
|     NameAST *unqualified_name;
 | |
| 
 | |
| public:
 | |
|     virtual QualifiedNameAST *asQualifiedName()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual QualifiedNameAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT OperatorFunctionIdAST: public NameAST
 | |
| {
 | |
| public:
 | |
|     unsigned operator_token;
 | |
|     OperatorAST *op;
 | |
| 
 | |
| public:
 | |
|     virtual OperatorFunctionIdAST *asOperatorFunctionId()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual OperatorFunctionIdAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ConversionFunctionIdAST: public NameAST
 | |
| {
 | |
| public:
 | |
|     unsigned operator_token;
 | |
|     SpecifierAST *type_specifier;
 | |
|     PtrOperatorAST *ptr_operators;
 | |
| 
 | |
| public:
 | |
|     virtual ConversionFunctionIdAST *asConversionFunctionId()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ConversionFunctionIdAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT SimpleNameAST: public NameAST
 | |
| {
 | |
| public:
 | |
|     unsigned identifier_token;
 | |
| 
 | |
| public:
 | |
|     virtual SimpleNameAST *asSimpleName()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual SimpleNameAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT DestructorNameAST: public NameAST
 | |
| {
 | |
| public:
 | |
|     unsigned tilde_token;
 | |
|     unsigned identifier_token;
 | |
| 
 | |
| public:
 | |
|     virtual DestructorNameAST *asDestructorName()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual DestructorNameAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TemplateIdAST: public NameAST
 | |
| {
 | |
| public:
 | |
|     unsigned identifier_token;
 | |
|     unsigned less_token;
 | |
|     TemplateArgumentListAST *template_arguments;
 | |
|     unsigned greater_token;
 | |
| 
 | |
| public:
 | |
|     virtual TemplateIdAST *asTemplateId()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TemplateIdAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NamespaceAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned namespace_token;
 | |
|     unsigned identifier_token;
 | |
|     SpecifierAST *attributes;
 | |
|     DeclarationAST *linkage_body;
 | |
| 
 | |
| public: // annotations
 | |
|     Namespace *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual NamespaceAST *asNamespace()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NamespaceAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NamespaceAliasDefinitionAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned namespace_token;
 | |
|     unsigned namespace_name;
 | |
|     unsigned equal_token;
 | |
|     NameAST *name;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual NamespaceAliasDefinitionAST *asNamespaceAliasDefinition()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NamespaceAliasDefinitionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NewPlacementAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned lparen_token;
 | |
|     ExpressionListAST *expression_list;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual NewPlacementAST *asNewPlacement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NewPlacementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NewArrayDeclaratorAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned lbracket_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rbracket_token;
 | |
|     NewArrayDeclaratorAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual NewArrayDeclaratorAST *asNewArrayDeclarator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NewArrayDeclaratorAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NewExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned scope_token;
 | |
|     unsigned new_token;
 | |
|     NewPlacementAST *new_placement;
 | |
| 
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *type_id;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
|     NewTypeIdAST *new_type_id;
 | |
| 
 | |
|     NewInitializerAST *new_initializer;
 | |
| 
 | |
| public:
 | |
|     virtual NewExpressionAST *asNewExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NewExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NewInitializerAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual NewInitializerAST *asNewInitializer()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NewInitializerAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NewTypeIdAST: public AST
 | |
| {
 | |
| public:
 | |
|     SpecifierAST *type_specifier;
 | |
|     PtrOperatorAST *ptr_operators;
 | |
|     NewArrayDeclaratorAST *new_array_declarators;
 | |
| 
 | |
| public:
 | |
|     virtual NewTypeIdAST *asNewTypeId()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NewTypeIdAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT OperatorAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned op_token;
 | |
|     unsigned open_token;
 | |
|     unsigned close_token;
 | |
| 
 | |
| public:
 | |
|     virtual OperatorAST *asOperator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual OperatorAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ParameterDeclarationAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     SpecifierAST *type_specifier;
 | |
|     DeclaratorAST *declarator;
 | |
|     unsigned equal_token;
 | |
|     ExpressionAST *expression;
 | |
| 
 | |
| public: // annotations
 | |
|     Argument *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual ParameterDeclarationAST *asParameterDeclaration()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ParameterDeclarationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ParameterDeclarationClauseAST: public AST
 | |
| {
 | |
| public:
 | |
|     DeclarationAST *parameter_declarations;
 | |
|     unsigned dot_dot_dot_token;
 | |
| 
 | |
| public:
 | |
|     virtual ParameterDeclarationClauseAST *asParameterDeclarationClause()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ParameterDeclarationClauseAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT PostfixAST: public AST
 | |
| {
 | |
| public:
 | |
|     PostfixAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual PostfixAST *asPostfix()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual PostfixAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CallAST: public PostfixAST
 | |
| {
 | |
| public:
 | |
|     unsigned lparen_token;
 | |
|     ExpressionListAST *expression_list;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual CallAST *asCall()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual CallAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ArrayAccessAST: public PostfixAST
 | |
| {
 | |
| public:
 | |
|     unsigned lbracket_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rbracket_token;
 | |
| 
 | |
| public:
 | |
|     virtual ArrayAccessAST *asArrayAccess()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ArrayAccessAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT PostIncrDecrAST: public PostfixAST
 | |
| {
 | |
| public:
 | |
|     unsigned incr_decr_token;
 | |
| 
 | |
| public:
 | |
|     virtual PostIncrDecrAST *asPostIncrDecr()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual PostIncrDecrAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT MemberAccessAST: public PostfixAST
 | |
| {
 | |
| public:
 | |
|     unsigned access_token;
 | |
|     unsigned template_token;
 | |
|     NameAST *member_name;
 | |
| 
 | |
| public:
 | |
|     virtual MemberAccessAST *asMemberAccess()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual MemberAccessAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TypeidExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned typeid_token;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual TypeidExpressionAST *asTypeidExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TypeidExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TypenameCallExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned typename_token;
 | |
|     NameAST *name;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionListAST *expression_list;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual TypenameCallExpressionAST *asTypenameCallExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TypenameCallExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TypeConstructorCallAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     SpecifierAST *type_specifier;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionListAST *expression_list;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual TypeConstructorCallAST *asTypeConstructorCall()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TypeConstructorCallAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT PostfixExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     ExpressionAST *base_expression;
 | |
|     PostfixAST *postfix_expressions;
 | |
| 
 | |
| public:
 | |
|     virtual PostfixExpressionAST *asPostfixExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual PostfixExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT PtrOperatorAST: public AST
 | |
| {
 | |
| public:
 | |
|     PtrOperatorAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual PtrOperatorAST *asPtrOperator()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual PtrOperatorAST *clone(MemoryPool *pool) const = 0;
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT PointerToMemberAST: public PtrOperatorAST
 | |
| {
 | |
| public:
 | |
|     unsigned global_scope_token;
 | |
|     NestedNameSpecifierAST *nested_name_specifier;
 | |
|     unsigned star_token;
 | |
|     SpecifierAST *cv_qualifier_seq;
 | |
| 
 | |
| public:
 | |
|     virtual PointerToMemberAST *asPointerToMember()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual PointerToMemberAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT PointerAST: public PtrOperatorAST
 | |
| {
 | |
| public:
 | |
|     unsigned star_token;
 | |
|     SpecifierAST *cv_qualifier_seq;
 | |
| 
 | |
| public:
 | |
|     virtual PointerAST *asPointer()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual PointerAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ReferenceAST: public PtrOperatorAST
 | |
| {
 | |
| public:
 | |
|     unsigned amp_token;
 | |
| 
 | |
| public:
 | |
|     virtual ReferenceAST *asReference()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ReferenceAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT BreakStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned break_token;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual BreakStatementAST *asBreakStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual BreakStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ContinueStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned continue_token;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual ContinueStatementAST *asContinueStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ContinueStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT GotoStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned goto_token;
 | |
|     unsigned identifier_token;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual GotoStatementAST *asGotoStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual GotoStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ReturnStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned return_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual ReturnStatementAST *asReturnStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ReturnStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT SizeofExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned sizeof_token;
 | |
|     ExpressionAST *expression;
 | |
| 
 | |
| public:
 | |
|     virtual SizeofExpressionAST *asSizeofExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual SizeofExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NumericLiteralAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned token;
 | |
| 
 | |
| public:
 | |
|     virtual NumericLiteralAST *asNumericLiteral()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NumericLiteralAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT BoolLiteralAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned token;
 | |
| 
 | |
| public:
 | |
|     virtual BoolLiteralAST *asBoolLiteral()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual BoolLiteralAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ThisExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned this_token;
 | |
| 
 | |
| public:
 | |
|     virtual ThisExpressionAST *asThisExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ThisExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT NestedExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *expression;
 | |
|     unsigned rparen_token;
 | |
| 
 | |
| public:
 | |
|     virtual NestedExpressionAST *asNestedExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual NestedExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT StringLiteralAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned token;
 | |
|     StringLiteralAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual StringLiteralAST *asStringLiteral()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual StringLiteralAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT SwitchStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned switch_token;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *condition;
 | |
|     unsigned rparen_token;
 | |
|     StatementAST *statement;
 | |
| 
 | |
| public: // annotations
 | |
|     Block *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual SwitchStatementAST *asSwitchStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual SwitchStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TemplateArgumentListAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned comma_token;
 | |
|     ExpressionAST *template_argument;
 | |
|     TemplateArgumentListAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual TemplateArgumentListAST *asTemplateArgumentList()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TemplateArgumentListAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TemplateDeclarationAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned export_token;
 | |
|     unsigned template_token;
 | |
|     unsigned less_token;
 | |
|     DeclarationAST *template_parameters;
 | |
|     unsigned greater_token;
 | |
|     DeclarationAST *declaration;
 | |
| 
 | |
| public:
 | |
|     virtual TemplateDeclarationAST *asTemplateDeclaration()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TemplateDeclarationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ThrowExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned throw_token;
 | |
|     ExpressionAST *expression;
 | |
| 
 | |
| public:
 | |
|     virtual ThrowExpressionAST *asThrowExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ThrowExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TranslationUnitAST: public AST
 | |
| {
 | |
| public:
 | |
|     DeclarationAST *declarations;
 | |
| 
 | |
| public:
 | |
|     virtual TranslationUnitAST *asTranslationUnit()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TranslationUnitAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TryBlockStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned try_token;
 | |
|     StatementAST *statement;
 | |
|     CatchClauseAST *catch_clause_seq;
 | |
| 
 | |
| public:
 | |
|     virtual TryBlockStatementAST *asTryBlockStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TryBlockStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT CatchClauseAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned catch_token;
 | |
|     unsigned lparen_token;
 | |
|     ExceptionDeclarationAST *exception_declaration;
 | |
|     unsigned rparen_token;
 | |
|     StatementAST *statement;
 | |
|     CatchClauseAST *next;
 | |
| 
 | |
| public: // annotations
 | |
|     Block *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual CatchClauseAST *asCatchClause()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual CatchClauseAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TypeIdAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     SpecifierAST *type_specifier;
 | |
|     DeclaratorAST *declarator;
 | |
| 
 | |
| public:
 | |
|     virtual TypeIdAST *asTypeId()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TypeIdAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TypenameTypeParameterAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned classkey_token;
 | |
|     NameAST *name;
 | |
|     unsigned equal_token;
 | |
|     ExpressionAST *type_id;
 | |
| 
 | |
| public: // annotations
 | |
|     Argument *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual TypenameTypeParameterAST *asTypenameTypeParameter()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TypenameTypeParameterAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT TemplateTypeParameterAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned template_token;
 | |
|     unsigned less_token;
 | |
|     DeclarationAST *template_parameters;
 | |
|     unsigned greater_token;
 | |
|     unsigned class_token;
 | |
|     NameAST *name;
 | |
|     unsigned equal_token;
 | |
|     ExpressionAST *type_id;
 | |
| 
 | |
| public:
 | |
|     Argument *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual TemplateTypeParameterAST *asTemplateTypeParameter()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual TemplateTypeParameterAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT UnaryExpressionAST: public ExpressionAST
 | |
| {
 | |
| public:
 | |
|     unsigned unary_op_token;
 | |
|     ExpressionAST *expression;
 | |
| 
 | |
| public:
 | |
|     virtual UnaryExpressionAST *asUnaryExpression()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual UnaryExpressionAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT UsingAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned using_token;
 | |
|     unsigned typename_token;
 | |
|     NameAST *name;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public: // annotations
 | |
|     UsingDeclaration *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual UsingAST *asUsing()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual UsingAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT UsingDirectiveAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     unsigned using_token;
 | |
|     unsigned namespace_token;
 | |
|     NameAST *name;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     UsingNamespaceDirective *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual UsingDirectiveAST *asUsingDirective()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual UsingDirectiveAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT WhileStatementAST: public StatementAST
 | |
| {
 | |
| public:
 | |
|     unsigned while_token;
 | |
|     unsigned lparen_token;
 | |
|     ExpressionAST *condition;
 | |
|     unsigned rparen_token;
 | |
|     StatementAST *statement;
 | |
| 
 | |
| public: // annotations
 | |
|     Block *symbol;
 | |
| 
 | |
| public:
 | |
|     virtual WhileStatementAST *asWhileStatement()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual WhileStatementAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| 
 | |
| // ObjC++
 | |
| class CPLUSPLUS_EXPORT IdentifierListAST: public AST
 | |
| {
 | |
| public:
 | |
|     unsigned identifier_token;
 | |
|     IdentifierListAST *next;
 | |
| 
 | |
| public:
 | |
|     virtual IdentifierListAST *asIdentifierList()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual IdentifierListAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| class CPLUSPLUS_EXPORT ObjCClassDeclarationAST: public DeclarationAST
 | |
| {
 | |
| public:
 | |
|     SpecifierAST *attributes;
 | |
|     unsigned class_token;
 | |
|     IdentifierListAST *identifier_list;
 | |
|     unsigned semicolon_token;
 | |
| 
 | |
| public:
 | |
|     virtual ObjCClassDeclarationAST *asObjCClassDeclaration()
 | |
|     { return this; }
 | |
| 
 | |
|     virtual unsigned firstToken() const;
 | |
|     virtual unsigned lastToken() const;
 | |
| 
 | |
|     virtual ObjCClassDeclarationAST *clone(MemoryPool *pool) const;
 | |
| 
 | |
| protected:
 | |
|     virtual void accept0(ASTVisitor *visitor);
 | |
| };
 | |
| 
 | |
| CPLUSPLUS_END_NAMESPACE
 | |
| CPLUSPLUS_END_HEADER
 | |
| 
 | |
| #endif // CPLUSPLUS_AST_H
 |