// Copyright (c) 2008 Roberto Raggi // // 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. #pragma once #include "CPlusPlusForwardDeclarations.h" #include "ASTfwd.h" #include "MemoryPool.h" namespace CPlusPlus { template class CPLUSPLUS_EXPORT List: public Managed { List(const List &other); void operator =(const List &other); public: List() : value(Tptr()), next(0) { } List(const Tptr &value) : value(value), next(0) { } unsigned firstToken() const { if (value) return value->firstToken(); // ### CPP_CHECK(0); return 0; } unsigned lastToken() const { Tptr lv = lastValue(); if (lv) return lv->lastToken(); // ### CPP_CHECK(0); return 0; } Tptr lastValue() const { Tptr lastValue = 0; for (const List *it = this; it; it = it->next) { if (it->value) lastValue = it->value; } return lastValue; } Tptr 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); } template static void accept(List *it, ASTVisitor *visitor) { for (; it; it = it->next) accept(it->value, visitor); } static bool match(AST *ast, AST *pattern, ASTMatcher *matcher); bool match(AST *pattern, ASTMatcher *matcher); template static bool match(List *it, List *patternIt, ASTMatcher *matcher) { while (it && patternIt) { if (! match(it->value, patternIt->value, matcher)) return false; it = it->next; patternIt = patternIt->next; } if (! it && ! patternIt) return true; return false; } virtual unsigned firstToken() const = 0; virtual unsigned lastToken() const = 0; virtual AST *clone(MemoryPool *pool) const = 0; virtual AccessDeclarationAST *asAccessDeclaration() { return 0; } virtual AliasDeclarationAST *asAliasDeclaration() { return 0; } virtual AlignmentSpecifierAST *asAlignmentSpecifier() { return 0; } virtual AlignofExpressionAST *asAlignofExpression() { return 0; } virtual AnonymousNameAST *asAnonymousName() { return 0; } virtual ArrayAccessAST *asArrayAccess() { return 0; } virtual ArrayDeclaratorAST *asArrayDeclarator() { return 0; } virtual ArrayInitializerAST *asArrayInitializer() { return 0; } virtual AsmDefinitionAST *asAsmDefinition() { return 0; } virtual AttributeSpecifierAST *asAttributeSpecifier() { return 0; } virtual BaseSpecifierAST *asBaseSpecifier() { return 0; } virtual BinaryExpressionAST *asBinaryExpression() { return 0; } virtual BoolLiteralAST *asBoolLiteral() { return 0; } virtual BracedInitializerAST *asBracedInitializer() { return 0; } virtual BracketDesignatorAST *asBracketDesignator() { return 0; } virtual BreakStatementAST *asBreakStatement() { return 0; } virtual CallAST *asCall() { return 0; } virtual CaptureAST *asCapture() { return 0; } virtual CaseStatementAST *asCaseStatement() { return 0; } virtual CastExpressionAST *asCastExpression() { return 0; } virtual CatchClauseAST *asCatchClause() { return 0; } virtual ClassSpecifierAST *asClassSpecifier() { return 0; } virtual CompoundExpressionAST *asCompoundExpression() { 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 DecltypeSpecifierAST *asDecltypeSpecifier() { return 0; } virtual DeleteExpressionAST *asDeleteExpression() { return 0; } virtual DesignatedInitializerAST *asDesignatedInitializer() { return 0; } virtual DesignatorAST *asDesignator() { return 0; } virtual DestructorNameAST *asDestructorName() { return 0; } virtual DoStatementAST *asDoStatement() { return 0; } virtual DotDesignatorAST *asDotDesignator() { return 0; } virtual DynamicExceptionSpecificationAST *asDynamicExceptionSpecification() { 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 ExpressionListParenAST *asExpressionListParen() { return 0; } virtual ExpressionOrDeclarationStatementAST *asExpressionOrDeclarationStatement() { return 0; } virtual ExpressionStatementAST *asExpressionStatement() { return 0; } virtual ForStatementAST *asForStatement() { return 0; } virtual ForeachStatementAST *asForeachStatement() { return 0; } virtual FunctionDeclaratorAST *asFunctionDeclarator() { return 0; } virtual FunctionDefinitionAST *asFunctionDefinition() { return 0; } virtual GnuAttributeAST *asGnuAttribute() { return 0; } virtual GnuAttributeSpecifierAST *asGnuAttributeSpecifier() { return 0; } virtual GotoStatementAST *asGotoStatement() { return 0; } virtual IdExpressionAST *asIdExpression() { return 0; } virtual IfStatementAST *asIfStatement() { return 0; } virtual LabeledStatementAST *asLabeledStatement() { return 0; } virtual LambdaCaptureAST *asLambdaCapture() { return 0; } virtual LambdaDeclaratorAST *asLambdaDeclarator() { return 0; } virtual LambdaExpressionAST *asLambdaExpression() { return 0; } virtual LambdaIntroducerAST *asLambdaIntroducer() { 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 NewArrayDeclaratorAST *asNewArrayDeclarator() { return 0; } virtual NewExpressionAST *asNewExpression() { return 0; } virtual NewTypeIdAST *asNewTypeId() { return 0; } virtual NoExceptOperatorExpressionAST *asNoExceptOperatorExpression() { return 0; } virtual NoExceptSpecificationAST *asNoExceptSpecification() { return 0; } virtual NumericLiteralAST *asNumericLiteral() { return 0; } virtual ObjCClassDeclarationAST *asObjCClassDeclaration() { return 0; } virtual ObjCClassForwardDeclarationAST *asObjCClassForwardDeclaration() { return 0; } virtual ObjCDynamicPropertiesDeclarationAST *asObjCDynamicPropertiesDeclaration() { return 0; } virtual ObjCEncodeExpressionAST *asObjCEncodeExpression() { return 0; } virtual ObjCFastEnumerationAST *asObjCFastEnumeration() { return 0; } virtual ObjCInstanceVariablesDeclarationAST *asObjCInstanceVariablesDeclaration() { return 0; } virtual ObjCMessageArgumentAST *asObjCMessageArgument() { return 0; } virtual ObjCMessageArgumentDeclarationAST *asObjCMessageArgumentDeclaration() { return 0; } virtual ObjCMessageExpressionAST *asObjCMessageExpression() { return 0; } virtual ObjCMethodDeclarationAST *asObjCMethodDeclaration() { return 0; } virtual ObjCMethodPrototypeAST *asObjCMethodPrototype() { return 0; } virtual ObjCPropertyAttributeAST *asObjCPropertyAttribute() { return 0; } virtual ObjCPropertyDeclarationAST *asObjCPropertyDeclaration() { return 0; } virtual ObjCProtocolDeclarationAST *asObjCProtocolDeclaration() { return 0; } virtual ObjCProtocolExpressionAST *asObjCProtocolExpression() { return 0; } virtual ObjCProtocolForwardDeclarationAST *asObjCProtocolForwardDeclaration() { return 0; } virtual ObjCProtocolRefsAST *asObjCProtocolRefs() { return 0; } virtual ObjCSelectorAST *asObjCSelector() { return 0; } virtual ObjCSelectorArgumentAST *asObjCSelectorArgument() { return 0; } virtual ObjCSelectorExpressionAST *asObjCSelectorExpression() { return 0; } virtual ObjCSynchronizedStatementAST *asObjCSynchronizedStatement() { return 0; } virtual ObjCSynthesizedPropertiesDeclarationAST *asObjCSynthesizedPropertiesDeclaration() { return 0; } virtual ObjCSynthesizedPropertyAST *asObjCSynthesizedProperty() { return 0; } virtual ObjCTypeNameAST *asObjCTypeName() { return 0; } virtual ObjCVisibilityDeclarationAST *asObjCVisibilityDeclaration() { 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 PointerLiteralAST *asPointerLiteral() { return 0; } virtual PointerToMemberAST *asPointerToMember() { return 0; } virtual PostIncrDecrAST *asPostIncrDecr() { return 0; } virtual PostfixAST *asPostfix() { return 0; } virtual PostfixDeclaratorAST *asPostfixDeclarator() { return 0; } virtual PtrOperatorAST *asPtrOperator() { return 0; } virtual QtEnumDeclarationAST *asQtEnumDeclaration() { return 0; } virtual QtFlagsDeclarationAST *asQtFlagsDeclaration() { return 0; } virtual QtInterfaceNameAST *asQtInterfaceName() { return 0; } virtual QtInterfacesDeclarationAST *asQtInterfacesDeclaration() { return 0; } virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return 0; } virtual QtMethodAST *asQtMethod() { return 0; } virtual QtObjectTagAST *asQtObjectTag() { return 0; } virtual QtPrivateSlotAST *asQtPrivateSlot() { return 0; } virtual QtPropertyDeclarationAST *asQtPropertyDeclaration() { return 0; } virtual QtPropertyDeclarationItemAST *asQtPropertyDeclarationItem() { return 0; } virtual QualifiedNameAST *asQualifiedName() { return 0; } virtual RangeBasedForStatementAST *asRangeBasedForStatement() { 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 StaticAssertDeclarationAST *asStaticAssertDeclaration() { return 0; } virtual StringLiteralAST *asStringLiteral() { return 0; } virtual SwitchStatementAST *asSwitchStatement() { 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 TrailingReturnTypeAST *asTrailingReturnType() { 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; } protected: virtual void accept0(ASTVisitor *visitor) = 0; virtual bool match0(AST *, ASTMatcher *) = 0; }; class CPLUSPLUS_EXPORT StatementAST: public AST { public: StatementAST() {} virtual StatementAST *asStatement() { return this; } virtual StatementAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT ExpressionAST: public AST { public: ExpressionAST() {} virtual ExpressionAST *asExpression() { return this; } virtual ExpressionAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT DeclarationAST: public AST { public: DeclarationAST() {} virtual DeclarationAST *asDeclaration() { return this; } virtual DeclarationAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT NameAST: public AST { public: // annotations const Name *name; public: NameAST() : name(0) {} virtual NameAST *asName() { return this; } virtual NameAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT SpecifierAST: public AST { public: SpecifierAST() {} virtual SpecifierAST *asSpecifier() { return this; } virtual SpecifierAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT PtrOperatorAST: public AST { public: PtrOperatorAST() {} virtual PtrOperatorAST *asPtrOperator() { return this; } virtual PtrOperatorAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT PostfixAST: public ExpressionAST { public: PostfixAST() {} virtual PostfixAST *asPostfix() { return this; } virtual PostfixAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT CoreDeclaratorAST: public AST { public: CoreDeclaratorAST() {} virtual CoreDeclaratorAST *asCoreDeclarator() { return this; } virtual CoreDeclaratorAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT PostfixDeclaratorAST: public AST { public: PostfixDeclaratorAST() {} virtual PostfixDeclaratorAST *asPostfixDeclarator() { return this; } virtual PostfixDeclaratorAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT ObjCSelectorArgumentAST: public AST { public: unsigned name_token; unsigned colon_token; public: ObjCSelectorArgumentAST() : name_token(0) , colon_token(0) {} virtual ObjCSelectorArgumentAST *asObjCSelectorArgument() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCSelectorArgumentAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCSelectorAST: public NameAST { public: ObjCSelectorArgumentListAST *selector_argument_list; public: ObjCSelectorAST() : selector_argument_list(0) {} virtual ObjCSelectorAST *asObjCSelector() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCSelectorAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT SimpleSpecifierAST: public SpecifierAST { public: unsigned specifier_token; public: SimpleSpecifierAST() : specifier_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT AttributeSpecifierAST: public SpecifierAST { public: AttributeSpecifierAST() {} virtual AttributeSpecifierAST *asAttributeSpecifier() { return this; } virtual AttributeSpecifierAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT AlignmentSpecifierAST: public AttributeSpecifierAST { public: unsigned align_token; unsigned lparen_token; ExpressionAST *typeIdExprOrAlignmentExpr; unsigned ellipses_token; unsigned rparen_token; public: AlignmentSpecifierAST() : align_token(0) , lparen_token(0) , typeIdExprOrAlignmentExpr(0) , ellipses_token(0) , rparen_token(0) {} virtual AlignmentSpecifierAST *asAlignmentSpecifier() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual AlignmentSpecifierAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT GnuAttributeSpecifierAST: public AttributeSpecifierAST { public: unsigned attribute_token; unsigned first_lparen_token; unsigned second_lparen_token; GnuAttributeListAST *attribute_list; unsigned first_rparen_token; unsigned second_rparen_token; public: GnuAttributeSpecifierAST() : attribute_token(0) , first_lparen_token(0) , second_lparen_token(0) , attribute_list(0) , first_rparen_token(0) , second_rparen_token(0) {} virtual GnuAttributeSpecifierAST *asGnuAttributeSpecifier() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual GnuAttributeSpecifierAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT GnuAttributeAST: public AST { public: unsigned identifier_token; unsigned lparen_token; unsigned tag_token; ExpressionListAST *expression_list; unsigned rparen_token; public: GnuAttributeAST() : identifier_token(0) , lparen_token(0) , tag_token(0) , expression_list(0) , rparen_token(0) {} virtual GnuAttributeAST *asGnuAttribute() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual GnuAttributeAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TypeofSpecifierAST: public SpecifierAST { public: unsigned typeof_token; unsigned lparen_token; ExpressionAST *expression; unsigned rparen_token; public: TypeofSpecifierAST() : typeof_token(0) , lparen_token(0) , expression(0) , rparen_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT DecltypeSpecifierAST: public SpecifierAST { public: unsigned decltype_token; unsigned lparen_token; ExpressionAST *expression; unsigned rparen_token; public: DecltypeSpecifierAST() : decltype_token(0) , lparen_token(0) , expression(0) , rparen_token(0) {} virtual DecltypeSpecifierAST *asDecltypeSpecifier() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual DecltypeSpecifierAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT DeclaratorAST: public AST { public: SpecifierListAST *attribute_list; PtrOperatorListAST *ptr_operator_list; CoreDeclaratorAST *core_declarator; PostfixDeclaratorListAST *postfix_declarator_list; SpecifierListAST *post_attribute_list; unsigned equal_token; ExpressionAST *initializer; public: DeclaratorAST() : attribute_list(0) , ptr_operator_list(0) , core_declarator(0) , postfix_declarator_list(0) , post_attribute_list(0) , equal_token(0) , initializer(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT SimpleDeclarationAST: public DeclarationAST { public: unsigned qt_invokable_token; SpecifierListAST *decl_specifier_list; DeclaratorListAST *declarator_list; unsigned semicolon_token; public: List *symbols; public: SimpleDeclarationAST() : qt_invokable_token(0) , decl_specifier_list(0) , declarator_list(0) , semicolon_token(0) , symbols(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT EmptyDeclarationAST: public DeclarationAST { public: unsigned semicolon_token; public: EmptyDeclarationAST() : semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT AccessDeclarationAST: public DeclarationAST { public: unsigned access_specifier_token; unsigned slots_token; unsigned colon_token; public: AccessDeclarationAST() : access_specifier_token(0) , slots_token(0) , colon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtObjectTagAST: public DeclarationAST { public: unsigned q_object_token; public: QtObjectTagAST() : q_object_token(0) {} virtual QtObjectTagAST *asQtObjectTag() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtObjectTagAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtPrivateSlotAST: public DeclarationAST { public: unsigned q_private_slot_token; unsigned lparen_token; unsigned dptr_token; unsigned dptr_lparen_token; unsigned dptr_rparen_token; unsigned comma_token; SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; unsigned rparen_token; public: QtPrivateSlotAST() : q_private_slot_token(0) , lparen_token(0) , dptr_token(0) , dptr_lparen_token(0) , dptr_rparen_token(0) , comma_token(0) , type_specifier_list(0) , declarator(0) , rparen_token(0) {} virtual QtPrivateSlotAST *asQtPrivateSlot() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtPrivateSlotAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class QtPropertyDeclarationItemAST: public AST { public: unsigned item_name_token; ExpressionAST *expression; public: QtPropertyDeclarationItemAST() : item_name_token(0) , expression(0) {} virtual QtPropertyDeclarationItemAST *asQtPropertyDeclarationItem() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtPropertyDeclarationItemAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtPropertyDeclarationAST: public DeclarationAST { public: unsigned property_specifier_token; unsigned lparen_token; ExpressionAST *expression; // for Q_PRIVATE_PROPERTY(expression, ...) unsigned comma_token; ExpressionAST *type_id; NameAST *property_name; QtPropertyDeclarationItemListAST *property_declaration_item_list; unsigned rparen_token; public: QtPropertyDeclarationAST() : property_specifier_token(0) , lparen_token(0) , expression(0) , comma_token(0) , type_id(0) , property_name(0) , property_declaration_item_list(0) , rparen_token(0) {} virtual QtPropertyDeclarationAST *asQtPropertyDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtPropertyDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtEnumDeclarationAST: public DeclarationAST { public: unsigned enum_specifier_token; unsigned lparen_token; NameListAST *enumerator_list; unsigned rparen_token; public: QtEnumDeclarationAST() : enum_specifier_token(0) , lparen_token(0) , enumerator_list(0) , rparen_token(0) {} virtual QtEnumDeclarationAST *asQtEnumDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtEnumDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtFlagsDeclarationAST: public DeclarationAST { public: unsigned flags_specifier_token; unsigned lparen_token; NameListAST *flag_enums_list; unsigned rparen_token; public: QtFlagsDeclarationAST() : flags_specifier_token(0) , lparen_token(0) , flag_enums_list(0) , rparen_token(0) {} virtual QtFlagsDeclarationAST *asQtFlagsDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtFlagsDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtInterfaceNameAST: public AST { public: NameAST *interface_name; NameListAST *constraint_list; public: QtInterfaceNameAST() : interface_name(0) , constraint_list(0) {} virtual QtInterfaceNameAST *asQtInterfaceName() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtInterfaceNameAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtInterfacesDeclarationAST: public DeclarationAST { public: unsigned interfaces_token; unsigned lparen_token; QtInterfaceNameListAST *interface_name_list; unsigned rparen_token; public: QtInterfacesDeclarationAST() : interfaces_token(0) , lparen_token(0) , interface_name_list(0) , rparen_token(0) {} virtual QtInterfacesDeclarationAST *asQtInterfacesDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtInterfacesDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; 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: AsmDefinitionAST() : asm_token(0) , volatile_token(0) , lparen_token(0) , rparen_token(0) , semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT BaseSpecifierAST: public AST { public: unsigned virtual_token; unsigned access_specifier_token; NameAST *name; unsigned ellipsis_token; public: // annotations BaseClass *symbol; public: BaseSpecifierAST() : virtual_token(0) , access_specifier_token(0) , name(0) , ellipsis_token(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT IdExpressionAST: public ExpressionAST { public: NameAST *name; public: IdExpressionAST() : name(0) {} virtual IdExpressionAST *asIdExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual IdExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT CompoundExpressionAST: public ExpressionAST { public: unsigned lparen_token; CompoundStatementAST *statement; unsigned rparen_token; public: CompoundExpressionAST() : lparen_token(0) , statement(0) , rparen_token(0) {} virtual CompoundExpressionAST *asCompoundExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual CompoundExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT CompoundLiteralAST: public ExpressionAST { public: unsigned lparen_token; ExpressionAST *type_id; unsigned rparen_token; ExpressionAST *initializer; public: CompoundLiteralAST() : lparen_token(0) , type_id(0) , rparen_token(0) , initializer(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtMethodAST: public ExpressionAST { public: unsigned method_token; unsigned lparen_token; DeclaratorAST *declarator; unsigned rparen_token; public: QtMethodAST() : method_token(0) , lparen_token(0) , declarator(0) , rparen_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QtMemberDeclarationAST: public StatementAST { public: unsigned q_token; unsigned lparen_token; ExpressionAST *type_id; unsigned rparen_token; public: QtMemberDeclarationAST() : q_token(0) , lparen_token(0) , type_id(0) , rparen_token(0) {} virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual QtMemberDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT BinaryExpressionAST: public ExpressionAST { public: ExpressionAST *left_expression; unsigned binary_op_token; ExpressionAST *right_expression; public: BinaryExpressionAST() : left_expression(0) , binary_op_token(0) , right_expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT CastExpressionAST: public ExpressionAST { public: unsigned lparen_token; ExpressionAST *type_id; unsigned rparen_token; ExpressionAST *expression; public: CastExpressionAST() : lparen_token(0) , type_id(0) , rparen_token(0) , expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ClassSpecifierAST: public SpecifierAST { public: unsigned classkey_token; SpecifierListAST *attribute_list; NameAST *name; unsigned final_token; unsigned colon_token; BaseSpecifierListAST *base_clause_list; unsigned dot_dot_dot_token; unsigned lbrace_token; DeclarationListAST *member_specifier_list; unsigned rbrace_token; public: // annotations Class *symbol; public: ClassSpecifierAST() : classkey_token(0) , attribute_list(0) , name(0) , final_token(0) , colon_token(0) , base_clause_list(0) , dot_dot_dot_token(0) , lbrace_token(0) , member_specifier_list(0) , rbrace_token(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT CaseStatementAST: public StatementAST { public: unsigned case_token; ExpressionAST *expression; unsigned colon_token; StatementAST *statement; public: CaseStatementAST() : case_token(0) , expression(0) , colon_token(0) , statement(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT CompoundStatementAST: public StatementAST { public: unsigned lbrace_token; StatementListAST *statement_list; unsigned rbrace_token; public: // annotations Block *symbol; public: CompoundStatementAST() : lbrace_token(0) , statement_list(0) , rbrace_token(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ConditionAST: public ExpressionAST { public: SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; public: ConditionAST() : type_specifier_list(0) , declarator(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ConditionalExpressionAST: public ExpressionAST { public: ExpressionAST *condition; unsigned question_token; ExpressionAST *left_expression; unsigned colon_token; ExpressionAST *right_expression; public: ConditionalExpressionAST() : condition(0) , question_token(0) , left_expression(0) , colon_token(0) , right_expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; 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: CppCastExpressionAST() : cast_token(0) , less_token(0) , type_id(0) , greater_token(0) , lparen_token(0) , expression(0) , rparen_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT CtorInitializerAST: public AST { public: unsigned colon_token; MemInitializerListAST *member_initializer_list; unsigned dot_dot_dot_token; public: CtorInitializerAST() : colon_token(0) , member_initializer_list(0) , dot_dot_dot_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT DeclarationStatementAST: public StatementAST { public: DeclarationAST *declaration; public: DeclarationStatementAST() : declaration(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT DeclaratorIdAST: public CoreDeclaratorAST { public: unsigned dot_dot_dot_token; NameAST *name; public: DeclaratorIdAST() : dot_dot_dot_token(0) , name(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NestedDeclaratorAST: public CoreDeclaratorAST { public: unsigned lparen_token; DeclaratorAST *declarator; unsigned rparen_token; public: NestedDeclaratorAST() : lparen_token(0) , declarator(0) , rparen_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT FunctionDeclaratorAST: public PostfixDeclaratorAST { public: unsigned lparen_token; ParameterDeclarationClauseAST *parameter_declaration_clause; unsigned rparen_token; SpecifierListAST *cv_qualifier_list; unsigned ref_qualifier_token; ExceptionSpecificationAST *exception_specification; TrailingReturnTypeAST *trailing_return_type; // Some FunctionDeclarators can also be interpreted as an initializer, like for 'A b(c);' ExpressionAST *as_cpp_initializer; public: // annotations Function *symbol; public: FunctionDeclaratorAST() : lparen_token(0) , parameter_declaration_clause(0) , rparen_token(0) , cv_qualifier_list(0) , ref_qualifier_token(0) , exception_specification(0) , trailing_return_type(0) , as_cpp_initializer(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ArrayDeclaratorAST: public PostfixDeclaratorAST { public: unsigned lbracket_token; ExpressionAST *expression; unsigned rbracket_token; public: ArrayDeclaratorAST() : lbracket_token(0) , expression(0) , rbracket_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT DeleteExpressionAST: public ExpressionAST { public: unsigned scope_token; unsigned delete_token; unsigned lbracket_token; unsigned rbracket_token; ExpressionAST *expression; public: DeleteExpressionAST() : scope_token(0) , delete_token(0) , lbracket_token(0) , rbracket_token(0) , expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; 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: DoStatementAST() : do_token(0) , statement(0) , while_token(0) , lparen_token(0) , expression(0) , rparen_token(0) , semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NamedTypeSpecifierAST: public SpecifierAST { public: NameAST *name; public: NamedTypeSpecifierAST() : name(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ElaboratedTypeSpecifierAST: public SpecifierAST { public: unsigned classkey_token; SpecifierListAST *attribute_list; NameAST *name; public: ElaboratedTypeSpecifierAST() : classkey_token(0) , attribute_list(0) , name(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT EnumSpecifierAST: public SpecifierAST { public: unsigned enum_token; unsigned key_token; // struct, class or 0 NameAST *name; unsigned colon_token; // can be 0 if there is no enum-base SpecifierListAST *type_specifier_list; // ditto unsigned lbrace_token; EnumeratorListAST *enumerator_list; unsigned stray_comma_token; unsigned rbrace_token; public: // annotations Enum *symbol; public: EnumSpecifierAST() : enum_token(0) , key_token(0) , name(0) , colon_token(0) , type_specifier_list(0) , lbrace_token(0) , enumerator_list(0) , stray_comma_token(0) , rbrace_token(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT EnumeratorAST: public AST { public: unsigned identifier_token; unsigned equal_token; ExpressionAST *expression; public: EnumeratorAST() : identifier_token(0) , equal_token(0) , expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ExceptionDeclarationAST: public DeclarationAST { public: SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; unsigned dot_dot_dot_token; public: ExceptionDeclarationAST() : type_specifier_list(0) , declarator(0) , dot_dot_dot_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ExceptionSpecificationAST: public AST { public: ExceptionSpecificationAST() {} virtual ExceptionSpecificationAST *asExceptionSpecification() { return this; } virtual ExceptionSpecificationAST *clone(MemoryPool *pool) const = 0; }; class CPLUSPLUS_EXPORT DynamicExceptionSpecificationAST: public ExceptionSpecificationAST { public: unsigned throw_token; unsigned lparen_token; unsigned dot_dot_dot_token; ExpressionListAST *type_id_list; unsigned rparen_token; public: DynamicExceptionSpecificationAST() : throw_token(0) , lparen_token(0) , dot_dot_dot_token(0) , type_id_list(0) , rparen_token(0) {} virtual DynamicExceptionSpecificationAST *asDynamicExceptionSpecification() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual DynamicExceptionSpecificationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NoExceptSpecificationAST: public ExceptionSpecificationAST { public: unsigned noexcept_token; unsigned lparen_token; ExpressionAST *expression; unsigned rparen_token; public: NoExceptSpecificationAST() : noexcept_token(0) , lparen_token(0) , expression(0) , rparen_token(0) {} virtual NoExceptSpecificationAST *asNoExceptSpecification() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual NoExceptSpecificationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ExpressionOrDeclarationStatementAST: public StatementAST { public: ExpressionStatementAST *expression; DeclarationStatementAST *declaration; public: ExpressionOrDeclarationStatementAST() : expression(0) , declaration(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ExpressionStatementAST: public StatementAST { public: ExpressionAST *expression; unsigned semicolon_token; public: ExpressionStatementAST() : expression(0) , semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT FunctionDefinitionAST: public DeclarationAST { public: unsigned qt_invokable_token; SpecifierListAST *decl_specifier_list; DeclaratorAST *declarator; CtorInitializerAST *ctor_initializer; StatementAST *function_body; public: // annotations Function *symbol; public: FunctionDefinitionAST() : qt_invokable_token(0) , decl_specifier_list(0) , declarator(0) , ctor_initializer(0) , function_body(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ForeachStatementAST: public StatementAST { public: unsigned foreach_token; unsigned lparen_token; // declaration SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; // or an expression ExpressionAST *initializer; unsigned comma_token; ExpressionAST *expression; unsigned rparen_token; StatementAST *statement; public: // annotations Block *symbol; public: ForeachStatementAST() : foreach_token(0) , lparen_token(0) , type_specifier_list(0) , declarator(0) , initializer(0) , comma_token(0) , expression(0) , rparen_token(0) , statement(0) , symbol(0) {} virtual ForeachStatementAST *asForeachStatement() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ForeachStatementAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT RangeBasedForStatementAST : public StatementAST { public: unsigned for_token; unsigned lparen_token; // declaration SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; // or an expression unsigned colon_token; ExpressionAST *expression; unsigned rparen_token; StatementAST *statement; public: // annotations Block *symbol; public: RangeBasedForStatementAST() : for_token(0) , lparen_token(0) , type_specifier_list(0) , declarator(0) , colon_token(0) , expression(0) , rparen_token(0) , statement(0) , symbol(0) {} virtual RangeBasedForStatementAST *asRangeBasedForStatement() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual RangeBasedForStatementAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; 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: ForStatementAST() : for_token(0) , lparen_token(0) , initializer(0) , condition(0) , semicolon_token(0) , expression(0) , rparen_token(0) , statement(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; 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: IfStatementAST() : if_token(0) , lparen_token(0) , condition(0) , rparen_token(0) , statement(0) , else_token(0) , else_statement(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ArrayInitializerAST: public ExpressionAST { public: unsigned lbrace_token; ExpressionListAST *expression_list; unsigned rbrace_token; public: ArrayInitializerAST() : lbrace_token(0) , expression_list(0) , rbrace_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT LabeledStatementAST: public StatementAST { public: unsigned label_token; unsigned colon_token; StatementAST *statement; public: LabeledStatementAST() : label_token(0) , colon_token(0) , statement(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT LinkageBodyAST: public DeclarationAST { public: unsigned lbrace_token; DeclarationListAST *declaration_list; unsigned rbrace_token; public: LinkageBodyAST() : lbrace_token(0) , declaration_list(0) , rbrace_token(0) {} virtual LinkageBodyAST *asLinkageBody() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual LinkageBodyAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT LinkageSpecificationAST: public DeclarationAST { public: unsigned extern_token; unsigned extern_type_token; DeclarationAST *declaration; public: LinkageSpecificationAST() : extern_token(0) , extern_type_token(0) , declaration(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT MemInitializerAST: public AST { public: NameAST *name; // either a BracedInitializerAST or a ExpressionListParenAST ExpressionAST *expression; public: MemInitializerAST() : name(0) , expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NestedNameSpecifierAST: public AST { public: NameAST *class_or_namespace_name; unsigned scope_token; public: NestedNameSpecifierAST() : class_or_namespace_name(0) , scope_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT QualifiedNameAST: public NameAST { public: unsigned global_scope_token; NestedNameSpecifierListAST *nested_name_specifier_list; NameAST *unqualified_name; public: QualifiedNameAST() : global_scope_token(0) , nested_name_specifier_list(0) , unqualified_name(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT OperatorFunctionIdAST: public NameAST { public: unsigned operator_token; OperatorAST *op; public: OperatorFunctionIdAST() : operator_token(0) , op(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ConversionFunctionIdAST: public NameAST { public: unsigned operator_token; SpecifierListAST *type_specifier_list; PtrOperatorListAST *ptr_operator_list; public: ConversionFunctionIdAST() : operator_token(0) , type_specifier_list(0) , ptr_operator_list(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT AnonymousNameAST: public NameAST { public: unsigned class_token; public: AnonymousNameAST() : class_token(0) {} virtual AnonymousNameAST *asAnonymousName() { return this; } virtual unsigned firstToken() const { return 0; } virtual unsigned lastToken() const { return 0; } virtual AnonymousNameAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT SimpleNameAST: public NameAST { public: unsigned identifier_token; public: SimpleNameAST() : identifier_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT DestructorNameAST: public NameAST { public: unsigned tilde_token; NameAST *unqualified_name; public: DestructorNameAST() : tilde_token(0) , unqualified_name(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TemplateIdAST: public NameAST { public: unsigned template_token; unsigned identifier_token; unsigned less_token; ExpressionListAST *template_argument_list; unsigned greater_token; public: TemplateIdAST() : template_token(0) , identifier_token(0) , less_token(0) , template_argument_list(0) , greater_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NamespaceAST: public DeclarationAST { public: unsigned inline_token; unsigned namespace_token; unsigned identifier_token; SpecifierListAST *attribute_list; DeclarationAST *linkage_body; public: // annotations Namespace *symbol; public: NamespaceAST() : inline_token(0) , namespace_token(0) , identifier_token(0) , attribute_list(0) , linkage_body(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NamespaceAliasDefinitionAST: public DeclarationAST { public: unsigned namespace_token; unsigned namespace_name_token; unsigned equal_token; NameAST *name; unsigned semicolon_token; public: NamespaceAliasDefinitionAST() : namespace_token(0) , namespace_name_token(0) , equal_token(0) , name(0) , semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT AliasDeclarationAST: public DeclarationAST { public: unsigned using_token; NameAST *name; unsigned equal_token; TypeIdAST *typeId; unsigned semicolon_token; public: // annotations Declaration *symbol; public: AliasDeclarationAST() : using_token(0) , name(0) , equal_token(0) , typeId(0) , semicolon_token(0) , symbol(0) {} virtual AliasDeclarationAST *asAliasDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual AliasDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ExpressionListParenAST: public ExpressionAST { public: unsigned lparen_token; ExpressionListAST *expression_list; unsigned rparen_token; public: ExpressionListParenAST() : lparen_token(0) , expression_list(0) , rparen_token(0) {} virtual ExpressionListParenAST *asExpressionListParen() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ExpressionListParenAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NewArrayDeclaratorAST: public AST { public: unsigned lbracket_token; ExpressionAST *expression; unsigned rbracket_token; public: NewArrayDeclaratorAST() : lbracket_token(0) , expression(0) , rbracket_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NewExpressionAST: public ExpressionAST { public: unsigned scope_token; unsigned new_token; ExpressionListParenAST *new_placement; unsigned lparen_token; ExpressionAST *type_id; unsigned rparen_token; NewTypeIdAST *new_type_id; ExpressionAST *new_initializer; // either ExpressionListParenAST or BracedInitializerAST public: NewExpressionAST() : scope_token(0) , new_token(0) , new_placement(0) , lparen_token(0) , type_id(0) , rparen_token(0) , new_type_id(0) , new_initializer(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NewTypeIdAST: public AST { public: SpecifierListAST *type_specifier_list; PtrOperatorListAST *ptr_operator_list; NewArrayDeclaratorListAST *new_array_declarator_list; public: NewTypeIdAST() : type_specifier_list(0) , ptr_operator_list(0) , new_array_declarator_list(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT OperatorAST: public AST { public: unsigned op_token; unsigned open_token; unsigned close_token; public: OperatorAST() : op_token(0) , open_token(0) , close_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ParameterDeclarationAST: public DeclarationAST { public: SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; unsigned equal_token; ExpressionAST *expression; public: // annotations Argument *symbol; public: ParameterDeclarationAST() : type_specifier_list(0) , declarator(0) , equal_token(0) , expression(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ParameterDeclarationClauseAST: public AST { public: ParameterDeclarationListAST *parameter_declaration_list; unsigned dot_dot_dot_token; public: ParameterDeclarationClauseAST() : parameter_declaration_list(0) , dot_dot_dot_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT CallAST: public PostfixAST { public: ExpressionAST *base_expression; unsigned lparen_token; ExpressionListAST *expression_list; unsigned rparen_token; public: CallAST() : base_expression(0) , lparen_token(0) , expression_list(0) , rparen_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ArrayAccessAST: public PostfixAST { public: ExpressionAST *base_expression; unsigned lbracket_token; ExpressionAST *expression; unsigned rbracket_token; public: ArrayAccessAST() : base_expression(0) , lbracket_token(0) , expression(0) , rbracket_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT PostIncrDecrAST: public PostfixAST { public: ExpressionAST *base_expression; unsigned incr_decr_token; public: PostIncrDecrAST() : base_expression(0) , incr_decr_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT MemberAccessAST: public PostfixAST { public: ExpressionAST *base_expression; unsigned access_token; unsigned template_token; NameAST *member_name; public: MemberAccessAST() : base_expression(0) , access_token(0) , template_token(0) , member_name(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TypeidExpressionAST: public ExpressionAST { public: unsigned typeid_token; unsigned lparen_token; ExpressionAST *expression; unsigned rparen_token; public: TypeidExpressionAST() : typeid_token(0) , lparen_token(0) , expression(0) , rparen_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TypenameCallExpressionAST: public ExpressionAST { public: unsigned typename_token; NameAST *name; ExpressionAST *expression; // either ExpressionListParenAST or BracedInitializerAST public: TypenameCallExpressionAST() : typename_token(0) , name(0) , expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TypeConstructorCallAST: public ExpressionAST { public: SpecifierListAST *type_specifier_list; ExpressionAST *expression; // either ExpressionListParenAST or BracedInitializerAST public: TypeConstructorCallAST() : type_specifier_list(0) , expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT PointerToMemberAST: public PtrOperatorAST { public: unsigned global_scope_token; NestedNameSpecifierListAST *nested_name_specifier_list; unsigned star_token; SpecifierListAST *cv_qualifier_list; unsigned ref_qualifier_token; public: PointerToMemberAST() : global_scope_token(0) , nested_name_specifier_list(0) , star_token(0) , cv_qualifier_list(0) , ref_qualifier_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT PointerAST: public PtrOperatorAST { public: unsigned star_token; SpecifierListAST *cv_qualifier_list; public: PointerAST() : star_token(0) , cv_qualifier_list(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ReferenceAST: public PtrOperatorAST { public: unsigned reference_token; public: ReferenceAST() : reference_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT BreakStatementAST: public StatementAST { public: unsigned break_token; unsigned semicolon_token; public: BreakStatementAST() : break_token(0) , semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ContinueStatementAST: public StatementAST { public: unsigned continue_token; unsigned semicolon_token; public: ContinueStatementAST() : continue_token(0) , semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT GotoStatementAST: public StatementAST { public: unsigned goto_token; unsigned identifier_token; unsigned semicolon_token; public: GotoStatementAST() : goto_token(0) , identifier_token(0) , semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ReturnStatementAST: public StatementAST { public: unsigned return_token; ExpressionAST *expression; unsigned semicolon_token; public: ReturnStatementAST() : return_token(0) , expression(0) , semicolon_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT SizeofExpressionAST: public ExpressionAST { public: unsigned sizeof_token; unsigned dot_dot_dot_token; unsigned lparen_token; ExpressionAST *expression; unsigned rparen_token; public: SizeofExpressionAST() : sizeof_token(0) , dot_dot_dot_token(0) , lparen_token(0) , expression(0) , rparen_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT AlignofExpressionAST: public ExpressionAST { public: unsigned alignof_token; unsigned lparen_token; TypeIdAST *typeId; unsigned rparen_token; public: AlignofExpressionAST() : alignof_token(0) , lparen_token(0) , typeId(0) , rparen_token(0) {} virtual AlignofExpressionAST *asAlignofExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual AlignofExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT PointerLiteralAST: public ExpressionAST { public: unsigned literal_token; public: PointerLiteralAST() : literal_token(0) {} virtual PointerLiteralAST *asPointerLiteral() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual PointerLiteralAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NumericLiteralAST: public ExpressionAST { public: unsigned literal_token; public: NumericLiteralAST() : literal_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT BoolLiteralAST: public ExpressionAST { public: unsigned literal_token; public: BoolLiteralAST() : literal_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ThisExpressionAST: public ExpressionAST { public: unsigned this_token; public: ThisExpressionAST() : this_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NestedExpressionAST: public ExpressionAST { public: unsigned lparen_token; ExpressionAST *expression; unsigned rparen_token; public: NestedExpressionAST() : lparen_token(0) , expression(0) , rparen_token(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT StaticAssertDeclarationAST: public DeclarationAST { public: unsigned static_assert_token; unsigned lparen_token; ExpressionAST *expression; unsigned comma_token; ExpressionAST *string_literal; unsigned rparen_token; unsigned semicolon_token; public: StaticAssertDeclarationAST() : static_assert_token(0) , lparen_token(0) , expression(0) , comma_token(0) , string_literal(0) , rparen_token(0) , semicolon_token(0) {} virtual StaticAssertDeclarationAST *asStaticAssertDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual StaticAssertDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT StringLiteralAST: public ExpressionAST { public: unsigned literal_token; StringLiteralAST *next; public: StringLiteralAST() : literal_token(0) , next(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; 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: SwitchStatementAST() : switch_token(0) , lparen_token(0) , condition(0) , rparen_token(0) , statement(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TemplateDeclarationAST: public DeclarationAST { public: unsigned export_token; unsigned template_token; unsigned less_token; DeclarationListAST *template_parameter_list; unsigned greater_token; DeclarationAST *declaration; public: // annotations Template *symbol; public: TemplateDeclarationAST() : export_token(0) , template_token(0) , less_token(0) , template_parameter_list(0) , greater_token(0) , declaration(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ThrowExpressionAST: public ExpressionAST { public: unsigned throw_token; ExpressionAST *expression; public: ThrowExpressionAST() : throw_token(0) , expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT NoExceptOperatorExpressionAST: public ExpressionAST { public: unsigned noexcept_token; ExpressionAST *expression; public: NoExceptOperatorExpressionAST() : noexcept_token(0) , expression(0) {} virtual NoExceptOperatorExpressionAST *asNoExceptOperatorExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual NoExceptOperatorExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TranslationUnitAST: public AST { public: DeclarationListAST *declaration_list; public: TranslationUnitAST() : declaration_list(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TryBlockStatementAST: public StatementAST { public: unsigned try_token; StatementAST *statement; CatchClauseListAST *catch_clause_list; public: TryBlockStatementAST() : try_token(0) , statement(0) , catch_clause_list(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT CatchClauseAST: public StatementAST { public: unsigned catch_token; unsigned lparen_token; ExceptionDeclarationAST *exception_declaration; unsigned rparen_token; StatementAST *statement; public: // annotations Block *symbol; public: CatchClauseAST() : catch_token(0) , lparen_token(0) , exception_declaration(0) , rparen_token(0) , statement(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TypeIdAST: public ExpressionAST { public: SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; public: TypeIdAST() : type_specifier_list(0) , declarator(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TypenameTypeParameterAST: public DeclarationAST { public: unsigned classkey_token; unsigned dot_dot_dot_token; NameAST *name; unsigned equal_token; ExpressionAST *type_id; public: // annotations TypenameArgument *symbol; public: TypenameTypeParameterAST() : classkey_token(0) , dot_dot_dot_token(0) , name(0) , equal_token(0) , type_id(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT TemplateTypeParameterAST: public DeclarationAST { public: unsigned template_token; unsigned less_token; DeclarationListAST *template_parameter_list; unsigned greater_token; unsigned class_token; unsigned dot_dot_dot_token; NameAST *name; unsigned equal_token; ExpressionAST *type_id; public: TypenameArgument *symbol; public: TemplateTypeParameterAST() : template_token(0) , less_token(0) , template_parameter_list(0) , greater_token(0) , class_token(0) , dot_dot_dot_token(0) , name(0) , equal_token(0) , type_id(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT UnaryExpressionAST: public ExpressionAST { public: unsigned unary_op_token; ExpressionAST *expression; public: UnaryExpressionAST() : unary_op_token(0) , expression(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT UsingAST: public DeclarationAST { public: unsigned using_token; unsigned typename_token; NameAST *name; unsigned semicolon_token; public: // annotations UsingDeclaration *symbol; public: UsingAST() : using_token(0) , typename_token(0) , name(0) , semicolon_token(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT UsingDirectiveAST: public DeclarationAST { public: unsigned using_token; unsigned namespace_token; NameAST *name; unsigned semicolon_token; public: UsingNamespaceDirective *symbol; public: UsingDirectiveAST() : using_token(0) , namespace_token(0) , name(0) , semicolon_token(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; 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: WhileStatementAST() : while_token(0) , lparen_token(0) , condition(0) , rparen_token(0) , statement(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCClassForwardDeclarationAST: public DeclarationAST { public: SpecifierListAST *attribute_list; unsigned class_token; NameListAST *identifier_list; unsigned semicolon_token; public: // annotations List *symbols; public: ObjCClassForwardDeclarationAST() : attribute_list(0) , class_token(0) , identifier_list(0) , semicolon_token(0) , symbols(0) {} virtual ObjCClassForwardDeclarationAST *asObjCClassForwardDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCClassForwardDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCClassDeclarationAST: public DeclarationAST { public: SpecifierListAST *attribute_list; unsigned interface_token; unsigned implementation_token; NameAST *class_name; unsigned lparen_token; NameAST *category_name; unsigned rparen_token; unsigned colon_token; NameAST *superclass; ObjCProtocolRefsAST *protocol_refs; ObjCInstanceVariablesDeclarationAST *inst_vars_decl; DeclarationListAST *member_declaration_list; unsigned end_token; public: // annotations ObjCClass *symbol; public: ObjCClassDeclarationAST() : attribute_list(0) , interface_token(0) , implementation_token(0) , class_name(0) , lparen_token(0) , category_name(0) , rparen_token(0) , colon_token(0) , superclass(0) , protocol_refs(0) , inst_vars_decl(0) , member_declaration_list(0) , end_token(0) , symbol(0) {} 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); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCProtocolForwardDeclarationAST: public DeclarationAST { public: SpecifierListAST *attribute_list; unsigned protocol_token; NameListAST *identifier_list; unsigned semicolon_token; public: // annotations List *symbols; public: ObjCProtocolForwardDeclarationAST() : attribute_list(0) , protocol_token(0) , identifier_list(0) , semicolon_token(0) , symbols(0) {} virtual ObjCProtocolForwardDeclarationAST *asObjCProtocolForwardDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCProtocolForwardDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCProtocolDeclarationAST: public DeclarationAST { public: SpecifierListAST *attribute_list; unsigned protocol_token; NameAST *name; ObjCProtocolRefsAST *protocol_refs; DeclarationListAST *member_declaration_list; unsigned end_token; public: // annotations ObjCProtocol *symbol; public: ObjCProtocolDeclarationAST() : attribute_list(0) , protocol_token(0) , name(0) , protocol_refs(0) , member_declaration_list(0) , end_token(0) , symbol(0) {} virtual ObjCProtocolDeclarationAST *asObjCProtocolDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCProtocolDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCProtocolRefsAST: public AST { public: unsigned less_token; NameListAST *identifier_list; unsigned greater_token; public: ObjCProtocolRefsAST() : less_token(0) , identifier_list(0) , greater_token(0) {} virtual ObjCProtocolRefsAST *asObjCProtocolRefs() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCProtocolRefsAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCMessageArgumentAST: public AST { public: ExpressionAST *parameter_value_expression; public: ObjCMessageArgumentAST() : parameter_value_expression(0) {} virtual ObjCMessageArgumentAST *asObjCMessageArgument() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCMessageArgumentAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCMessageExpressionAST: public ExpressionAST { public: unsigned lbracket_token; ExpressionAST *receiver_expression; ObjCSelectorAST *selector; ObjCMessageArgumentListAST *argument_list; unsigned rbracket_token; public: ObjCMessageExpressionAST() : lbracket_token(0) , receiver_expression(0) , selector(0) , argument_list(0) , rbracket_token(0) {} virtual ObjCMessageExpressionAST *asObjCMessageExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCMessageExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCProtocolExpressionAST: public ExpressionAST { public: unsigned protocol_token; unsigned lparen_token; unsigned identifier_token; unsigned rparen_token; public: ObjCProtocolExpressionAST() : protocol_token(0) , lparen_token(0) , identifier_token(0) , rparen_token(0) {} virtual ObjCProtocolExpressionAST *asObjCProtocolExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCProtocolExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCTypeNameAST: public AST { public: unsigned lparen_token; unsigned type_qualifier_token; ExpressionAST *type_id; unsigned rparen_token; public: ObjCTypeNameAST() : lparen_token(0) , type_qualifier_token(0) , type_id(0) , rparen_token(0) {} virtual ObjCTypeNameAST *asObjCTypeName() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCTypeNameAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCEncodeExpressionAST: public ExpressionAST { public: unsigned encode_token; ObjCTypeNameAST *type_name; public: ObjCEncodeExpressionAST() : encode_token(0) , type_name(0) {} virtual ObjCEncodeExpressionAST *asObjCEncodeExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCEncodeExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCSelectorExpressionAST: public ExpressionAST { public: unsigned selector_token; unsigned lparen_token; ObjCSelectorAST *selector; unsigned rparen_token; public: ObjCSelectorExpressionAST() : selector_token(0) , lparen_token(0) , selector(0) , rparen_token(0) {} virtual ObjCSelectorExpressionAST *asObjCSelectorExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCSelectorExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCInstanceVariablesDeclarationAST: public AST { public: unsigned lbrace_token; DeclarationListAST *instance_variable_list; unsigned rbrace_token; public: ObjCInstanceVariablesDeclarationAST() : lbrace_token(0) , instance_variable_list(0) , rbrace_token(0) {} virtual ObjCInstanceVariablesDeclarationAST *asObjCInstanceVariablesDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCInstanceVariablesDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCVisibilityDeclarationAST: public DeclarationAST { public: unsigned visibility_token; public: ObjCVisibilityDeclarationAST() : visibility_token(0) {} virtual ObjCVisibilityDeclarationAST *asObjCVisibilityDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCVisibilityDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCPropertyAttributeAST: public AST { public: unsigned attribute_identifier_token; unsigned equals_token; ObjCSelectorAST *method_selector; public: ObjCPropertyAttributeAST() : attribute_identifier_token(0) , equals_token(0) , method_selector(0) {} virtual ObjCPropertyAttributeAST *asObjCPropertyAttribute() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCPropertyAttributeAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCPropertyDeclarationAST: public DeclarationAST { public: SpecifierListAST *attribute_list; unsigned property_token; unsigned lparen_token; ObjCPropertyAttributeListAST *property_attribute_list; unsigned rparen_token; DeclarationAST *simple_declaration; public: // annotations List *symbols; public: ObjCPropertyDeclarationAST() : attribute_list(0) , property_token(0) , lparen_token(0) , property_attribute_list(0) , rparen_token(0) , simple_declaration(0) , symbols(0) {} virtual ObjCPropertyDeclarationAST *asObjCPropertyDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCPropertyDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCMessageArgumentDeclarationAST: public AST { public: ObjCTypeNameAST* type_name; SpecifierListAST *attribute_list; NameAST *param_name; public: // annotations Argument *argument; public: ObjCMessageArgumentDeclarationAST() : type_name(0) , attribute_list(0) , param_name(0) , argument(0) {} virtual ObjCMessageArgumentDeclarationAST *asObjCMessageArgumentDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCMessageArgumentDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCMethodPrototypeAST: public AST { public: unsigned method_type_token; ObjCTypeNameAST *type_name; ObjCSelectorAST *selector; ObjCMessageArgumentDeclarationListAST *argument_list; unsigned dot_dot_dot_token; SpecifierListAST *attribute_list; public: // annotations ObjCMethod *symbol; public: ObjCMethodPrototypeAST() : method_type_token(0) , type_name(0) , selector(0) , argument_list(0) , dot_dot_dot_token(0) , attribute_list(0) , symbol(0) {} virtual ObjCMethodPrototypeAST *asObjCMethodPrototype() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCMethodPrototypeAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCMethodDeclarationAST: public DeclarationAST { public: ObjCMethodPrototypeAST *method_prototype; StatementAST *function_body; unsigned semicolon_token; public: ObjCMethodDeclarationAST() : method_prototype(0) , function_body(0) , semicolon_token(0) {} virtual ObjCMethodDeclarationAST *asObjCMethodDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCMethodDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCSynthesizedPropertyAST: public AST { public: unsigned property_identifier_token; unsigned equals_token; unsigned alias_identifier_token; public: ObjCSynthesizedPropertyAST() : property_identifier_token(0) , equals_token(0) , alias_identifier_token(0) {} virtual ObjCSynthesizedPropertyAST *asObjCSynthesizedProperty() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCSynthesizedPropertyAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCSynthesizedPropertiesDeclarationAST: public DeclarationAST { public: unsigned synthesized_token; ObjCSynthesizedPropertyListAST *property_identifier_list; unsigned semicolon_token; public: ObjCSynthesizedPropertiesDeclarationAST() : synthesized_token(0) , property_identifier_list(0) , semicolon_token(0) {} virtual ObjCSynthesizedPropertiesDeclarationAST *asObjCSynthesizedPropertiesDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCSynthesizedPropertiesDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCDynamicPropertiesDeclarationAST: public DeclarationAST { public: unsigned dynamic_token; NameListAST *property_identifier_list; unsigned semicolon_token; public: ObjCDynamicPropertiesDeclarationAST() : dynamic_token(0) , property_identifier_list(0) , semicolon_token(0) {} virtual ObjCDynamicPropertiesDeclarationAST *asObjCDynamicPropertiesDeclaration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCDynamicPropertiesDeclarationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCFastEnumerationAST: public StatementAST { public: unsigned for_token; unsigned lparen_token; // declaration SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; // or an expression ExpressionAST *initializer; unsigned in_token; ExpressionAST *fast_enumeratable_expression; unsigned rparen_token; StatementAST *statement; public: // annotations Block *symbol; public: ObjCFastEnumerationAST() : for_token(0) , lparen_token(0) , type_specifier_list(0) , declarator(0) , initializer(0) , in_token(0) , fast_enumeratable_expression(0) , rparen_token(0) , statement(0) , symbol(0) {} virtual ObjCFastEnumerationAST *asObjCFastEnumeration() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCFastEnumerationAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CPLUSPLUS_EXPORT ObjCSynchronizedStatementAST: public StatementAST { public: unsigned synchronized_token; unsigned lparen_token; ExpressionAST *synchronized_object; unsigned rparen_token; StatementAST *statement; public: ObjCSynchronizedStatementAST() : synchronized_token(0) , lparen_token(0) , synchronized_object(0) , rparen_token(0) , statement(0) {} virtual ObjCSynchronizedStatementAST *asObjCSynchronizedStatement() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual ObjCSynchronizedStatementAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class LambdaExpressionAST: public ExpressionAST { public: LambdaIntroducerAST *lambda_introducer; LambdaDeclaratorAST *lambda_declarator; StatementAST *statement; public: LambdaExpressionAST() : lambda_introducer(0) , lambda_declarator(0) , statement(0) {} virtual LambdaExpressionAST *asLambdaExpression() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual LambdaExpressionAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class LambdaIntroducerAST: public AST { public: unsigned lbracket_token; LambdaCaptureAST *lambda_capture; unsigned rbracket_token; public: LambdaIntroducerAST() : lbracket_token(0) , lambda_capture(0) , rbracket_token(0) {} virtual LambdaIntroducerAST *asLambdaIntroducer() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual LambdaIntroducerAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class LambdaCaptureAST: public AST { public: unsigned default_capture_token; CaptureListAST *capture_list; public: LambdaCaptureAST() : default_capture_token(0) , capture_list(0) {} virtual LambdaCaptureAST *asLambdaCapture() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual LambdaCaptureAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class CaptureAST: public AST { public: unsigned amper_token; NameAST *identifier; public: CaptureAST() : amper_token(0) , identifier(0) {} virtual CaptureAST *asCapture() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual CaptureAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class LambdaDeclaratorAST: public AST { public: unsigned lparen_token; ParameterDeclarationClauseAST *parameter_declaration_clause; unsigned rparen_token; SpecifierListAST *attributes; unsigned mutable_token; ExceptionSpecificationAST *exception_specification; TrailingReturnTypeAST *trailing_return_type; public: // annotations Function *symbol; public: LambdaDeclaratorAST() : lparen_token(0) , parameter_declaration_clause(0) , rparen_token(0) , attributes(0) , mutable_token(0) , exception_specification(0) , trailing_return_type(0) , symbol(0) {} virtual LambdaDeclaratorAST *asLambdaDeclarator() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual LambdaDeclaratorAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class TrailingReturnTypeAST: public AST { public: unsigned arrow_token; SpecifierListAST *attributes; SpecifierListAST *type_specifier_list; DeclaratorAST *declarator; public: TrailingReturnTypeAST() : arrow_token(0) , attributes(0) , type_specifier_list(0) , declarator(0) {} virtual TrailingReturnTypeAST *asTrailingReturnType() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual TrailingReturnTypeAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class BracedInitializerAST: public ExpressionAST { public: unsigned lbrace_token; ExpressionListAST *expression_list; unsigned comma_token; unsigned rbrace_token; public: BracedInitializerAST() : lbrace_token(0) , expression_list(0) , comma_token(0) , rbrace_token(0) {} virtual BracedInitializerAST *asBracedInitializer() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual BracedInitializerAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class DesignatorAST: public AST { public: DesignatorAST() {} virtual DesignatorAST *asDesignator() { return this; } virtual DesignatorAST *clone(MemoryPool *pool) const = 0; }; class DotDesignatorAST: public DesignatorAST { public: unsigned dot_token; unsigned identifier_token; public: DotDesignatorAST() : dot_token(0) , identifier_token(0) {} virtual DotDesignatorAST *asDotDesignator() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual DotDesignatorAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class BracketDesignatorAST: public DesignatorAST { public: unsigned lbracket_token; ExpressionAST *expression; unsigned rbracket_token; public: BracketDesignatorAST() : lbracket_token(0) , expression(0) , rbracket_token(0) {} virtual BracketDesignatorAST *asBracketDesignator() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual BracketDesignatorAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; class DesignatedInitializerAST: public ExpressionAST { public: DesignatorListAST *designator_list; unsigned equal_token; ExpressionAST *initializer; public: DesignatedInitializerAST() : designator_list(0) , equal_token(0) , initializer(0) {} virtual DesignatedInitializerAST *asDesignatedInitializer() { return this; } virtual unsigned firstToken() const; virtual unsigned lastToken() const; virtual DesignatedInitializerAST *clone(MemoryPool *pool) const; protected: virtual void accept0(ASTVisitor *visitor); virtual bool match0(AST *, ASTMatcher *); }; } // namespace CPlusPlus