tools/icheck/parser/src/shared/cplusplus/AST.h
changeset 0 876b1a06bc25
equal deleted inserted replaced
-1:000000000000 0:876b1a06bc25
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the Qt Mobility Components.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 // Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
       
    42 //
       
    43 // Permission is hereby granted, free of charge, to any person obtaining a copy
       
    44 // of this software and associated documentation files (the "Software"), to deal
       
    45 // in the Software without restriction, including without limitation the rights
       
    46 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
       
    47 // copies of the Software, and to permit persons to whom the Software is
       
    48 // furnished to do so, subject to the following conditions:
       
    49 //
       
    50 // The above copyright notice and this permission notice shall be included in
       
    51 // all copies or substantial portions of the Software.
       
    52 //
       
    53 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
       
    54 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
       
    55 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
       
    56 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
       
    57 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
       
    58 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
       
    59 // THE SOFTWARE.
       
    60 
       
    61 #ifndef CPLUSPLUS_AST_H
       
    62 #define CPLUSPLUS_AST_H
       
    63 
       
    64 #include "CPlusPlusForwardDeclarations.h"
       
    65 #include "ASTfwd.h"
       
    66 #include "MemoryPool.h"
       
    67 
       
    68 namespace CPlusPlus {
       
    69 
       
    70 template <typename _Tp>
       
    71 class CPLUSPLUS_EXPORT List: public Managed
       
    72 {
       
    73     List(const List &other);
       
    74     void operator =(const List &other);
       
    75 
       
    76 public:
       
    77     List()
       
    78         : value(_Tp()), next(0)
       
    79     { }
       
    80 
       
    81     List(const _Tp &value)
       
    82         : value(value), next(0)
       
    83     { }
       
    84 
       
    85     unsigned firstToken() const
       
    86     {
       
    87         if (value)
       
    88             return value->firstToken();
       
    89 
       
    90         // ### assert(0);
       
    91         return 0;
       
    92     }
       
    93 
       
    94     unsigned lastToken() const
       
    95     {
       
    96         _Tp lastValue = 0;
       
    97 
       
    98         for (const List *it = this; it; it = it->next) {
       
    99             if (it->value)
       
   100                 lastValue = it->value;
       
   101         }
       
   102 
       
   103         if (lastValue)
       
   104             return lastValue->lastToken();
       
   105 
       
   106         // ### assert(0);
       
   107         return 0;
       
   108     }
       
   109     
       
   110     _Tp value;
       
   111     List *next;
       
   112 };
       
   113 
       
   114 class CPLUSPLUS_EXPORT AST: public Managed
       
   115 {
       
   116     AST(const AST &other);
       
   117     void operator =(const AST &other);
       
   118 
       
   119 public:
       
   120     AST();
       
   121     virtual ~AST();
       
   122 
       
   123     void accept(ASTVisitor *visitor);
       
   124 
       
   125     static void accept(AST *ast, ASTVisitor *visitor)
       
   126     { if (ast) ast->accept(visitor); }
       
   127 
       
   128     template <typename _Tp>
       
   129     static void accept(List<_Tp> *it, ASTVisitor *visitor)
       
   130     {
       
   131         for (; it; it = it->next)
       
   132             accept(it->value, visitor);
       
   133     }
       
   134 
       
   135     static bool match(AST *ast, AST *pattern, ASTMatcher *matcher);
       
   136     bool match(AST *pattern, ASTMatcher *matcher);
       
   137 
       
   138     template <typename _Tp>
       
   139     static bool match(List<_Tp> *it, List<_Tp> *patternIt, ASTMatcher *matcher)
       
   140     {
       
   141         while (it && patternIt) {
       
   142             if (! match(it->value, patternIt->value, matcher))
       
   143                 return false;
       
   144 
       
   145             it = it->next;
       
   146             patternIt = patternIt->next;
       
   147         }
       
   148 
       
   149         if (! it && ! patternIt)
       
   150             return true;
       
   151 
       
   152         return false;
       
   153     }
       
   154 
       
   155     virtual unsigned firstToken() const = 0;
       
   156     virtual unsigned lastToken() const = 0;
       
   157 
       
   158     virtual AST *clone(MemoryPool *pool) const = 0;
       
   159 
       
   160     virtual AccessDeclarationAST *asAccessDeclaration() { return 0; }
       
   161     virtual ArrayAccessAST *asArrayAccess() { return 0; }
       
   162     virtual ArrayDeclaratorAST *asArrayDeclarator() { return 0; }
       
   163     virtual ArrayInitializerAST *asArrayInitializer() { return 0; }
       
   164     virtual AsmDefinitionAST *asAsmDefinition() { return 0; }
       
   165     virtual AttributeAST *asAttribute() { return 0; }
       
   166     virtual AttributeSpecifierAST *asAttributeSpecifier() { return 0; }
       
   167     virtual BaseSpecifierAST *asBaseSpecifier() { return 0; }
       
   168     virtual BinaryExpressionAST *asBinaryExpression() { return 0; }
       
   169     virtual BoolLiteralAST *asBoolLiteral() { return 0; }
       
   170     virtual BreakStatementAST *asBreakStatement() { return 0; }
       
   171     virtual CallAST *asCall() { return 0; }
       
   172     virtual CaseStatementAST *asCaseStatement() { return 0; }
       
   173     virtual CastExpressionAST *asCastExpression() { return 0; }
       
   174     virtual CatchClauseAST *asCatchClause() { return 0; }
       
   175     virtual ClassSpecifierAST *asClassSpecifier() { return 0; }
       
   176     virtual CompoundLiteralAST *asCompoundLiteral() { return 0; }
       
   177     virtual CompoundStatementAST *asCompoundStatement() { return 0; }
       
   178     virtual ConditionAST *asCondition() { return 0; }
       
   179     virtual ConditionalExpressionAST *asConditionalExpression() { return 0; }
       
   180     virtual ContinueStatementAST *asContinueStatement() { return 0; }
       
   181     virtual ConversionFunctionIdAST *asConversionFunctionId() { return 0; }
       
   182     virtual CoreDeclaratorAST *asCoreDeclarator() { return 0; }
       
   183     virtual CppCastExpressionAST *asCppCastExpression() { return 0; }
       
   184     virtual CtorInitializerAST *asCtorInitializer() { return 0; }
       
   185     virtual DeclarationAST *asDeclaration() { return 0; }
       
   186     virtual DeclarationStatementAST *asDeclarationStatement() { return 0; }
       
   187     virtual DeclaratorAST *asDeclarator() { return 0; }
       
   188     virtual DeclaratorIdAST *asDeclaratorId() { return 0; }
       
   189     virtual DeleteExpressionAST *asDeleteExpression() { return 0; }
       
   190     virtual DestructorNameAST *asDestructorName() { return 0; }
       
   191     virtual DoStatementAST *asDoStatement() { return 0; }
       
   192     virtual ElaboratedTypeSpecifierAST *asElaboratedTypeSpecifier() { return 0; }
       
   193     virtual EmptyDeclarationAST *asEmptyDeclaration() { return 0; }
       
   194     virtual EnumSpecifierAST *asEnumSpecifier() { return 0; }
       
   195     virtual EnumeratorAST *asEnumerator() { return 0; }
       
   196     virtual ExceptionDeclarationAST *asExceptionDeclaration() { return 0; }
       
   197     virtual ExceptionSpecificationAST *asExceptionSpecification() { return 0; }
       
   198     virtual ExpressionAST *asExpression() { return 0; }
       
   199     virtual ExpressionOrDeclarationStatementAST *asExpressionOrDeclarationStatement() { return 0; }
       
   200     virtual ExpressionStatementAST *asExpressionStatement() { return 0; }
       
   201     virtual ForStatementAST *asForStatement() { return 0; }
       
   202     virtual ForeachStatementAST *asForeachStatement() { return 0; }
       
   203     virtual FunctionDeclaratorAST *asFunctionDeclarator() { return 0; }
       
   204     virtual FunctionDefinitionAST *asFunctionDefinition() { return 0; }
       
   205     virtual GotoStatementAST *asGotoStatement() { return 0; }
       
   206     virtual IfStatementAST *asIfStatement() { return 0; }
       
   207     virtual LabeledStatementAST *asLabeledStatement() { return 0; }
       
   208     virtual LinkageBodyAST *asLinkageBody() { return 0; }
       
   209     virtual LinkageSpecificationAST *asLinkageSpecification() { return 0; }
       
   210     virtual MemInitializerAST *asMemInitializer() { return 0; }
       
   211     virtual MemberAccessAST *asMemberAccess() { return 0; }
       
   212     virtual NameAST *asName() { return 0; }
       
   213     virtual NamedTypeSpecifierAST *asNamedTypeSpecifier() { return 0; }
       
   214     virtual NamespaceAST *asNamespace() { return 0; }
       
   215     virtual NamespaceAliasDefinitionAST *asNamespaceAliasDefinition() { return 0; }
       
   216     virtual NestedDeclaratorAST *asNestedDeclarator() { return 0; }
       
   217     virtual NestedExpressionAST *asNestedExpression() { return 0; }
       
   218     virtual NestedNameSpecifierAST *asNestedNameSpecifier() { return 0; }
       
   219     virtual NewArrayDeclaratorAST *asNewArrayDeclarator() { return 0; }
       
   220     virtual NewExpressionAST *asNewExpression() { return 0; }
       
   221     virtual NewInitializerAST *asNewInitializer() { return 0; }
       
   222     virtual NewPlacementAST *asNewPlacement() { return 0; }
       
   223     virtual NewTypeIdAST *asNewTypeId() { return 0; }
       
   224     virtual NumericLiteralAST *asNumericLiteral() { return 0; }
       
   225     virtual ObjCClassDeclarationAST *asObjCClassDeclaration() { return 0; }
       
   226     virtual ObjCClassForwardDeclarationAST *asObjCClassForwardDeclaration() { return 0; }
       
   227     virtual ObjCDynamicPropertiesDeclarationAST *asObjCDynamicPropertiesDeclaration() { return 0; }
       
   228     virtual ObjCEncodeExpressionAST *asObjCEncodeExpression() { return 0; }
       
   229     virtual ObjCFastEnumerationAST *asObjCFastEnumeration() { return 0; }
       
   230     virtual ObjCInstanceVariablesDeclarationAST *asObjCInstanceVariablesDeclaration() { return 0; }
       
   231     virtual ObjCMessageArgumentAST *asObjCMessageArgument() { return 0; }
       
   232     virtual ObjCMessageArgumentDeclarationAST *asObjCMessageArgumentDeclaration() { return 0; }
       
   233     virtual ObjCMessageExpressionAST *asObjCMessageExpression() { return 0; }
       
   234     virtual ObjCMethodDeclarationAST *asObjCMethodDeclaration() { return 0; }
       
   235     virtual ObjCMethodPrototypeAST *asObjCMethodPrototype() { return 0; }
       
   236     virtual ObjCPropertyAttributeAST *asObjCPropertyAttribute() { return 0; }
       
   237     virtual ObjCPropertyDeclarationAST *asObjCPropertyDeclaration() { return 0; }
       
   238     virtual ObjCProtocolDeclarationAST *asObjCProtocolDeclaration() { return 0; }
       
   239     virtual ObjCProtocolExpressionAST *asObjCProtocolExpression() { return 0; }
       
   240     virtual ObjCProtocolForwardDeclarationAST *asObjCProtocolForwardDeclaration() { return 0; }
       
   241     virtual ObjCProtocolRefsAST *asObjCProtocolRefs() { return 0; }
       
   242     virtual ObjCSelectorAST *asObjCSelector() { return 0; }
       
   243     virtual ObjCSelectorArgumentAST *asObjCSelectorArgument() { return 0; }
       
   244     virtual ObjCSelectorExpressionAST *asObjCSelectorExpression() { return 0; }
       
   245     virtual ObjCSelectorWithArgumentsAST *asObjCSelectorWithArguments() { return 0; }
       
   246     virtual ObjCSelectorWithoutArgumentsAST *asObjCSelectorWithoutArguments() { return 0; }
       
   247     virtual ObjCSynchronizedStatementAST *asObjCSynchronizedStatement() { return 0; }
       
   248     virtual ObjCSynthesizedPropertiesDeclarationAST *asObjCSynthesizedPropertiesDeclaration() { return 0; }
       
   249     virtual ObjCSynthesizedPropertyAST *asObjCSynthesizedProperty() { return 0; }
       
   250     virtual ObjCTypeNameAST *asObjCTypeName() { return 0; }
       
   251     virtual ObjCVisibilityDeclarationAST *asObjCVisibilityDeclaration() { return 0; }
       
   252     virtual OperatorAST *asOperator() { return 0; }
       
   253     virtual OperatorFunctionIdAST *asOperatorFunctionId() { return 0; }
       
   254     virtual ParameterDeclarationAST *asParameterDeclaration() { return 0; }
       
   255     virtual ParameterDeclarationClauseAST *asParameterDeclarationClause() { return 0; }
       
   256     virtual PointerAST *asPointer() { return 0; }
       
   257     virtual PointerToMemberAST *asPointerToMember() { return 0; }
       
   258     virtual PostIncrDecrAST *asPostIncrDecr() { return 0; }
       
   259     virtual PostfixAST *asPostfix() { return 0; }
       
   260     virtual PostfixDeclaratorAST *asPostfixDeclarator() { return 0; }
       
   261     virtual PostfixExpressionAST *asPostfixExpression() { return 0; }
       
   262     virtual PtrOperatorAST *asPtrOperator() { return 0; }
       
   263     virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return 0; }
       
   264     virtual QtMethodAST *asQtMethod() { return 0; }
       
   265     virtual QualifiedNameAST *asQualifiedName() { return 0; }
       
   266     virtual ReferenceAST *asReference() { return 0; }
       
   267     virtual ReturnStatementAST *asReturnStatement() { return 0; }
       
   268     virtual SimpleDeclarationAST *asSimpleDeclaration() { return 0; }
       
   269     virtual SimpleNameAST *asSimpleName() { return 0; }
       
   270     virtual SimpleSpecifierAST *asSimpleSpecifier() { return 0; }
       
   271     virtual SizeofExpressionAST *asSizeofExpression() { return 0; }
       
   272     virtual SpecifierAST *asSpecifier() { return 0; }
       
   273     virtual StatementAST *asStatement() { return 0; }
       
   274     virtual StringLiteralAST *asStringLiteral() { return 0; }
       
   275     virtual SwitchStatementAST *asSwitchStatement() { return 0; }
       
   276     virtual TemplateDeclarationAST *asTemplateDeclaration() { return 0; }
       
   277     virtual TemplateIdAST *asTemplateId() { return 0; }
       
   278     virtual TemplateTypeParameterAST *asTemplateTypeParameter() { return 0; }
       
   279     virtual ThisExpressionAST *asThisExpression() { return 0; }
       
   280     virtual ThrowExpressionAST *asThrowExpression() { return 0; }
       
   281     virtual TranslationUnitAST *asTranslationUnit() { return 0; }
       
   282     virtual TryBlockStatementAST *asTryBlockStatement() { return 0; }
       
   283     virtual TypeConstructorCallAST *asTypeConstructorCall() { return 0; }
       
   284     virtual TypeIdAST *asTypeId() { return 0; }
       
   285     virtual TypeidExpressionAST *asTypeidExpression() { return 0; }
       
   286     virtual TypenameCallExpressionAST *asTypenameCallExpression() { return 0; }
       
   287     virtual TypenameTypeParameterAST *asTypenameTypeParameter() { return 0; }
       
   288     virtual TypeofSpecifierAST *asTypeofSpecifier() { return 0; }
       
   289     virtual UnaryExpressionAST *asUnaryExpression() { return 0; }
       
   290     virtual UsingAST *asUsing() { return 0; }
       
   291     virtual UsingDirectiveAST *asUsingDirective() { return 0; }
       
   292     virtual WhileStatementAST *asWhileStatement() { return 0; }
       
   293 #ifdef ICHECK_BUILD
       
   294     virtual QPropertyDeclarationAST *asQPropertyDeclarationAST() { return 0; }
       
   295     virtual QEnumDeclarationAST *asQEnumDeclarationAST() { return 0; }
       
   296     virtual QFlagsDeclarationAST *asQFlagsDeclarationAST() { return 0; }
       
   297     virtual QDeclareFlagsDeclarationAST *asQDeclareFlagsDeclarationAST() { return 0; }
       
   298 #endif
       
   299 
       
   300 protected:
       
   301     virtual void accept0(ASTVisitor *visitor) = 0;
       
   302     virtual bool match0(AST *, ASTMatcher *) = 0;
       
   303 };
       
   304 
       
   305 class CPLUSPLUS_EXPORT StatementAST: public AST
       
   306 {
       
   307 public:
       
   308     virtual StatementAST *asStatement() { return this; }
       
   309 
       
   310     virtual StatementAST *clone(MemoryPool *pool) const = 0;
       
   311 };
       
   312 
       
   313 class CPLUSPLUS_EXPORT ExpressionAST: public AST
       
   314 {
       
   315 public:
       
   316     virtual ExpressionAST *asExpression() { return this; }
       
   317 
       
   318     virtual ExpressionAST *clone(MemoryPool *pool) const = 0;
       
   319 };
       
   320 
       
   321 class CPLUSPLUS_EXPORT DeclarationAST: public AST
       
   322 {
       
   323 public:
       
   324     virtual DeclarationAST *asDeclaration() { return this; }
       
   325 
       
   326     virtual DeclarationAST *clone(MemoryPool *pool) const = 0;
       
   327 
       
   328 #ifdef ICHECK_BUILD
       
   329     unsigned invoke_token;
       
   330 #endif
       
   331 };
       
   332 
       
   333 class CPLUSPLUS_EXPORT NameAST: public ExpressionAST
       
   334 {
       
   335 public: // annotations
       
   336     const Name *name;
       
   337 
       
   338 public:
       
   339     virtual NameAST *asName() { return this; }
       
   340 
       
   341     virtual NameAST *clone(MemoryPool *pool) const = 0;
       
   342 };
       
   343 
       
   344 class CPLUSPLUS_EXPORT SpecifierAST: public AST
       
   345 {
       
   346 public:
       
   347     virtual SpecifierAST *asSpecifier() { return this; }
       
   348 
       
   349     virtual SpecifierAST *clone(MemoryPool *pool) const = 0;
       
   350 };
       
   351 
       
   352 class CPLUSPLUS_EXPORT PtrOperatorAST: public AST
       
   353 {
       
   354 public:
       
   355     virtual PtrOperatorAST *asPtrOperator() { return this; }
       
   356 
       
   357     virtual PtrOperatorAST *clone(MemoryPool *pool) const = 0;
       
   358 };
       
   359 
       
   360 class CPLUSPLUS_EXPORT PostfixAST: public AST
       
   361 {
       
   362 public:
       
   363     virtual PostfixAST *asPostfix() { return this; }
       
   364 
       
   365     virtual PostfixAST *clone(MemoryPool *pool) const = 0;
       
   366 };
       
   367 
       
   368 class CPLUSPLUS_EXPORT CoreDeclaratorAST: public AST
       
   369 {
       
   370 public:
       
   371     virtual CoreDeclaratorAST *asCoreDeclarator() { return this; }
       
   372 
       
   373     virtual CoreDeclaratorAST *clone(MemoryPool *pool) const = 0;
       
   374 };
       
   375 
       
   376 class CPLUSPLUS_EXPORT PostfixDeclaratorAST: public AST
       
   377 {
       
   378 public:
       
   379     virtual PostfixDeclaratorAST *asPostfixDeclarator() { return this; }
       
   380 
       
   381     virtual PostfixDeclaratorAST *clone(MemoryPool *pool) const = 0;
       
   382 };
       
   383 
       
   384 class CPLUSPLUS_EXPORT ObjCSelectorAST: public AST
       
   385 {
       
   386 public: // annotation
       
   387     const Name *selector_name;
       
   388 
       
   389 public:
       
   390     virtual ObjCSelectorAST *asObjCSelector() { return this; }
       
   391 
       
   392     virtual ObjCSelectorAST *clone(MemoryPool *pool) const = 0;
       
   393 };
       
   394 
       
   395 class CPLUSPLUS_EXPORT SimpleSpecifierAST: public SpecifierAST
       
   396 {
       
   397 public:
       
   398     unsigned specifier_token;
       
   399 
       
   400 public:
       
   401     virtual SimpleSpecifierAST *asSimpleSpecifier() { return this; }
       
   402 
       
   403     virtual unsigned firstToken() const;
       
   404     virtual unsigned lastToken() const;
       
   405 
       
   406     virtual SimpleSpecifierAST *clone(MemoryPool *pool) const;
       
   407 
       
   408 protected:
       
   409     virtual void accept0(ASTVisitor *visitor);
       
   410     virtual bool match0(AST *, ASTMatcher *);
       
   411 };
       
   412 
       
   413 class CPLUSPLUS_EXPORT AttributeSpecifierAST: public SpecifierAST
       
   414 {
       
   415 public:
       
   416     unsigned attribute_token;
       
   417     unsigned first_lparen_token;
       
   418     unsigned second_lparen_token;
       
   419     AttributeListAST *attribute_list;
       
   420     unsigned first_rparen_token;
       
   421     unsigned second_rparen_token;
       
   422 
       
   423 public:
       
   424     virtual AttributeSpecifierAST *asAttributeSpecifier() { return this; }
       
   425 
       
   426     virtual unsigned firstToken() const;
       
   427     virtual unsigned lastToken() const;
       
   428 
       
   429     virtual AttributeSpecifierAST *clone(MemoryPool *pool) const;
       
   430 
       
   431 protected:
       
   432     virtual void accept0(ASTVisitor *visitor);
       
   433     virtual bool match0(AST *, ASTMatcher *);
       
   434 };
       
   435 
       
   436 class CPLUSPLUS_EXPORT AttributeAST: public AST
       
   437 {
       
   438 public:
       
   439     unsigned identifier_token;
       
   440     unsigned lparen_token;
       
   441     unsigned tag_token;
       
   442     ExpressionListAST *expression_list;
       
   443     unsigned rparen_token;
       
   444 
       
   445 public:
       
   446     virtual AttributeAST *asAttribute() { return this; }
       
   447 
       
   448     virtual unsigned firstToken() const;
       
   449     virtual unsigned lastToken() const;
       
   450 
       
   451     virtual AttributeAST *clone(MemoryPool *pool) const;
       
   452 
       
   453 protected:
       
   454     virtual void accept0(ASTVisitor *visitor);
       
   455     virtual bool match0(AST *, ASTMatcher *);
       
   456 };
       
   457 
       
   458 class CPLUSPLUS_EXPORT TypeofSpecifierAST: public SpecifierAST
       
   459 {
       
   460 public:
       
   461     unsigned typeof_token;
       
   462     unsigned lparen_token;
       
   463     ExpressionAST *expression;
       
   464     unsigned rparen_token;
       
   465 
       
   466 public:
       
   467     virtual TypeofSpecifierAST *asTypeofSpecifier() { return this; }
       
   468 
       
   469     virtual unsigned firstToken() const;
       
   470     virtual unsigned lastToken() const;
       
   471 
       
   472     virtual TypeofSpecifierAST *clone(MemoryPool *pool) const;
       
   473 
       
   474 protected:
       
   475     virtual void accept0(ASTVisitor *visitor);
       
   476     virtual bool match0(AST *, ASTMatcher *);
       
   477 };
       
   478 
       
   479 class CPLUSPLUS_EXPORT DeclaratorAST: public AST
       
   480 {
       
   481 public:
       
   482     SpecifierListAST *attribute_list;
       
   483     PtrOperatorListAST *ptr_operator_list;
       
   484     CoreDeclaratorAST *core_declarator;
       
   485     PostfixDeclaratorListAST *postfix_declarator_list;
       
   486     SpecifierListAST *post_attribute_list;
       
   487     unsigned equals_token;
       
   488     ExpressionAST *initializer;
       
   489 
       
   490 public:
       
   491     virtual DeclaratorAST *asDeclarator() { return this; }
       
   492 
       
   493     virtual unsigned firstToken() const;
       
   494     virtual unsigned lastToken() const;
       
   495 
       
   496     virtual DeclaratorAST *clone(MemoryPool *pool) const;
       
   497 
       
   498 protected:
       
   499     virtual void accept0(ASTVisitor *visitor);
       
   500     virtual bool match0(AST *, ASTMatcher *);
       
   501 };
       
   502 
       
   503 class CPLUSPLUS_EXPORT SimpleDeclarationAST: public DeclarationAST
       
   504 {
       
   505 public:
       
   506     unsigned qt_invokable_token;
       
   507     SpecifierListAST *decl_specifier_list;
       
   508     DeclaratorListAST *declarator_list;
       
   509     unsigned semicolon_token;
       
   510 
       
   511 public:
       
   512     List<Declaration *> *symbols;
       
   513 
       
   514 public:
       
   515     virtual SimpleDeclarationAST *asSimpleDeclaration() { return this; }
       
   516 
       
   517     virtual unsigned firstToken() const;
       
   518     virtual unsigned lastToken() const;
       
   519 
       
   520     virtual SimpleDeclarationAST *clone(MemoryPool *pool) const;
       
   521 
       
   522 protected:
       
   523     virtual void accept0(ASTVisitor *visitor);
       
   524     virtual bool match0(AST *, ASTMatcher *);
       
   525 };
       
   526 
       
   527 class CPLUSPLUS_EXPORT EmptyDeclarationAST: public DeclarationAST
       
   528 {
       
   529 public:
       
   530     unsigned semicolon_token;
       
   531 
       
   532 public:
       
   533     virtual EmptyDeclarationAST *asEmptyDeclaration() { return this; }
       
   534 
       
   535     virtual unsigned firstToken() const;
       
   536     virtual unsigned lastToken() const;
       
   537 
       
   538     virtual EmptyDeclarationAST *clone(MemoryPool *pool) const;
       
   539 
       
   540 protected:
       
   541     virtual void accept0(ASTVisitor *visitor);
       
   542     virtual bool match0(AST *, ASTMatcher *);
       
   543 };
       
   544 
       
   545 class CPLUSPLUS_EXPORT AccessDeclarationAST: public DeclarationAST
       
   546 {
       
   547 public:
       
   548     unsigned access_specifier_token;
       
   549     unsigned slots_token;
       
   550     unsigned colon_token;
       
   551 
       
   552 public:
       
   553     virtual AccessDeclarationAST *asAccessDeclaration() { return this; }
       
   554 
       
   555     virtual unsigned firstToken() const;
       
   556     virtual unsigned lastToken() const;
       
   557 
       
   558     virtual AccessDeclarationAST *clone(MemoryPool *pool) const;
       
   559 
       
   560 protected:
       
   561     virtual void accept0(ASTVisitor *visitor);
       
   562     virtual bool match0(AST *, ASTMatcher *);
       
   563 };
       
   564 
       
   565 #ifdef ICHECK_BUILD
       
   566 class CPLUSPLUS_EXPORT QPropertyDeclarationAST: public DeclarationAST
       
   567 {
       
   568     /*
       
   569     Q_PROPERTY(type name
       
   570             READ getFunction
       
   571             [WRITE setFunction]
       
   572             [RESET resetFunction]
       
   573             [NOTIFY notifySignal]
       
   574             [DESIGNABLE bool]
       
   575             [SCRIPTABLE bool]
       
   576             [STORED bool]
       
   577             [USER bool]
       
   578             [CONSTANT]
       
   579             [FINAL])*/
       
   580 public:
       
   581     unsigned property_specifier_token;
       
   582     unsigned lparen_token;
       
   583     unsigned type_token;
       
   584     unsigned type_name_token;
       
   585     unsigned read_token;
       
   586     unsigned read_function_token;
       
   587     unsigned write_token;
       
   588     unsigned write_function_token;
       
   589     unsigned reset_token;
       
   590     unsigned reset_function_token;
       
   591     unsigned notify_token;
       
   592     unsigned notify_function_token;
       
   593     unsigned rparen_token;
       
   594 
       
   595 public:
       
   596     virtual QPropertyDeclarationAST *asQPropertyDeclarationAST() { return this; }
       
   597 
       
   598     virtual unsigned firstToken() const;
       
   599     virtual unsigned lastToken() const;
       
   600 
       
   601     virtual QPropertyDeclarationAST *clone(MemoryPool *pool) const;
       
   602 
       
   603 protected:
       
   604     virtual void accept0(ASTVisitor *visitor);
       
   605     virtual bool match0(AST *, ASTMatcher *);
       
   606 };
       
   607 
       
   608 class CPLUSPLUS_EXPORT QEnumDeclarationAST: public DeclarationAST
       
   609 {
       
   610     /*Q_ENUMS(enum1, enum2)*/
       
   611 public:
       
   612     unsigned enum_specifier_token;
       
   613     unsigned lparen_token;
       
   614     unsigned rparen_token;
       
   615     EnumeratorListAST *enumerator_list;
       
   616 
       
   617 public:
       
   618     virtual QEnumDeclarationAST *asQEnumDeclarationAST() { return this; }
       
   619 
       
   620     virtual unsigned firstToken() const;
       
   621     virtual unsigned lastToken() const;
       
   622 
       
   623     virtual QEnumDeclarationAST *clone(MemoryPool *pool) const;
       
   624 
       
   625 protected:
       
   626     virtual void accept0(ASTVisitor *visitor);
       
   627     virtual bool match0(AST *, ASTMatcher *);
       
   628 };
       
   629 
       
   630 class CPLUSPLUS_EXPORT QFlagsDeclarationAST: public DeclarationAST
       
   631 {
       
   632     /*Q_FLAGS(enum1 enum2 flags1 ...)*/
       
   633 public:
       
   634     unsigned flags_specifier_token;
       
   635     unsigned lparen_token;
       
   636     unsigned rparen_token;
       
   637     EnumeratorListAST *enumerator_list;
       
   638 
       
   639 public:
       
   640     virtual QFlagsDeclarationAST *asQFlagsDeclarationAST() { return this; }
       
   641 
       
   642     virtual unsigned firstToken() const;
       
   643     virtual unsigned lastToken() const;
       
   644 
       
   645     virtual QFlagsDeclarationAST *clone(MemoryPool *pool) const;
       
   646 
       
   647 protected:
       
   648     virtual void accept0(ASTVisitor *visitor);
       
   649     virtual bool match0(AST *, ASTMatcher *);
       
   650 };
       
   651 
       
   652 class CPLUSPLUS_EXPORT QDeclareFlagsDeclarationAST: public DeclarationAST
       
   653 {
       
   654     /*Q_DECLARE_FLAGS(flag enum)*/
       
   655 public:
       
   656     unsigned declareflags_specifier_token;
       
   657     unsigned lparen_token;
       
   658     unsigned flag_token;
       
   659     unsigned enum_token;
       
   660     unsigned rparen_token;
       
   661 
       
   662 public:
       
   663     virtual QDeclareFlagsDeclarationAST *asQDeclareFlagsDeclarationAST() { return this; }
       
   664 
       
   665     virtual unsigned firstToken() const;
       
   666     virtual unsigned lastToken() const;
       
   667 
       
   668     virtual QDeclareFlagsDeclarationAST *clone(MemoryPool *pool) const;
       
   669 
       
   670 protected:
       
   671     virtual void accept0(ASTVisitor *visitor);
       
   672     virtual bool match0(AST *, ASTMatcher *);
       
   673 };
       
   674 #endif
       
   675 
       
   676 class CPLUSPLUS_EXPORT AsmDefinitionAST: public DeclarationAST
       
   677 {
       
   678 public:
       
   679     unsigned asm_token;
       
   680     unsigned volatile_token;
       
   681     unsigned lparen_token;
       
   682     // ### string literals
       
   683     // ### asm operand list
       
   684     unsigned rparen_token;
       
   685     unsigned semicolon_token;
       
   686 
       
   687 public:
       
   688     virtual AsmDefinitionAST *asAsmDefinition() { return this; }
       
   689 
       
   690     virtual unsigned firstToken() const;
       
   691     virtual unsigned lastToken() const;
       
   692 
       
   693     virtual AsmDefinitionAST *clone(MemoryPool *pool) const;
       
   694 
       
   695 protected:
       
   696     virtual void accept0(ASTVisitor *visitor);
       
   697     virtual bool match0(AST *, ASTMatcher *);
       
   698 };
       
   699 
       
   700 class CPLUSPLUS_EXPORT BaseSpecifierAST: public AST
       
   701 {
       
   702 public:
       
   703     unsigned virtual_token;
       
   704     unsigned access_specifier_token;
       
   705     NameAST *name;
       
   706 
       
   707 public: // annotations
       
   708     BaseClass *symbol;
       
   709 
       
   710 public:
       
   711     virtual BaseSpecifierAST *asBaseSpecifier() { return this; }
       
   712 
       
   713     virtual unsigned firstToken() const;
       
   714     virtual unsigned lastToken() const;
       
   715 
       
   716     virtual BaseSpecifierAST *clone(MemoryPool *pool) const;
       
   717 
       
   718 protected:
       
   719     virtual void accept0(ASTVisitor *visitor);
       
   720     virtual bool match0(AST *, ASTMatcher *);
       
   721 };
       
   722 
       
   723 class CPLUSPLUS_EXPORT CompoundLiteralAST: public ExpressionAST
       
   724 {
       
   725 public:
       
   726     unsigned lparen_token;
       
   727     ExpressionAST *type_id;
       
   728     unsigned rparen_token;
       
   729     ExpressionAST *initializer;
       
   730 
       
   731 public:
       
   732     virtual CompoundLiteralAST *asCompoundLiteral() { return this; }
       
   733 
       
   734     virtual unsigned firstToken() const;
       
   735     virtual unsigned lastToken() const;
       
   736 
       
   737     virtual CompoundLiteralAST *clone(MemoryPool *pool) const;
       
   738 
       
   739 protected:
       
   740     virtual void accept0(ASTVisitor *visitor);
       
   741     virtual bool match0(AST *, ASTMatcher *);
       
   742 };
       
   743 
       
   744 class CPLUSPLUS_EXPORT QtMethodAST: public ExpressionAST
       
   745 {
       
   746 public:
       
   747     unsigned method_token;
       
   748     unsigned lparen_token;
       
   749     DeclaratorAST *declarator;
       
   750     unsigned rparen_token;
       
   751 
       
   752 public:
       
   753     virtual QtMethodAST *asQtMethod() { return this; }
       
   754 
       
   755     virtual unsigned firstToken() const;
       
   756     virtual unsigned lastToken() const;
       
   757 
       
   758     virtual QtMethodAST *clone(MemoryPool *pool) const;
       
   759 
       
   760 protected:
       
   761     virtual void accept0(ASTVisitor *visitor);
       
   762     virtual bool match0(AST *, ASTMatcher *);
       
   763 };
       
   764 
       
   765 class CPLUSPLUS_EXPORT QtMemberDeclarationAST: public StatementAST
       
   766 {
       
   767 public:
       
   768     unsigned q_token;
       
   769     unsigned lparen_token;
       
   770     ExpressionAST *type_id;
       
   771     unsigned rparen_token;
       
   772 
       
   773 public:
       
   774     virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return this; }
       
   775 
       
   776     virtual unsigned firstToken() const;
       
   777     virtual unsigned lastToken() const;
       
   778 
       
   779     virtual QtMemberDeclarationAST *clone(MemoryPool *pool) const;
       
   780 
       
   781 protected:
       
   782     virtual void accept0(ASTVisitor *visitor);
       
   783     virtual bool match0(AST *, ASTMatcher *);
       
   784 };
       
   785 
       
   786 class CPLUSPLUS_EXPORT BinaryExpressionAST: public ExpressionAST
       
   787 {
       
   788 public:
       
   789     ExpressionAST *left_expression;
       
   790     unsigned binary_op_token;
       
   791     ExpressionAST *right_expression;
       
   792 
       
   793 public:
       
   794     virtual BinaryExpressionAST *asBinaryExpression() { return this; }
       
   795 
       
   796     virtual unsigned firstToken() const;
       
   797     virtual unsigned lastToken() const;
       
   798 
       
   799     virtual BinaryExpressionAST *clone(MemoryPool *pool) const;
       
   800 
       
   801 protected:
       
   802     virtual void accept0(ASTVisitor *visitor);
       
   803     virtual bool match0(AST *, ASTMatcher *);
       
   804 };
       
   805 
       
   806 class CPLUSPLUS_EXPORT CastExpressionAST: public ExpressionAST
       
   807 {
       
   808 public:
       
   809     unsigned lparen_token;
       
   810     ExpressionAST *type_id;
       
   811     unsigned rparen_token;
       
   812     ExpressionAST *expression;
       
   813 
       
   814 public:
       
   815     virtual CastExpressionAST *asCastExpression() { return this; }
       
   816 
       
   817     virtual unsigned firstToken() const;
       
   818     virtual unsigned lastToken() const;
       
   819 
       
   820     virtual CastExpressionAST *clone(MemoryPool *pool) const;
       
   821 
       
   822 protected:
       
   823     virtual void accept0(ASTVisitor *visitor);
       
   824     virtual bool match0(AST *, ASTMatcher *);
       
   825 };
       
   826 
       
   827 class CPLUSPLUS_EXPORT ClassSpecifierAST: public SpecifierAST
       
   828 {
       
   829 public:
       
   830     unsigned classkey_token;
       
   831     SpecifierListAST *attribute_list;
       
   832     NameAST *name;
       
   833     unsigned colon_token;
       
   834     BaseSpecifierListAST *base_clause_list;
       
   835     unsigned lbrace_token;
       
   836     DeclarationListAST *member_specifier_list;
       
   837     unsigned rbrace_token;
       
   838 
       
   839 public: // annotations
       
   840     Class *symbol;
       
   841 
       
   842 public:
       
   843     virtual ClassSpecifierAST *asClassSpecifier() { return this; }
       
   844 
       
   845     virtual unsigned firstToken() const;
       
   846     virtual unsigned lastToken() const;
       
   847 
       
   848     virtual ClassSpecifierAST *clone(MemoryPool *pool) const;
       
   849 
       
   850 protected:
       
   851     virtual void accept0(ASTVisitor *visitor);
       
   852     virtual bool match0(AST *, ASTMatcher *);
       
   853 };
       
   854 
       
   855 class CPLUSPLUS_EXPORT CaseStatementAST: public StatementAST
       
   856 {
       
   857 public:
       
   858     unsigned case_token;
       
   859     ExpressionAST *expression;
       
   860     unsigned colon_token;
       
   861     StatementAST *statement;
       
   862 
       
   863 public:
       
   864     virtual CaseStatementAST *asCaseStatement() { return this; }
       
   865 
       
   866     virtual unsigned firstToken() const;
       
   867     virtual unsigned lastToken() const;
       
   868 
       
   869     virtual CaseStatementAST *clone(MemoryPool *pool) const;
       
   870 
       
   871 protected:
       
   872     virtual void accept0(ASTVisitor *visitor);
       
   873     virtual bool match0(AST *, ASTMatcher *);
       
   874 };
       
   875 
       
   876 class CPLUSPLUS_EXPORT CompoundStatementAST: public StatementAST
       
   877 {
       
   878 public:
       
   879     unsigned lbrace_token;
       
   880     StatementListAST *statement_list;
       
   881     unsigned rbrace_token;
       
   882 
       
   883 public: // annotations
       
   884     Block *symbol;
       
   885 
       
   886 public:
       
   887     virtual CompoundStatementAST *asCompoundStatement() { return this; }
       
   888 
       
   889     virtual unsigned firstToken() const;
       
   890     virtual unsigned lastToken() const;
       
   891 
       
   892     virtual CompoundStatementAST *clone(MemoryPool *pool) const;
       
   893 
       
   894 protected:
       
   895     virtual void accept0(ASTVisitor *visitor);
       
   896     virtual bool match0(AST *, ASTMatcher *);
       
   897 };
       
   898 
       
   899 class CPLUSPLUS_EXPORT ConditionAST: public ExpressionAST
       
   900 {
       
   901 public:
       
   902     SpecifierListAST *type_specifier_list;
       
   903     DeclaratorAST *declarator;
       
   904 
       
   905 public:
       
   906     virtual ConditionAST *asCondition() { return this; }
       
   907 
       
   908     virtual unsigned firstToken() const;
       
   909     virtual unsigned lastToken() const;
       
   910 
       
   911     virtual ConditionAST *clone(MemoryPool *pool) const;
       
   912 
       
   913 protected:
       
   914     virtual void accept0(ASTVisitor *visitor);
       
   915     virtual bool match0(AST *, ASTMatcher *);
       
   916 };
       
   917 
       
   918 class CPLUSPLUS_EXPORT ConditionalExpressionAST: public ExpressionAST
       
   919 {
       
   920 public:
       
   921     ExpressionAST *condition;
       
   922     unsigned question_token;
       
   923     ExpressionAST *left_expression;
       
   924     unsigned colon_token;
       
   925     ExpressionAST *right_expression;
       
   926 
       
   927 public:
       
   928     virtual ConditionalExpressionAST *asConditionalExpression() { return this; }
       
   929 
       
   930     virtual unsigned firstToken() const;
       
   931     virtual unsigned lastToken() const;
       
   932 
       
   933     virtual ConditionalExpressionAST *clone(MemoryPool *pool) const;
       
   934 
       
   935 protected:
       
   936     virtual void accept0(ASTVisitor *visitor);
       
   937     virtual bool match0(AST *, ASTMatcher *);
       
   938 };
       
   939 
       
   940 class CPLUSPLUS_EXPORT CppCastExpressionAST: public ExpressionAST
       
   941 {
       
   942 public:
       
   943     unsigned cast_token;
       
   944     unsigned less_token;
       
   945     ExpressionAST *type_id;
       
   946     unsigned greater_token;
       
   947     unsigned lparen_token;
       
   948     ExpressionAST *expression;
       
   949     unsigned rparen_token;
       
   950 
       
   951 public:
       
   952     virtual CppCastExpressionAST *asCppCastExpression() { return this; }
       
   953 
       
   954     virtual unsigned firstToken() const;
       
   955     virtual unsigned lastToken() const;
       
   956 
       
   957     virtual CppCastExpressionAST *clone(MemoryPool *pool) const;
       
   958 
       
   959 protected:
       
   960     virtual void accept0(ASTVisitor *visitor);
       
   961     virtual bool match0(AST *, ASTMatcher *);
       
   962 };
       
   963 
       
   964 class CPLUSPLUS_EXPORT CtorInitializerAST: public AST
       
   965 {
       
   966 public:
       
   967     unsigned colon_token;
       
   968     MemInitializerListAST *member_initializer_list;
       
   969 
       
   970 public:
       
   971     virtual CtorInitializerAST *asCtorInitializer() { return this; }
       
   972 
       
   973     virtual unsigned firstToken() const;
       
   974     virtual unsigned lastToken() const;
       
   975 
       
   976     virtual CtorInitializerAST *clone(MemoryPool *pool) const;
       
   977 
       
   978 protected:
       
   979     virtual void accept0(ASTVisitor *visitor);
       
   980     virtual bool match0(AST *, ASTMatcher *);
       
   981 };
       
   982 
       
   983 class CPLUSPLUS_EXPORT DeclarationStatementAST: public StatementAST
       
   984 {
       
   985 public:
       
   986     DeclarationAST *declaration;
       
   987 
       
   988 public:
       
   989     virtual DeclarationStatementAST *asDeclarationStatement() { return this; }
       
   990 
       
   991     virtual unsigned firstToken() const;
       
   992     virtual unsigned lastToken() const;
       
   993 
       
   994     virtual DeclarationStatementAST *clone(MemoryPool *pool) const;
       
   995 
       
   996 protected:
       
   997     virtual void accept0(ASTVisitor *visitor);
       
   998     virtual bool match0(AST *, ASTMatcher *);
       
   999 };
       
  1000 
       
  1001 class CPLUSPLUS_EXPORT DeclaratorIdAST: public CoreDeclaratorAST
       
  1002 {
       
  1003 public:
       
  1004     NameAST *name;
       
  1005 
       
  1006 public:
       
  1007     virtual DeclaratorIdAST *asDeclaratorId() { return this; }
       
  1008 
       
  1009     virtual unsigned firstToken() const;
       
  1010     virtual unsigned lastToken() const;
       
  1011 
       
  1012     virtual DeclaratorIdAST *clone(MemoryPool *pool) const;
       
  1013 
       
  1014 protected:
       
  1015     virtual void accept0(ASTVisitor *visitor);
       
  1016     virtual bool match0(AST *, ASTMatcher *);
       
  1017 };
       
  1018 
       
  1019 class CPLUSPLUS_EXPORT NestedDeclaratorAST: public CoreDeclaratorAST
       
  1020 {
       
  1021 public:
       
  1022     unsigned lparen_token;
       
  1023     DeclaratorAST *declarator;
       
  1024     unsigned rparen_token;
       
  1025 
       
  1026 public:
       
  1027     virtual NestedDeclaratorAST *asNestedDeclarator() { return this; }
       
  1028 
       
  1029     virtual unsigned firstToken() const;
       
  1030     virtual unsigned lastToken() const;
       
  1031 
       
  1032     virtual NestedDeclaratorAST *clone(MemoryPool *pool) const;
       
  1033 
       
  1034 protected:
       
  1035     virtual void accept0(ASTVisitor *visitor);
       
  1036     virtual bool match0(AST *, ASTMatcher *);
       
  1037 };
       
  1038 
       
  1039 class CPLUSPLUS_EXPORT FunctionDeclaratorAST: public PostfixDeclaratorAST
       
  1040 {
       
  1041 public:
       
  1042     unsigned lparen_token;
       
  1043     ParameterDeclarationClauseAST *parameters;
       
  1044     unsigned rparen_token;
       
  1045     SpecifierListAST *cv_qualifier_list;
       
  1046     ExceptionSpecificationAST *exception_specification;
       
  1047     ExpressionAST *as_cpp_initializer;
       
  1048 
       
  1049 public: // annotations
       
  1050     Function *symbol;
       
  1051 
       
  1052 public:
       
  1053     virtual FunctionDeclaratorAST *asFunctionDeclarator() { return this; }
       
  1054 
       
  1055     virtual unsigned firstToken() const;
       
  1056     virtual unsigned lastToken() const;
       
  1057 
       
  1058     virtual FunctionDeclaratorAST *clone(MemoryPool *pool) const;
       
  1059 
       
  1060 protected:
       
  1061     virtual void accept0(ASTVisitor *visitor);
       
  1062     virtual bool match0(AST *, ASTMatcher *);
       
  1063 };
       
  1064 
       
  1065 class CPLUSPLUS_EXPORT ArrayDeclaratorAST: public PostfixDeclaratorAST
       
  1066 {
       
  1067 public:
       
  1068     unsigned lbracket_token;
       
  1069     ExpressionAST *expression;
       
  1070     unsigned rbracket_token;
       
  1071 
       
  1072 public:
       
  1073     virtual ArrayDeclaratorAST *asArrayDeclarator() { return this; }
       
  1074 
       
  1075     virtual unsigned firstToken() const;
       
  1076     virtual unsigned lastToken() const;
       
  1077 
       
  1078     virtual ArrayDeclaratorAST *clone(MemoryPool *pool) const;
       
  1079 
       
  1080 protected:
       
  1081     virtual void accept0(ASTVisitor *visitor);
       
  1082     virtual bool match0(AST *, ASTMatcher *);
       
  1083 };
       
  1084 
       
  1085 class CPLUSPLUS_EXPORT DeleteExpressionAST: public ExpressionAST
       
  1086 {
       
  1087 public:
       
  1088     unsigned scope_token;
       
  1089     unsigned delete_token;
       
  1090     unsigned lbracket_token;
       
  1091     unsigned rbracket_token;
       
  1092     ExpressionAST *expression;
       
  1093 
       
  1094 public:
       
  1095     virtual DeleteExpressionAST *asDeleteExpression() { return this; }
       
  1096 
       
  1097     virtual unsigned firstToken() const;
       
  1098     virtual unsigned lastToken() const;
       
  1099 
       
  1100     virtual DeleteExpressionAST *clone(MemoryPool *pool) const;
       
  1101 
       
  1102 protected:
       
  1103     virtual void accept0(ASTVisitor *visitor);
       
  1104     virtual bool match0(AST *, ASTMatcher *);
       
  1105 };
       
  1106 
       
  1107 class CPLUSPLUS_EXPORT DoStatementAST: public StatementAST
       
  1108 {
       
  1109 public:
       
  1110     unsigned do_token;
       
  1111     StatementAST *statement;
       
  1112     unsigned while_token;
       
  1113     unsigned lparen_token;
       
  1114     ExpressionAST *expression;
       
  1115     unsigned rparen_token;
       
  1116     unsigned semicolon_token;
       
  1117 
       
  1118 public:
       
  1119     virtual DoStatementAST *asDoStatement() { return this; }
       
  1120 
       
  1121     virtual unsigned firstToken() const;
       
  1122     virtual unsigned lastToken() const;
       
  1123 
       
  1124     virtual DoStatementAST *clone(MemoryPool *pool) const;
       
  1125 
       
  1126 protected:
       
  1127     virtual void accept0(ASTVisitor *visitor);
       
  1128     virtual bool match0(AST *, ASTMatcher *);
       
  1129 };
       
  1130 
       
  1131 class CPLUSPLUS_EXPORT NamedTypeSpecifierAST: public SpecifierAST
       
  1132 {
       
  1133 public:
       
  1134     NameAST *name;
       
  1135 
       
  1136 public:
       
  1137     virtual NamedTypeSpecifierAST *asNamedTypeSpecifier() { return this; }
       
  1138 
       
  1139     virtual unsigned firstToken() const;
       
  1140     virtual unsigned lastToken() const;
       
  1141 
       
  1142     virtual NamedTypeSpecifierAST *clone(MemoryPool *pool) const;
       
  1143 
       
  1144 protected:
       
  1145     virtual void accept0(ASTVisitor *visitor);
       
  1146     virtual bool match0(AST *, ASTMatcher *);
       
  1147 };
       
  1148 
       
  1149 class CPLUSPLUS_EXPORT ElaboratedTypeSpecifierAST: public SpecifierAST
       
  1150 {
       
  1151 public:
       
  1152     unsigned classkey_token;
       
  1153     NameAST *name;
       
  1154 
       
  1155 public:
       
  1156     virtual ElaboratedTypeSpecifierAST *asElaboratedTypeSpecifier() { return this; }
       
  1157 
       
  1158     virtual unsigned firstToken() const;
       
  1159     virtual unsigned lastToken() const;
       
  1160 
       
  1161     virtual ElaboratedTypeSpecifierAST *clone(MemoryPool *pool) const;
       
  1162 
       
  1163 protected:
       
  1164     virtual void accept0(ASTVisitor *visitor);
       
  1165     virtual bool match0(AST *, ASTMatcher *);
       
  1166 };
       
  1167 
       
  1168 class CPLUSPLUS_EXPORT EnumSpecifierAST: public SpecifierAST
       
  1169 {
       
  1170 public:
       
  1171     unsigned enum_token;
       
  1172     NameAST *name;
       
  1173     unsigned lbrace_token;
       
  1174     EnumeratorListAST *enumerator_list;
       
  1175     unsigned rbrace_token;
       
  1176 
       
  1177 public:
       
  1178     virtual EnumSpecifierAST *asEnumSpecifier() { return this; }
       
  1179 
       
  1180     virtual unsigned firstToken() const;
       
  1181     virtual unsigned lastToken() const;
       
  1182 
       
  1183     virtual EnumSpecifierAST *clone(MemoryPool *pool) const;
       
  1184 
       
  1185 protected:
       
  1186     virtual void accept0(ASTVisitor *visitor);
       
  1187     virtual bool match0(AST *, ASTMatcher *);
       
  1188 };
       
  1189 
       
  1190 class CPLUSPLUS_EXPORT EnumeratorAST: public AST
       
  1191 {
       
  1192 public:
       
  1193     unsigned identifier_token;
       
  1194     unsigned equal_token;
       
  1195     ExpressionAST *expression;
       
  1196 
       
  1197 public:
       
  1198     virtual EnumeratorAST *asEnumerator() { return this; }
       
  1199 
       
  1200     virtual unsigned firstToken() const;
       
  1201     virtual unsigned lastToken() const;
       
  1202 
       
  1203     virtual EnumeratorAST *clone(MemoryPool *pool) const;
       
  1204 
       
  1205 protected:
       
  1206     virtual void accept0(ASTVisitor *visitor);
       
  1207     virtual bool match0(AST *, ASTMatcher *);
       
  1208 };
       
  1209 
       
  1210 class CPLUSPLUS_EXPORT ExceptionDeclarationAST: public DeclarationAST
       
  1211 {
       
  1212 public:
       
  1213     SpecifierListAST *type_specifier_list;
       
  1214     DeclaratorAST *declarator;
       
  1215     unsigned dot_dot_dot_token;
       
  1216 
       
  1217 public:
       
  1218     virtual ExceptionDeclarationAST *asExceptionDeclaration() { return this; }
       
  1219 
       
  1220     virtual unsigned firstToken() const;
       
  1221     virtual unsigned lastToken() const;
       
  1222 
       
  1223     virtual ExceptionDeclarationAST *clone(MemoryPool *pool) const;
       
  1224 
       
  1225 protected:
       
  1226     virtual void accept0(ASTVisitor *visitor);
       
  1227     virtual bool match0(AST *, ASTMatcher *);
       
  1228 };
       
  1229 
       
  1230 class CPLUSPLUS_EXPORT ExceptionSpecificationAST: public AST
       
  1231 {
       
  1232 public:
       
  1233     unsigned throw_token;
       
  1234     unsigned lparen_token;
       
  1235     unsigned dot_dot_dot_token;
       
  1236     ExpressionListAST *type_id_list;
       
  1237     unsigned rparen_token;
       
  1238 
       
  1239 public:
       
  1240     virtual ExceptionSpecificationAST *asExceptionSpecification() { return this; }
       
  1241 
       
  1242     virtual unsigned firstToken() const;
       
  1243     virtual unsigned lastToken() const;
       
  1244 
       
  1245     virtual ExceptionSpecificationAST *clone(MemoryPool *pool) const;
       
  1246 
       
  1247 protected:
       
  1248     virtual void accept0(ASTVisitor *visitor);
       
  1249     virtual bool match0(AST *, ASTMatcher *);
       
  1250 };
       
  1251 
       
  1252 class CPLUSPLUS_EXPORT ExpressionOrDeclarationStatementAST: public StatementAST
       
  1253 {
       
  1254 public:
       
  1255     StatementAST *expression;
       
  1256     StatementAST *declaration;
       
  1257 
       
  1258 public:
       
  1259     virtual ExpressionOrDeclarationStatementAST *asExpressionOrDeclarationStatement() { return this; }
       
  1260 
       
  1261     virtual unsigned firstToken() const;
       
  1262     virtual unsigned lastToken() const;
       
  1263 
       
  1264     virtual ExpressionOrDeclarationStatementAST *clone(MemoryPool *pool) const;
       
  1265 
       
  1266 protected:
       
  1267     virtual void accept0(ASTVisitor *visitor);
       
  1268     virtual bool match0(AST *, ASTMatcher *);
       
  1269 };
       
  1270 
       
  1271 class CPLUSPLUS_EXPORT ExpressionStatementAST: public StatementAST
       
  1272 {
       
  1273 public:
       
  1274     ExpressionAST *expression;
       
  1275     unsigned semicolon_token;
       
  1276 
       
  1277 public:
       
  1278     virtual ExpressionStatementAST *asExpressionStatement() { return this; }
       
  1279 
       
  1280     virtual unsigned firstToken() const;
       
  1281     virtual unsigned lastToken() const;
       
  1282 
       
  1283     virtual ExpressionStatementAST *clone(MemoryPool *pool) const;;
       
  1284 
       
  1285 protected:
       
  1286     virtual void accept0(ASTVisitor *visitor);
       
  1287     virtual bool match0(AST *, ASTMatcher *);
       
  1288 };
       
  1289 
       
  1290 class CPLUSPLUS_EXPORT FunctionDefinitionAST: public DeclarationAST
       
  1291 {
       
  1292 public:
       
  1293     unsigned qt_invokable_token;
       
  1294     SpecifierListAST *decl_specifier_list;
       
  1295     DeclaratorAST *declarator;
       
  1296     CtorInitializerAST *ctor_initializer;
       
  1297     StatementAST *function_body;
       
  1298 
       
  1299 public: // annotations
       
  1300     Function *symbol;
       
  1301 
       
  1302 public:
       
  1303     virtual FunctionDefinitionAST *asFunctionDefinition() { return this; }
       
  1304 
       
  1305     virtual unsigned firstToken() const;
       
  1306     virtual unsigned lastToken() const;
       
  1307 
       
  1308     virtual FunctionDefinitionAST *clone(MemoryPool *pool) const;
       
  1309 
       
  1310 protected:
       
  1311     virtual void accept0(ASTVisitor *visitor);
       
  1312     virtual bool match0(AST *, ASTMatcher *);
       
  1313 };
       
  1314 
       
  1315 class CPLUSPLUS_EXPORT ForeachStatementAST: public StatementAST
       
  1316 {
       
  1317 public:
       
  1318     unsigned foreach_token;
       
  1319     unsigned lparen_token;
       
  1320     // declaration
       
  1321     SpecifierListAST *type_specifier_list;
       
  1322     DeclaratorAST *declarator;
       
  1323     // or an expression
       
  1324     ExpressionAST *initializer;
       
  1325     unsigned comma_token;
       
  1326     ExpressionAST *expression;
       
  1327     unsigned rparen_token;
       
  1328     StatementAST *statement;
       
  1329 
       
  1330 public: // annotations
       
  1331     Block *symbol;
       
  1332 
       
  1333 public:
       
  1334     virtual ForeachStatementAST *asForeachStatement() { return this; }
       
  1335 
       
  1336     virtual unsigned firstToken() const;
       
  1337     virtual unsigned lastToken() const;
       
  1338 
       
  1339     virtual ForeachStatementAST *clone(MemoryPool *pool) const;
       
  1340 
       
  1341 protected:
       
  1342     virtual void accept0(ASTVisitor *visitor);
       
  1343     virtual bool match0(AST *, ASTMatcher *);
       
  1344 };
       
  1345 
       
  1346 class CPLUSPLUS_EXPORT ForStatementAST: public StatementAST
       
  1347 {
       
  1348 public:
       
  1349     unsigned for_token;
       
  1350     unsigned lparen_token;
       
  1351     StatementAST *initializer;
       
  1352     ExpressionAST *condition;
       
  1353     unsigned semicolon_token;
       
  1354     ExpressionAST *expression;
       
  1355     unsigned rparen_token;
       
  1356     StatementAST *statement;
       
  1357 
       
  1358 public: // annotations
       
  1359     Block *symbol;
       
  1360 
       
  1361 public:
       
  1362     virtual ForStatementAST *asForStatement() { return this; }
       
  1363 
       
  1364     virtual unsigned firstToken() const;
       
  1365     virtual unsigned lastToken() const;
       
  1366 
       
  1367     virtual ForStatementAST *clone(MemoryPool *pool) const;
       
  1368 
       
  1369 protected:
       
  1370     virtual void accept0(ASTVisitor *visitor);
       
  1371     virtual bool match0(AST *, ASTMatcher *);
       
  1372 };
       
  1373 
       
  1374 class CPLUSPLUS_EXPORT IfStatementAST: public StatementAST
       
  1375 {
       
  1376 public:
       
  1377     unsigned if_token;
       
  1378     unsigned lparen_token;
       
  1379     ExpressionAST *condition;
       
  1380     unsigned rparen_token;
       
  1381     StatementAST *statement;
       
  1382     unsigned else_token;
       
  1383     StatementAST *else_statement;
       
  1384 
       
  1385 public: // annotations
       
  1386     Block *symbol;
       
  1387 
       
  1388 public:
       
  1389     virtual IfStatementAST *asIfStatement() { return this; }
       
  1390 
       
  1391     virtual unsigned firstToken() const;
       
  1392     virtual unsigned lastToken() const;
       
  1393 
       
  1394     virtual IfStatementAST *clone(MemoryPool *pool) const;
       
  1395 
       
  1396 protected:
       
  1397     virtual void accept0(ASTVisitor *visitor);
       
  1398     virtual bool match0(AST *, ASTMatcher *);
       
  1399 };
       
  1400 
       
  1401 class CPLUSPLUS_EXPORT ArrayInitializerAST: public ExpressionAST
       
  1402 {
       
  1403 public:
       
  1404     unsigned lbrace_token;
       
  1405     ExpressionListAST *expression_list;
       
  1406     unsigned rbrace_token;
       
  1407 
       
  1408 public:
       
  1409     virtual ArrayInitializerAST *asArrayInitializer() { return this; }
       
  1410 
       
  1411     virtual unsigned firstToken() const;
       
  1412     virtual unsigned lastToken() const;
       
  1413 
       
  1414     virtual ArrayInitializerAST *clone(MemoryPool *pool) const;
       
  1415 
       
  1416 protected:
       
  1417     virtual void accept0(ASTVisitor *visitor);
       
  1418     virtual bool match0(AST *, ASTMatcher *);
       
  1419 };
       
  1420 
       
  1421 class CPLUSPLUS_EXPORT LabeledStatementAST: public StatementAST
       
  1422 {
       
  1423 public:
       
  1424     unsigned label_token;
       
  1425     unsigned colon_token;
       
  1426     StatementAST *statement;
       
  1427 
       
  1428 public:
       
  1429     virtual LabeledStatementAST *asLabeledStatement() { return this; }
       
  1430 
       
  1431     virtual unsigned firstToken() const;
       
  1432     virtual unsigned lastToken() const;
       
  1433 
       
  1434     virtual LabeledStatementAST *clone(MemoryPool *pool) const;
       
  1435 
       
  1436 protected:
       
  1437     virtual void accept0(ASTVisitor *visitor);
       
  1438     virtual bool match0(AST *, ASTMatcher *);
       
  1439 };
       
  1440 
       
  1441 class CPLUSPLUS_EXPORT LinkageBodyAST: public DeclarationAST
       
  1442 {
       
  1443 public:
       
  1444     unsigned lbrace_token;
       
  1445     DeclarationListAST *declaration_list;
       
  1446     unsigned rbrace_token;
       
  1447 
       
  1448 public:
       
  1449     virtual LinkageBodyAST *asLinkageBody() { return this; }
       
  1450     virtual unsigned firstToken() const;
       
  1451     virtual unsigned lastToken() const;
       
  1452 
       
  1453     virtual LinkageBodyAST *clone(MemoryPool *pool) const;
       
  1454 
       
  1455 protected:
       
  1456     virtual void accept0(ASTVisitor *visitor);
       
  1457     virtual bool match0(AST *, ASTMatcher *);
       
  1458 };
       
  1459 
       
  1460 class CPLUSPLUS_EXPORT LinkageSpecificationAST: public DeclarationAST
       
  1461 {
       
  1462 public:
       
  1463     unsigned extern_token;
       
  1464     unsigned extern_type_token;
       
  1465     DeclarationAST *declaration;
       
  1466 
       
  1467 public:
       
  1468     virtual LinkageSpecificationAST *asLinkageSpecification() { return this; }
       
  1469 
       
  1470     virtual unsigned firstToken() const;
       
  1471     virtual unsigned lastToken() const;
       
  1472 
       
  1473     virtual LinkageSpecificationAST *clone(MemoryPool *pool) const;
       
  1474 
       
  1475 protected:
       
  1476     virtual void accept0(ASTVisitor *visitor);
       
  1477     virtual bool match0(AST *, ASTMatcher *);
       
  1478 };
       
  1479 
       
  1480 class CPLUSPLUS_EXPORT MemInitializerAST: public AST
       
  1481 {
       
  1482 public:
       
  1483     NameAST *name;
       
  1484     unsigned lparen_token;
       
  1485     ExpressionListAST *expression_list;
       
  1486     unsigned rparen_token;
       
  1487 
       
  1488 public:
       
  1489     virtual MemInitializerAST *asMemInitializer() { return this; }
       
  1490 
       
  1491     virtual unsigned firstToken() const;
       
  1492     virtual unsigned lastToken() const;
       
  1493 
       
  1494     virtual MemInitializerAST *clone(MemoryPool *pool) const;
       
  1495 
       
  1496 protected:
       
  1497     virtual void accept0(ASTVisitor *visitor);
       
  1498     virtual bool match0(AST *, ASTMatcher *);
       
  1499 };
       
  1500 
       
  1501 class CPLUSPLUS_EXPORT NestedNameSpecifierAST: public AST
       
  1502 {
       
  1503 public:
       
  1504     NameAST *class_or_namespace_name;
       
  1505     unsigned scope_token;
       
  1506 
       
  1507 public:
       
  1508     virtual NestedNameSpecifierAST *asNestedNameSpecifier() { return this; }
       
  1509 
       
  1510     virtual unsigned firstToken() const;
       
  1511     virtual unsigned lastToken() const;
       
  1512 
       
  1513     virtual NestedNameSpecifierAST *clone(MemoryPool *pool) const;
       
  1514 
       
  1515 protected:
       
  1516     virtual void accept0(ASTVisitor *visitor);
       
  1517     virtual bool match0(AST *, ASTMatcher *);
       
  1518 };
       
  1519 
       
  1520 class CPLUSPLUS_EXPORT QualifiedNameAST: public NameAST
       
  1521 {
       
  1522 public:
       
  1523     unsigned global_scope_token;
       
  1524     NestedNameSpecifierListAST *nested_name_specifier_list;
       
  1525     NameAST *unqualified_name;
       
  1526 
       
  1527 public:
       
  1528     virtual QualifiedNameAST *asQualifiedName() { return this; }
       
  1529 
       
  1530     virtual unsigned firstToken() const;
       
  1531     virtual unsigned lastToken() const;
       
  1532 
       
  1533     virtual QualifiedNameAST *clone(MemoryPool *pool) const;
       
  1534 
       
  1535 protected:
       
  1536     virtual void accept0(ASTVisitor *visitor);
       
  1537     virtual bool match0(AST *, ASTMatcher *);
       
  1538 };
       
  1539 
       
  1540 class CPLUSPLUS_EXPORT OperatorFunctionIdAST: public NameAST
       
  1541 {
       
  1542 public:
       
  1543     unsigned operator_token;
       
  1544     OperatorAST *op;
       
  1545 
       
  1546 public:
       
  1547     virtual OperatorFunctionIdAST *asOperatorFunctionId() { return this; }
       
  1548 
       
  1549     virtual unsigned firstToken() const;
       
  1550     virtual unsigned lastToken() const;
       
  1551 
       
  1552     virtual OperatorFunctionIdAST *clone(MemoryPool *pool) const;
       
  1553 
       
  1554 protected:
       
  1555     virtual void accept0(ASTVisitor *visitor);
       
  1556     virtual bool match0(AST *, ASTMatcher *);
       
  1557 };
       
  1558 
       
  1559 class CPLUSPLUS_EXPORT ConversionFunctionIdAST: public NameAST
       
  1560 {
       
  1561 public:
       
  1562     unsigned operator_token;
       
  1563     SpecifierListAST *type_specifier_list;
       
  1564     PtrOperatorListAST *ptr_operator_list;
       
  1565 
       
  1566 public:
       
  1567     virtual ConversionFunctionIdAST *asConversionFunctionId() { return this; }
       
  1568 
       
  1569     virtual unsigned firstToken() const;
       
  1570     virtual unsigned lastToken() const;
       
  1571 
       
  1572     virtual ConversionFunctionIdAST *clone(MemoryPool *pool) const;
       
  1573 
       
  1574 protected:
       
  1575     virtual void accept0(ASTVisitor *visitor);
       
  1576     virtual bool match0(AST *, ASTMatcher *);
       
  1577 };
       
  1578 
       
  1579 class CPLUSPLUS_EXPORT SimpleNameAST: public NameAST
       
  1580 {
       
  1581 public:
       
  1582     unsigned identifier_token;
       
  1583 
       
  1584 public:
       
  1585     virtual SimpleNameAST *asSimpleName() { return this; }
       
  1586 
       
  1587     virtual unsigned firstToken() const;
       
  1588     virtual unsigned lastToken() const;
       
  1589 
       
  1590     virtual SimpleNameAST *clone(MemoryPool *pool) const;
       
  1591 
       
  1592 protected:
       
  1593     virtual void accept0(ASTVisitor *visitor);
       
  1594     virtual bool match0(AST *, ASTMatcher *);
       
  1595 };
       
  1596 
       
  1597 class CPLUSPLUS_EXPORT DestructorNameAST: public NameAST
       
  1598 {
       
  1599 public:
       
  1600     unsigned tilde_token;
       
  1601     unsigned identifier_token;
       
  1602 
       
  1603 public:
       
  1604     virtual DestructorNameAST *asDestructorName() { return this; }
       
  1605 
       
  1606     virtual unsigned firstToken() const;
       
  1607     virtual unsigned lastToken() const;
       
  1608 
       
  1609     virtual DestructorNameAST *clone(MemoryPool *pool) const;
       
  1610 
       
  1611 protected:
       
  1612     virtual void accept0(ASTVisitor *visitor);
       
  1613     virtual bool match0(AST *, ASTMatcher *);
       
  1614 };
       
  1615 
       
  1616 class CPLUSPLUS_EXPORT TemplateIdAST: public NameAST
       
  1617 {
       
  1618 public:
       
  1619     unsigned identifier_token;
       
  1620     unsigned less_token;
       
  1621     TemplateArgumentListAST *template_argument_list;
       
  1622     unsigned greater_token;
       
  1623 
       
  1624 public:
       
  1625     virtual TemplateIdAST *asTemplateId() { return this; }
       
  1626 
       
  1627     virtual unsigned firstToken() const;
       
  1628     virtual unsigned lastToken() const;
       
  1629 
       
  1630     virtual TemplateIdAST *clone(MemoryPool *pool) const;
       
  1631 
       
  1632 protected:
       
  1633     virtual void accept0(ASTVisitor *visitor);
       
  1634     virtual bool match0(AST *, ASTMatcher *);
       
  1635 };
       
  1636 
       
  1637 class CPLUSPLUS_EXPORT NamespaceAST: public DeclarationAST
       
  1638 {
       
  1639 public:
       
  1640     unsigned namespace_token;
       
  1641     unsigned identifier_token;
       
  1642     SpecifierListAST *attribute_list;
       
  1643     DeclarationAST *linkage_body;
       
  1644 
       
  1645 public: // annotations
       
  1646     Namespace *symbol;
       
  1647 
       
  1648 public:
       
  1649     virtual NamespaceAST *asNamespace() { return this; }
       
  1650 
       
  1651     virtual unsigned firstToken() const;
       
  1652     virtual unsigned lastToken() const;
       
  1653 
       
  1654     virtual NamespaceAST *clone(MemoryPool *pool) const;
       
  1655 
       
  1656 protected:
       
  1657     virtual void accept0(ASTVisitor *visitor);
       
  1658     virtual bool match0(AST *, ASTMatcher *);
       
  1659 };
       
  1660 
       
  1661 class CPLUSPLUS_EXPORT NamespaceAliasDefinitionAST: public DeclarationAST
       
  1662 {
       
  1663 public:
       
  1664     unsigned namespace_token;
       
  1665     unsigned namespace_name_token;
       
  1666     unsigned equal_token;
       
  1667     NameAST *name;
       
  1668     unsigned semicolon_token;
       
  1669 
       
  1670 public:
       
  1671     virtual NamespaceAliasDefinitionAST *asNamespaceAliasDefinition() { return this; }
       
  1672 
       
  1673     virtual unsigned firstToken() const;
       
  1674     virtual unsigned lastToken() const;
       
  1675 
       
  1676     virtual NamespaceAliasDefinitionAST *clone(MemoryPool *pool) const;
       
  1677 
       
  1678 protected:
       
  1679     virtual void accept0(ASTVisitor *visitor);
       
  1680     virtual bool match0(AST *, ASTMatcher *);
       
  1681 };
       
  1682 
       
  1683 class CPLUSPLUS_EXPORT NewPlacementAST: public AST
       
  1684 {
       
  1685 public:
       
  1686     unsigned lparen_token;
       
  1687     ExpressionListAST *expression_list;
       
  1688     unsigned rparen_token;
       
  1689 
       
  1690 public:
       
  1691     virtual NewPlacementAST *asNewPlacement() { return this; }
       
  1692 
       
  1693     virtual unsigned firstToken() const;
       
  1694     virtual unsigned lastToken() const;
       
  1695 
       
  1696     virtual NewPlacementAST *clone(MemoryPool *pool) const;
       
  1697 
       
  1698 protected:
       
  1699     virtual void accept0(ASTVisitor *visitor);
       
  1700     virtual bool match0(AST *, ASTMatcher *);
       
  1701 };
       
  1702 
       
  1703 class CPLUSPLUS_EXPORT NewArrayDeclaratorAST: public AST
       
  1704 {
       
  1705 public:
       
  1706     unsigned lbracket_token;
       
  1707     ExpressionAST *expression;
       
  1708     unsigned rbracket_token;
       
  1709 
       
  1710 public:
       
  1711     virtual NewArrayDeclaratorAST *asNewArrayDeclarator() { return this; }
       
  1712 
       
  1713     virtual unsigned firstToken() const;
       
  1714     virtual unsigned lastToken() const;
       
  1715 
       
  1716     virtual NewArrayDeclaratorAST *clone(MemoryPool *pool) const;
       
  1717 
       
  1718 protected:
       
  1719     virtual void accept0(ASTVisitor *visitor);
       
  1720     virtual bool match0(AST *, ASTMatcher *);
       
  1721 };
       
  1722 
       
  1723 class CPLUSPLUS_EXPORT NewExpressionAST: public ExpressionAST
       
  1724 {
       
  1725 public:
       
  1726     unsigned scope_token;
       
  1727     unsigned new_token;
       
  1728     NewPlacementAST *new_placement;
       
  1729 
       
  1730     unsigned lparen_token;
       
  1731     ExpressionAST *type_id;
       
  1732     unsigned rparen_token;
       
  1733 
       
  1734     NewTypeIdAST *new_type_id;
       
  1735 
       
  1736     NewInitializerAST *new_initializer;
       
  1737 
       
  1738 public:
       
  1739     virtual NewExpressionAST *asNewExpression() { return this; }
       
  1740 
       
  1741     virtual unsigned firstToken() const;
       
  1742     virtual unsigned lastToken() const;
       
  1743 
       
  1744     virtual NewExpressionAST *clone(MemoryPool *pool) const;
       
  1745 
       
  1746 protected:
       
  1747     virtual void accept0(ASTVisitor *visitor);
       
  1748     virtual bool match0(AST *, ASTMatcher *);
       
  1749 };
       
  1750 
       
  1751 class CPLUSPLUS_EXPORT NewInitializerAST: public AST
       
  1752 {
       
  1753 public:
       
  1754     unsigned lparen_token;
       
  1755     ExpressionAST *expression;
       
  1756     unsigned rparen_token;
       
  1757 
       
  1758 public:
       
  1759     virtual NewInitializerAST *asNewInitializer() { return this; }
       
  1760 
       
  1761     virtual unsigned firstToken() const;
       
  1762     virtual unsigned lastToken() const;
       
  1763 
       
  1764     virtual NewInitializerAST *clone(MemoryPool *pool) const;
       
  1765 
       
  1766 protected:
       
  1767     virtual void accept0(ASTVisitor *visitor);
       
  1768     virtual bool match0(AST *, ASTMatcher *);
       
  1769 };
       
  1770 
       
  1771 class CPLUSPLUS_EXPORT NewTypeIdAST: public AST
       
  1772 {
       
  1773 public:
       
  1774     SpecifierListAST *type_specifier_list;
       
  1775     PtrOperatorListAST *ptr_operator_list;
       
  1776     NewArrayDeclaratorListAST *new_array_declarator_list;
       
  1777 
       
  1778 public:
       
  1779     virtual NewTypeIdAST *asNewTypeId() { return this; }
       
  1780 
       
  1781     virtual unsigned firstToken() const;
       
  1782     virtual unsigned lastToken() const;
       
  1783 
       
  1784     virtual NewTypeIdAST *clone(MemoryPool *pool) const;
       
  1785 
       
  1786 protected:
       
  1787     virtual void accept0(ASTVisitor *visitor);
       
  1788     virtual bool match0(AST *, ASTMatcher *);
       
  1789 };
       
  1790 
       
  1791 class CPLUSPLUS_EXPORT OperatorAST: public AST
       
  1792 {
       
  1793 public:
       
  1794     unsigned op_token;
       
  1795     unsigned open_token;
       
  1796     unsigned close_token;
       
  1797 
       
  1798 public:
       
  1799     virtual OperatorAST *asOperator() { return this; }
       
  1800 
       
  1801     virtual unsigned firstToken() const;
       
  1802     virtual unsigned lastToken() const;
       
  1803 
       
  1804     virtual OperatorAST *clone(MemoryPool *pool) const;
       
  1805 
       
  1806 protected:
       
  1807     virtual void accept0(ASTVisitor *visitor);
       
  1808     virtual bool match0(AST *, ASTMatcher *);
       
  1809 };
       
  1810 
       
  1811 class CPLUSPLUS_EXPORT ParameterDeclarationAST: public DeclarationAST
       
  1812 {
       
  1813 public:
       
  1814     SpecifierListAST *type_specifier_list;
       
  1815     DeclaratorAST *declarator;
       
  1816     unsigned equal_token;
       
  1817     ExpressionAST *expression;
       
  1818 
       
  1819 public: // annotations
       
  1820     Argument *symbol;
       
  1821 
       
  1822 public:
       
  1823     virtual ParameterDeclarationAST *asParameterDeclaration() { return this; }
       
  1824 
       
  1825     virtual unsigned firstToken() const;
       
  1826     virtual unsigned lastToken() const;
       
  1827 
       
  1828     virtual ParameterDeclarationAST *clone(MemoryPool *pool) const;
       
  1829 
       
  1830 protected:
       
  1831     virtual void accept0(ASTVisitor *visitor);
       
  1832     virtual bool match0(AST *, ASTMatcher *);
       
  1833 };
       
  1834 
       
  1835 class CPLUSPLUS_EXPORT ParameterDeclarationClauseAST: public AST
       
  1836 {
       
  1837 public:
       
  1838     DeclarationListAST *parameter_declaration_list;
       
  1839     unsigned dot_dot_dot_token;
       
  1840 
       
  1841 public:
       
  1842     virtual ParameterDeclarationClauseAST *asParameterDeclarationClause() { return this; }
       
  1843 
       
  1844     virtual unsigned firstToken() const;
       
  1845     virtual unsigned lastToken() const;
       
  1846 
       
  1847     virtual ParameterDeclarationClauseAST *clone(MemoryPool *pool) const;
       
  1848 
       
  1849 protected:
       
  1850     virtual void accept0(ASTVisitor *visitor);
       
  1851     virtual bool match0(AST *, ASTMatcher *);
       
  1852 };
       
  1853 
       
  1854 class CPLUSPLUS_EXPORT CallAST: public PostfixAST
       
  1855 {
       
  1856 public:
       
  1857     unsigned lparen_token;
       
  1858     ExpressionListAST *expression_list;
       
  1859     unsigned rparen_token;
       
  1860 
       
  1861 public:
       
  1862     virtual CallAST *asCall() { return this; }
       
  1863 
       
  1864     virtual unsigned firstToken() const;
       
  1865     virtual unsigned lastToken() const;
       
  1866 
       
  1867     virtual CallAST *clone(MemoryPool *pool) const;
       
  1868 
       
  1869 protected:
       
  1870     virtual void accept0(ASTVisitor *visitor);
       
  1871     virtual bool match0(AST *, ASTMatcher *);
       
  1872 };
       
  1873 
       
  1874 class CPLUSPLUS_EXPORT ArrayAccessAST: public PostfixAST
       
  1875 {
       
  1876 public:
       
  1877     unsigned lbracket_token;
       
  1878     ExpressionAST *expression;
       
  1879     unsigned rbracket_token;
       
  1880 
       
  1881 public:
       
  1882     virtual ArrayAccessAST *asArrayAccess() { return this; }
       
  1883 
       
  1884     virtual unsigned firstToken() const;
       
  1885     virtual unsigned lastToken() const;
       
  1886 
       
  1887     virtual ArrayAccessAST *clone(MemoryPool *pool) const;
       
  1888 
       
  1889 protected:
       
  1890     virtual void accept0(ASTVisitor *visitor);
       
  1891     virtual bool match0(AST *, ASTMatcher *);
       
  1892 };
       
  1893 
       
  1894 class CPLUSPLUS_EXPORT PostIncrDecrAST: public PostfixAST
       
  1895 {
       
  1896 public:
       
  1897     unsigned incr_decr_token;
       
  1898 
       
  1899 public:
       
  1900     virtual PostIncrDecrAST *asPostIncrDecr() { return this; }
       
  1901 
       
  1902     virtual unsigned firstToken() const;
       
  1903     virtual unsigned lastToken() const;
       
  1904 
       
  1905     virtual PostIncrDecrAST *clone(MemoryPool *pool) const;
       
  1906 
       
  1907 protected:
       
  1908     virtual void accept0(ASTVisitor *visitor);
       
  1909     virtual bool match0(AST *, ASTMatcher *);
       
  1910 };
       
  1911 
       
  1912 class CPLUSPLUS_EXPORT MemberAccessAST: public PostfixAST
       
  1913 {
       
  1914 public:
       
  1915     unsigned access_token;
       
  1916     unsigned template_token;
       
  1917     NameAST *member_name;
       
  1918 
       
  1919 public:
       
  1920     virtual MemberAccessAST *asMemberAccess() { return this; }
       
  1921 
       
  1922     virtual unsigned firstToken() const;
       
  1923     virtual unsigned lastToken() const;
       
  1924 
       
  1925     virtual MemberAccessAST *clone(MemoryPool *pool) const;
       
  1926 
       
  1927 protected:
       
  1928     virtual void accept0(ASTVisitor *visitor);
       
  1929     virtual bool match0(AST *, ASTMatcher *);
       
  1930 };
       
  1931 
       
  1932 class CPLUSPLUS_EXPORT TypeidExpressionAST: public ExpressionAST
       
  1933 {
       
  1934 public:
       
  1935     unsigned typeid_token;
       
  1936     unsigned lparen_token;
       
  1937     ExpressionAST *expression;
       
  1938     unsigned rparen_token;
       
  1939 
       
  1940 public:
       
  1941     virtual TypeidExpressionAST *asTypeidExpression() { return this; }
       
  1942 
       
  1943     virtual unsigned firstToken() const;
       
  1944     virtual unsigned lastToken() const;
       
  1945 
       
  1946     virtual TypeidExpressionAST *clone(MemoryPool *pool) const;
       
  1947 
       
  1948 protected:
       
  1949     virtual void accept0(ASTVisitor *visitor);
       
  1950     virtual bool match0(AST *, ASTMatcher *);
       
  1951 };
       
  1952 
       
  1953 class CPLUSPLUS_EXPORT TypenameCallExpressionAST: public ExpressionAST
       
  1954 {
       
  1955 public:
       
  1956     unsigned typename_token;
       
  1957     NameAST *name;
       
  1958     unsigned lparen_token;
       
  1959     ExpressionListAST *expression_list;
       
  1960     unsigned rparen_token;
       
  1961 
       
  1962 public:
       
  1963     virtual TypenameCallExpressionAST *asTypenameCallExpression() { return this; }
       
  1964 
       
  1965     virtual unsigned firstToken() const;
       
  1966     virtual unsigned lastToken() const;
       
  1967 
       
  1968     virtual TypenameCallExpressionAST *clone(MemoryPool *pool) const;
       
  1969 
       
  1970 protected:
       
  1971     virtual void accept0(ASTVisitor *visitor);
       
  1972     virtual bool match0(AST *, ASTMatcher *);
       
  1973 };
       
  1974 
       
  1975 class CPLUSPLUS_EXPORT TypeConstructorCallAST: public ExpressionAST
       
  1976 {
       
  1977 public:
       
  1978     SpecifierListAST *type_specifier_list;
       
  1979     unsigned lparen_token;
       
  1980     ExpressionListAST *expression_list;
       
  1981     unsigned rparen_token;
       
  1982 
       
  1983 public:
       
  1984     virtual TypeConstructorCallAST *asTypeConstructorCall() { return this; }
       
  1985 
       
  1986     virtual unsigned firstToken() const;
       
  1987     virtual unsigned lastToken() const;
       
  1988 
       
  1989     virtual TypeConstructorCallAST *clone(MemoryPool *pool) const;
       
  1990 
       
  1991 protected:
       
  1992     virtual void accept0(ASTVisitor *visitor);
       
  1993     virtual bool match0(AST *, ASTMatcher *);
       
  1994 };
       
  1995 
       
  1996 class CPLUSPLUS_EXPORT PostfixExpressionAST: public ExpressionAST
       
  1997 {
       
  1998 public:
       
  1999     ExpressionAST *base_expression;
       
  2000     PostfixListAST *postfix_expression_list;
       
  2001 
       
  2002 public:
       
  2003     virtual PostfixExpressionAST *asPostfixExpression() { return this; }
       
  2004 
       
  2005     virtual unsigned firstToken() const;
       
  2006     virtual unsigned lastToken() const;
       
  2007 
       
  2008     virtual PostfixExpressionAST *clone(MemoryPool *pool) const;
       
  2009 
       
  2010 protected:
       
  2011     virtual void accept0(ASTVisitor *visitor);
       
  2012     virtual bool match0(AST *, ASTMatcher *);
       
  2013 };
       
  2014 
       
  2015 class CPLUSPLUS_EXPORT PointerToMemberAST: public PtrOperatorAST
       
  2016 {
       
  2017 public:
       
  2018     unsigned global_scope_token;
       
  2019     NestedNameSpecifierListAST *nested_name_specifier_list;
       
  2020     unsigned star_token;
       
  2021     SpecifierListAST *cv_qualifier_list;
       
  2022 
       
  2023 public:
       
  2024     virtual PointerToMemberAST *asPointerToMember() { return this; }
       
  2025 
       
  2026     virtual unsigned firstToken() const;
       
  2027     virtual unsigned lastToken() const;
       
  2028 
       
  2029     virtual PointerToMemberAST *clone(MemoryPool *pool) const;
       
  2030 
       
  2031 protected:
       
  2032     virtual void accept0(ASTVisitor *visitor);
       
  2033     virtual bool match0(AST *, ASTMatcher *);
       
  2034 };
       
  2035 
       
  2036 class CPLUSPLUS_EXPORT PointerAST: public PtrOperatorAST
       
  2037 {
       
  2038 public:
       
  2039     unsigned star_token;
       
  2040     SpecifierListAST *cv_qualifier_list;
       
  2041 
       
  2042 public:
       
  2043     virtual PointerAST *asPointer() { return this; }
       
  2044 
       
  2045     virtual unsigned firstToken() const;
       
  2046     virtual unsigned lastToken() const;
       
  2047 
       
  2048     virtual PointerAST *clone(MemoryPool *pool) const;
       
  2049 
       
  2050 protected:
       
  2051     virtual void accept0(ASTVisitor *visitor);
       
  2052     virtual bool match0(AST *, ASTMatcher *);
       
  2053 };
       
  2054 
       
  2055 class CPLUSPLUS_EXPORT ReferenceAST: public PtrOperatorAST
       
  2056 {
       
  2057 public:
       
  2058     unsigned amp_token;
       
  2059 
       
  2060 public:
       
  2061     virtual ReferenceAST *asReference() { return this; }
       
  2062 
       
  2063     virtual unsigned firstToken() const;
       
  2064     virtual unsigned lastToken() const;
       
  2065 
       
  2066     virtual ReferenceAST *clone(MemoryPool *pool) const;
       
  2067 
       
  2068 protected:
       
  2069     virtual void accept0(ASTVisitor *visitor);
       
  2070     virtual bool match0(AST *, ASTMatcher *);
       
  2071 };
       
  2072 
       
  2073 class CPLUSPLUS_EXPORT BreakStatementAST: public StatementAST
       
  2074 {
       
  2075 public:
       
  2076     unsigned break_token;
       
  2077     unsigned semicolon_token;
       
  2078 
       
  2079 public:
       
  2080     virtual BreakStatementAST *asBreakStatement() { return this; }
       
  2081 
       
  2082     virtual unsigned firstToken() const;
       
  2083     virtual unsigned lastToken() const;
       
  2084 
       
  2085     virtual BreakStatementAST *clone(MemoryPool *pool) const;
       
  2086 
       
  2087 protected:
       
  2088     virtual void accept0(ASTVisitor *visitor);
       
  2089     virtual bool match0(AST *, ASTMatcher *);
       
  2090 };
       
  2091 
       
  2092 class CPLUSPLUS_EXPORT ContinueStatementAST: public StatementAST
       
  2093 {
       
  2094 public:
       
  2095     unsigned continue_token;
       
  2096     unsigned semicolon_token;
       
  2097 
       
  2098 public:
       
  2099     virtual ContinueStatementAST *asContinueStatement() { return this; }
       
  2100 
       
  2101     virtual unsigned firstToken() const;
       
  2102     virtual unsigned lastToken() const;
       
  2103 
       
  2104     virtual ContinueStatementAST *clone(MemoryPool *pool) const;
       
  2105 
       
  2106 protected:
       
  2107     virtual void accept0(ASTVisitor *visitor);
       
  2108     virtual bool match0(AST *, ASTMatcher *);
       
  2109 };
       
  2110 
       
  2111 class CPLUSPLUS_EXPORT GotoStatementAST: public StatementAST
       
  2112 {
       
  2113 public:
       
  2114     unsigned goto_token;
       
  2115     unsigned identifier_token;
       
  2116     unsigned semicolon_token;
       
  2117 
       
  2118 public:
       
  2119     virtual GotoStatementAST *asGotoStatement() { return this; }
       
  2120 
       
  2121     virtual unsigned firstToken() const;
       
  2122     virtual unsigned lastToken() const;
       
  2123 
       
  2124     virtual GotoStatementAST *clone(MemoryPool *pool) const;
       
  2125 
       
  2126 protected:
       
  2127     virtual void accept0(ASTVisitor *visitor);
       
  2128     virtual bool match0(AST *, ASTMatcher *);
       
  2129 };
       
  2130 
       
  2131 class CPLUSPLUS_EXPORT ReturnStatementAST: public StatementAST
       
  2132 {
       
  2133 public:
       
  2134     unsigned return_token;
       
  2135     ExpressionAST *expression;
       
  2136     unsigned semicolon_token;
       
  2137 
       
  2138 public:
       
  2139     virtual ReturnStatementAST *asReturnStatement() { return this; }
       
  2140 
       
  2141     virtual unsigned firstToken() const;
       
  2142     virtual unsigned lastToken() const;
       
  2143 
       
  2144     virtual ReturnStatementAST *clone(MemoryPool *pool) const;
       
  2145 
       
  2146 protected:
       
  2147     virtual void accept0(ASTVisitor *visitor);
       
  2148     virtual bool match0(AST *, ASTMatcher *);
       
  2149 };
       
  2150 
       
  2151 class CPLUSPLUS_EXPORT SizeofExpressionAST: public ExpressionAST
       
  2152 {
       
  2153 public:
       
  2154     unsigned sizeof_token;
       
  2155     unsigned lparen_token;
       
  2156     ExpressionAST *expression;
       
  2157     unsigned rparen_token;
       
  2158 
       
  2159 public:
       
  2160     virtual SizeofExpressionAST *asSizeofExpression() { return this; }
       
  2161 
       
  2162     virtual unsigned firstToken() const;
       
  2163     virtual unsigned lastToken() const;
       
  2164 
       
  2165     virtual SizeofExpressionAST *clone(MemoryPool *pool) const;
       
  2166 
       
  2167 protected:
       
  2168     virtual void accept0(ASTVisitor *visitor);
       
  2169     virtual bool match0(AST *, ASTMatcher *);
       
  2170 };
       
  2171 
       
  2172 class CPLUSPLUS_EXPORT NumericLiteralAST: public ExpressionAST
       
  2173 {
       
  2174 public:
       
  2175     unsigned literal_token;
       
  2176 
       
  2177 public:
       
  2178     virtual NumericLiteralAST *asNumericLiteral() { return this; }
       
  2179 
       
  2180     virtual unsigned firstToken() const;
       
  2181     virtual unsigned lastToken() const;
       
  2182 
       
  2183     virtual NumericLiteralAST *clone(MemoryPool *pool) const;
       
  2184 
       
  2185 protected:
       
  2186     virtual void accept0(ASTVisitor *visitor);
       
  2187     virtual bool match0(AST *, ASTMatcher *);
       
  2188 };
       
  2189 
       
  2190 class CPLUSPLUS_EXPORT BoolLiteralAST: public ExpressionAST
       
  2191 {
       
  2192 public:
       
  2193     unsigned literal_token;
       
  2194 
       
  2195 public:
       
  2196     virtual BoolLiteralAST *asBoolLiteral() { return this; }
       
  2197 
       
  2198     virtual unsigned firstToken() const;
       
  2199     virtual unsigned lastToken() const;
       
  2200 
       
  2201     virtual BoolLiteralAST *clone(MemoryPool *pool) const;
       
  2202 
       
  2203 protected:
       
  2204     virtual void accept0(ASTVisitor *visitor);
       
  2205     virtual bool match0(AST *, ASTMatcher *);
       
  2206 };
       
  2207 
       
  2208 class CPLUSPLUS_EXPORT ThisExpressionAST: public ExpressionAST
       
  2209 {
       
  2210 public:
       
  2211     unsigned this_token;
       
  2212 
       
  2213 public:
       
  2214     virtual ThisExpressionAST *asThisExpression() { return this; }
       
  2215 
       
  2216     virtual unsigned firstToken() const;
       
  2217     virtual unsigned lastToken() const;
       
  2218 
       
  2219     virtual ThisExpressionAST *clone(MemoryPool *pool) const;
       
  2220 
       
  2221 protected:
       
  2222     virtual void accept0(ASTVisitor *visitor);
       
  2223     virtual bool match0(AST *, ASTMatcher *);
       
  2224 };
       
  2225 
       
  2226 class CPLUSPLUS_EXPORT NestedExpressionAST: public ExpressionAST
       
  2227 {
       
  2228 public:
       
  2229     unsigned lparen_token;
       
  2230     ExpressionAST *expression;
       
  2231     unsigned rparen_token;
       
  2232 
       
  2233 public:
       
  2234     virtual NestedExpressionAST *asNestedExpression() { return this; }
       
  2235 
       
  2236     virtual unsigned firstToken() const;
       
  2237     virtual unsigned lastToken() const;
       
  2238 
       
  2239     virtual NestedExpressionAST *clone(MemoryPool *pool) const;
       
  2240 
       
  2241 protected:
       
  2242     virtual void accept0(ASTVisitor *visitor);
       
  2243     virtual bool match0(AST *, ASTMatcher *);
       
  2244 };
       
  2245 
       
  2246 class CPLUSPLUS_EXPORT StringLiteralAST: public ExpressionAST
       
  2247 {
       
  2248 public:
       
  2249     unsigned literal_token;
       
  2250     StringLiteralAST *next;
       
  2251 
       
  2252 public:
       
  2253     virtual StringLiteralAST *asStringLiteral() { return this; }
       
  2254 
       
  2255     virtual unsigned firstToken() const;
       
  2256     virtual unsigned lastToken() const;
       
  2257 
       
  2258     virtual StringLiteralAST *clone(MemoryPool *pool) const;
       
  2259 
       
  2260 protected:
       
  2261     virtual void accept0(ASTVisitor *visitor);
       
  2262     virtual bool match0(AST *, ASTMatcher *);
       
  2263 };
       
  2264 
       
  2265 class CPLUSPLUS_EXPORT SwitchStatementAST: public StatementAST
       
  2266 {
       
  2267 public:
       
  2268     unsigned switch_token;
       
  2269     unsigned lparen_token;
       
  2270     ExpressionAST *condition;
       
  2271     unsigned rparen_token;
       
  2272     StatementAST *statement;
       
  2273 
       
  2274 public: // annotations
       
  2275     Block *symbol;
       
  2276 
       
  2277 public:
       
  2278     virtual SwitchStatementAST *asSwitchStatement() { return this; }
       
  2279 
       
  2280     virtual unsigned firstToken() const;
       
  2281     virtual unsigned lastToken() const;
       
  2282 
       
  2283     virtual SwitchStatementAST *clone(MemoryPool *pool) const;
       
  2284 
       
  2285 protected:
       
  2286     virtual void accept0(ASTVisitor *visitor);
       
  2287     virtual bool match0(AST *, ASTMatcher *);
       
  2288 };
       
  2289 
       
  2290 class CPLUSPLUS_EXPORT TemplateDeclarationAST: public DeclarationAST
       
  2291 {
       
  2292 public:
       
  2293     unsigned export_token;
       
  2294     unsigned template_token;
       
  2295     unsigned less_token;
       
  2296     DeclarationListAST *template_parameter_list;
       
  2297     unsigned greater_token;
       
  2298     DeclarationAST *declaration;
       
  2299 
       
  2300 public:
       
  2301     virtual TemplateDeclarationAST *asTemplateDeclaration() { return this; }
       
  2302 
       
  2303     virtual unsigned firstToken() const;
       
  2304     virtual unsigned lastToken() const;
       
  2305 
       
  2306     virtual TemplateDeclarationAST *clone(MemoryPool *pool) const;
       
  2307 
       
  2308 protected:
       
  2309     virtual void accept0(ASTVisitor *visitor);
       
  2310     virtual bool match0(AST *, ASTMatcher *);
       
  2311 };
       
  2312 
       
  2313 class CPLUSPLUS_EXPORT ThrowExpressionAST: public ExpressionAST
       
  2314 {
       
  2315 public:
       
  2316     unsigned throw_token;
       
  2317     ExpressionAST *expression;
       
  2318 
       
  2319 public:
       
  2320     virtual ThrowExpressionAST *asThrowExpression() { return this; }
       
  2321 
       
  2322     virtual unsigned firstToken() const;
       
  2323     virtual unsigned lastToken() const;
       
  2324 
       
  2325     virtual ThrowExpressionAST *clone(MemoryPool *pool) const;
       
  2326 
       
  2327 protected:
       
  2328     virtual void accept0(ASTVisitor *visitor);
       
  2329     virtual bool match0(AST *, ASTMatcher *);
       
  2330 };
       
  2331 
       
  2332 class CPLUSPLUS_EXPORT TranslationUnitAST: public AST
       
  2333 {
       
  2334 public:
       
  2335     DeclarationListAST *declaration_list;
       
  2336 
       
  2337 public:
       
  2338     virtual TranslationUnitAST *asTranslationUnit() { return this; }
       
  2339 
       
  2340     virtual unsigned firstToken() const;
       
  2341     virtual unsigned lastToken() const;
       
  2342 
       
  2343     virtual TranslationUnitAST *clone(MemoryPool *pool) const;
       
  2344 
       
  2345 protected:
       
  2346     virtual void accept0(ASTVisitor *visitor);
       
  2347     virtual bool match0(AST *, ASTMatcher *);
       
  2348 };
       
  2349 
       
  2350 class CPLUSPLUS_EXPORT TryBlockStatementAST: public StatementAST
       
  2351 {
       
  2352 public:
       
  2353     unsigned try_token;
       
  2354     StatementAST *statement;
       
  2355     CatchClauseListAST *catch_clause_list;
       
  2356 
       
  2357 public:
       
  2358     virtual TryBlockStatementAST *asTryBlockStatement() { return this; }
       
  2359 
       
  2360     virtual unsigned firstToken() const;
       
  2361     virtual unsigned lastToken() const;
       
  2362 
       
  2363     virtual TryBlockStatementAST *clone(MemoryPool *pool) const;
       
  2364 
       
  2365 protected:
       
  2366     virtual void accept0(ASTVisitor *visitor);
       
  2367     virtual bool match0(AST *, ASTMatcher *);
       
  2368 };
       
  2369 
       
  2370 class CPLUSPLUS_EXPORT CatchClauseAST: public StatementAST
       
  2371 {
       
  2372 public:
       
  2373     unsigned catch_token;
       
  2374     unsigned lparen_token;
       
  2375     ExceptionDeclarationAST *exception_declaration;
       
  2376     unsigned rparen_token;
       
  2377     StatementAST *statement;
       
  2378 
       
  2379 public: // annotations
       
  2380     Block *symbol;
       
  2381 
       
  2382 public:
       
  2383     virtual CatchClauseAST *asCatchClause() { return this; }
       
  2384 
       
  2385     virtual unsigned firstToken() const;
       
  2386     virtual unsigned lastToken() const;
       
  2387 
       
  2388     virtual CatchClauseAST *clone(MemoryPool *pool) const;
       
  2389 
       
  2390 protected:
       
  2391     virtual void accept0(ASTVisitor *visitor);
       
  2392     virtual bool match0(AST *, ASTMatcher *);
       
  2393 };
       
  2394 
       
  2395 class CPLUSPLUS_EXPORT TypeIdAST: public ExpressionAST
       
  2396 {
       
  2397 public:
       
  2398     SpecifierListAST *type_specifier_list;
       
  2399     DeclaratorAST *declarator;
       
  2400 
       
  2401 public:
       
  2402     virtual TypeIdAST *asTypeId() { return this; }
       
  2403 
       
  2404     virtual unsigned firstToken() const;
       
  2405     virtual unsigned lastToken() const;
       
  2406 
       
  2407     virtual TypeIdAST *clone(MemoryPool *pool) const;
       
  2408 
       
  2409 protected:
       
  2410     virtual void accept0(ASTVisitor *visitor);
       
  2411     virtual bool match0(AST *, ASTMatcher *);
       
  2412 };
       
  2413 
       
  2414 class CPLUSPLUS_EXPORT TypenameTypeParameterAST: public DeclarationAST
       
  2415 {
       
  2416 public:
       
  2417     unsigned classkey_token;
       
  2418     NameAST *name;
       
  2419     unsigned equal_token;
       
  2420     ExpressionAST *type_id;
       
  2421 
       
  2422 public: // annotations
       
  2423     TypenameArgument *symbol;
       
  2424 
       
  2425 public:
       
  2426     virtual TypenameTypeParameterAST *asTypenameTypeParameter() { return this; }
       
  2427 
       
  2428     virtual unsigned firstToken() const;
       
  2429     virtual unsigned lastToken() const;
       
  2430 
       
  2431     virtual TypenameTypeParameterAST *clone(MemoryPool *pool) const;
       
  2432 
       
  2433 protected:
       
  2434     virtual void accept0(ASTVisitor *visitor);
       
  2435     virtual bool match0(AST *, ASTMatcher *);
       
  2436 };
       
  2437 
       
  2438 class CPLUSPLUS_EXPORT TemplateTypeParameterAST: public DeclarationAST
       
  2439 {
       
  2440 public:
       
  2441     unsigned template_token;
       
  2442     unsigned less_token;
       
  2443     DeclarationListAST *template_parameter_list;
       
  2444     unsigned greater_token;
       
  2445     unsigned class_token;
       
  2446     NameAST *name;
       
  2447     unsigned equal_token;
       
  2448     ExpressionAST *type_id;
       
  2449 
       
  2450 public:
       
  2451     TypenameArgument *symbol;
       
  2452 
       
  2453 public:
       
  2454     virtual TemplateTypeParameterAST *asTemplateTypeParameter() { return this; }
       
  2455 
       
  2456     virtual unsigned firstToken() const;
       
  2457     virtual unsigned lastToken() const;
       
  2458 
       
  2459     virtual TemplateTypeParameterAST *clone(MemoryPool *pool) const;
       
  2460 
       
  2461 protected:
       
  2462     virtual void accept0(ASTVisitor *visitor);
       
  2463     virtual bool match0(AST *, ASTMatcher *);
       
  2464 };
       
  2465 
       
  2466 class CPLUSPLUS_EXPORT UnaryExpressionAST: public ExpressionAST
       
  2467 {
       
  2468 public:
       
  2469     unsigned unary_op_token;
       
  2470     ExpressionAST *expression;
       
  2471 
       
  2472 public:
       
  2473     virtual UnaryExpressionAST *asUnaryExpression() { return this; }
       
  2474 
       
  2475     virtual unsigned firstToken() const;
       
  2476     virtual unsigned lastToken() const;
       
  2477 
       
  2478     virtual UnaryExpressionAST *clone(MemoryPool *pool) const;
       
  2479 
       
  2480 protected:
       
  2481     virtual void accept0(ASTVisitor *visitor);
       
  2482     virtual bool match0(AST *, ASTMatcher *);
       
  2483 };
       
  2484 
       
  2485 class CPLUSPLUS_EXPORT UsingAST: public DeclarationAST
       
  2486 {
       
  2487 public:
       
  2488     unsigned using_token;
       
  2489     unsigned typename_token;
       
  2490     NameAST *name;
       
  2491     unsigned semicolon_token;
       
  2492 
       
  2493 public: // annotations
       
  2494     UsingDeclaration *symbol;
       
  2495 
       
  2496 public:
       
  2497     virtual UsingAST *asUsing() { return this; }
       
  2498 
       
  2499     virtual unsigned firstToken() const;
       
  2500     virtual unsigned lastToken() const;
       
  2501 
       
  2502     virtual UsingAST *clone(MemoryPool *pool) const;
       
  2503 
       
  2504 protected:
       
  2505     virtual void accept0(ASTVisitor *visitor);
       
  2506     virtual bool match0(AST *, ASTMatcher *);
       
  2507 };
       
  2508 
       
  2509 class CPLUSPLUS_EXPORT UsingDirectiveAST: public DeclarationAST
       
  2510 {
       
  2511 public:
       
  2512     unsigned using_token;
       
  2513     unsigned namespace_token;
       
  2514     NameAST *name;
       
  2515     unsigned semicolon_token;
       
  2516 
       
  2517 public:
       
  2518     UsingNamespaceDirective *symbol;
       
  2519 
       
  2520 public:
       
  2521     virtual UsingDirectiveAST *asUsingDirective() { return this; }
       
  2522 
       
  2523     virtual unsigned firstToken() const;
       
  2524     virtual unsigned lastToken() const;
       
  2525 
       
  2526     virtual UsingDirectiveAST *clone(MemoryPool *pool) const;
       
  2527 
       
  2528 protected:
       
  2529     virtual void accept0(ASTVisitor *visitor);
       
  2530     virtual bool match0(AST *, ASTMatcher *);
       
  2531 };
       
  2532 
       
  2533 class CPLUSPLUS_EXPORT WhileStatementAST: public StatementAST
       
  2534 {
       
  2535 public:
       
  2536     unsigned while_token;
       
  2537     unsigned lparen_token;
       
  2538     ExpressionAST *condition;
       
  2539     unsigned rparen_token;
       
  2540     StatementAST *statement;
       
  2541 
       
  2542 public: // annotations
       
  2543     Block *symbol;
       
  2544 
       
  2545 public:
       
  2546     virtual WhileStatementAST *asWhileStatement() { return this; }
       
  2547 
       
  2548     virtual unsigned firstToken() const;
       
  2549     virtual unsigned lastToken() const;
       
  2550 
       
  2551     virtual WhileStatementAST *clone(MemoryPool *pool) const;
       
  2552 
       
  2553 protected:
       
  2554     virtual void accept0(ASTVisitor *visitor);
       
  2555     virtual bool match0(AST *, ASTMatcher *);
       
  2556 };
       
  2557 
       
  2558 class CPLUSPLUS_EXPORT ObjCClassForwardDeclarationAST: public DeclarationAST
       
  2559 {
       
  2560 public:
       
  2561     SpecifierListAST *attribute_list;
       
  2562     unsigned class_token;
       
  2563     ObjCIdentifierListAST *identifier_list;
       
  2564     unsigned semicolon_token;
       
  2565 
       
  2566 public: // annotations
       
  2567     List<ObjCForwardClassDeclaration *> *symbols;
       
  2568 
       
  2569 public:
       
  2570     virtual ObjCClassForwardDeclarationAST *asObjCClassForwardDeclaration() { return this; }
       
  2571 
       
  2572     virtual unsigned firstToken() const;
       
  2573     virtual unsigned lastToken() const;
       
  2574 
       
  2575     virtual ObjCClassForwardDeclarationAST *clone(MemoryPool *pool) const;
       
  2576 
       
  2577 protected:
       
  2578     virtual void accept0(ASTVisitor *visitor);
       
  2579     virtual bool match0(AST *, ASTMatcher *);
       
  2580 };
       
  2581 
       
  2582 class CPLUSPLUS_EXPORT ObjCClassDeclarationAST: public DeclarationAST
       
  2583 {
       
  2584 public:
       
  2585     SpecifierListAST *attribute_list;
       
  2586     unsigned interface_token;
       
  2587     unsigned implementation_token;
       
  2588     NameAST *class_name;
       
  2589     unsigned lparen_token;
       
  2590     NameAST *category_name;
       
  2591     unsigned rparen_token;
       
  2592     unsigned colon_token;
       
  2593     NameAST *superclass;
       
  2594     ObjCProtocolRefsAST *protocol_refs;
       
  2595     ObjCInstanceVariablesDeclarationAST *inst_vars_decl;
       
  2596     DeclarationListAST *member_declaration_list;
       
  2597     unsigned end_token;
       
  2598 
       
  2599 public: // annotations
       
  2600     ObjCClass *symbol;
       
  2601 
       
  2602 public:
       
  2603     virtual ObjCClassDeclarationAST *asObjCClassDeclaration() { return this; }
       
  2604 
       
  2605     virtual unsigned firstToken() const;
       
  2606     virtual unsigned lastToken() const;
       
  2607 
       
  2608     virtual ObjCClassDeclarationAST *clone(MemoryPool *pool) const;
       
  2609 
       
  2610 protected:
       
  2611     virtual void accept0(ASTVisitor *visitor);
       
  2612     virtual bool match0(AST *, ASTMatcher *);
       
  2613 };
       
  2614 
       
  2615 class CPLUSPLUS_EXPORT ObjCProtocolForwardDeclarationAST: public DeclarationAST
       
  2616 {
       
  2617 public:
       
  2618     SpecifierListAST *attribute_list;
       
  2619     unsigned protocol_token;
       
  2620     ObjCIdentifierListAST *identifier_list;
       
  2621     unsigned semicolon_token;
       
  2622 
       
  2623 public: // annotations
       
  2624     List<ObjCForwardProtocolDeclaration *> *symbols;
       
  2625 
       
  2626 public:
       
  2627     virtual ObjCProtocolForwardDeclarationAST *asObjCProtocolForwardDeclaration() { return this; }
       
  2628 
       
  2629     virtual unsigned firstToken() const;
       
  2630     virtual unsigned lastToken() const;
       
  2631 
       
  2632     virtual ObjCProtocolForwardDeclarationAST *clone(MemoryPool *pool) const;
       
  2633 
       
  2634 protected:
       
  2635     virtual void accept0(ASTVisitor *visitor);
       
  2636     virtual bool match0(AST *, ASTMatcher *);
       
  2637 };
       
  2638 
       
  2639 class CPLUSPLUS_EXPORT ObjCProtocolDeclarationAST: public DeclarationAST
       
  2640 {
       
  2641 public:
       
  2642     SpecifierListAST *attribute_list;
       
  2643     unsigned protocol_token;
       
  2644     NameAST *name;
       
  2645     ObjCProtocolRefsAST *protocol_refs;
       
  2646     DeclarationListAST *member_declaration_list;
       
  2647     unsigned end_token;
       
  2648 
       
  2649 public: // annotations
       
  2650     ObjCProtocol *symbol;
       
  2651 
       
  2652 public:
       
  2653     virtual ObjCProtocolDeclarationAST *asObjCProtocolDeclaration() { return this; }
       
  2654 
       
  2655     virtual unsigned firstToken() const;
       
  2656     virtual unsigned lastToken() const;
       
  2657 
       
  2658     virtual ObjCProtocolDeclarationAST *clone(MemoryPool *pool) const;
       
  2659 
       
  2660 protected:
       
  2661     virtual void accept0(ASTVisitor *visitor);
       
  2662     virtual bool match0(AST *, ASTMatcher *);
       
  2663 };
       
  2664 
       
  2665 class CPLUSPLUS_EXPORT ObjCProtocolRefsAST: public AST
       
  2666 {
       
  2667 public:
       
  2668     unsigned less_token;
       
  2669     ObjCIdentifierListAST *identifier_list;
       
  2670     unsigned greater_token;
       
  2671 
       
  2672 public:
       
  2673     virtual ObjCProtocolRefsAST *asObjCProtocolRefs() { return this; }
       
  2674 
       
  2675     virtual unsigned firstToken() const;
       
  2676     virtual unsigned lastToken() const;
       
  2677 
       
  2678     virtual ObjCProtocolRefsAST *clone(MemoryPool *pool) const;
       
  2679 
       
  2680 protected:
       
  2681     virtual void accept0(ASTVisitor *visitor);
       
  2682     virtual bool match0(AST *, ASTMatcher *);
       
  2683 };
       
  2684 
       
  2685 class CPLUSPLUS_EXPORT ObjCMessageArgumentAST: public AST
       
  2686 {
       
  2687 public:
       
  2688     ExpressionAST *parameter_value_expression;
       
  2689 
       
  2690 public:
       
  2691     virtual ObjCMessageArgumentAST *asObjCMessageArgument() { return this; }
       
  2692 
       
  2693     virtual unsigned firstToken() const;
       
  2694     virtual unsigned lastToken() const;
       
  2695 
       
  2696     virtual ObjCMessageArgumentAST *clone(MemoryPool *pool) const;
       
  2697 
       
  2698 protected:
       
  2699     virtual void accept0(ASTVisitor *visitor);
       
  2700     virtual bool match0(AST *, ASTMatcher *);
       
  2701 };
       
  2702 
       
  2703 class CPLUSPLUS_EXPORT ObjCMessageExpressionAST: public ExpressionAST
       
  2704 {
       
  2705 public:
       
  2706     unsigned lbracket_token;
       
  2707     ExpressionAST *receiver_expression;
       
  2708     ObjCSelectorAST *selector;
       
  2709     ObjCMessageArgumentListAST *argument_list;
       
  2710     unsigned rbracket_token;
       
  2711 
       
  2712 public:
       
  2713     virtual ObjCMessageExpressionAST *asObjCMessageExpression() { return this; }
       
  2714 
       
  2715     virtual unsigned firstToken() const;
       
  2716     virtual unsigned lastToken() const;
       
  2717 
       
  2718     virtual ObjCMessageExpressionAST *clone(MemoryPool *pool) const;
       
  2719 
       
  2720 protected:
       
  2721     virtual void accept0(ASTVisitor *visitor);
       
  2722     virtual bool match0(AST *, ASTMatcher *);
       
  2723 };
       
  2724 
       
  2725 class CPLUSPLUS_EXPORT ObjCProtocolExpressionAST: public ExpressionAST
       
  2726 {
       
  2727 public:
       
  2728     unsigned protocol_token;
       
  2729     unsigned lparen_token;
       
  2730     unsigned identifier_token;
       
  2731     unsigned rparen_token;
       
  2732 
       
  2733 public:
       
  2734     virtual ObjCProtocolExpressionAST *asObjCProtocolExpression() { return this; }
       
  2735 
       
  2736     virtual unsigned firstToken() const;
       
  2737     virtual unsigned lastToken() const;
       
  2738 
       
  2739     virtual ObjCProtocolExpressionAST *clone(MemoryPool *pool) const;
       
  2740 
       
  2741 protected:
       
  2742     virtual void accept0(ASTVisitor *visitor);
       
  2743     virtual bool match0(AST *, ASTMatcher *);
       
  2744 };
       
  2745 
       
  2746 class CPLUSPLUS_EXPORT ObjCTypeNameAST: public AST
       
  2747 {
       
  2748 public:
       
  2749     unsigned lparen_token;
       
  2750     unsigned type_qualifier_token;
       
  2751     ExpressionAST *type_id;
       
  2752     unsigned rparen_token;
       
  2753 
       
  2754 public:
       
  2755     virtual ObjCTypeNameAST *asObjCTypeName() { return this; }
       
  2756 
       
  2757     virtual unsigned firstToken() const;
       
  2758     virtual unsigned lastToken() const;
       
  2759 
       
  2760     virtual ObjCTypeNameAST *clone(MemoryPool *pool) const;
       
  2761 
       
  2762 protected:
       
  2763     virtual void accept0(ASTVisitor *visitor);
       
  2764     virtual bool match0(AST *, ASTMatcher *);
       
  2765 };
       
  2766 
       
  2767 class CPLUSPLUS_EXPORT ObjCEncodeExpressionAST: public ExpressionAST
       
  2768 {
       
  2769 public:
       
  2770     unsigned encode_token;
       
  2771     ObjCTypeNameAST *type_name;
       
  2772 
       
  2773 public:
       
  2774     virtual ObjCEncodeExpressionAST *asObjCEncodeExpression() { return this; }
       
  2775 
       
  2776     virtual unsigned firstToken() const;
       
  2777     virtual unsigned lastToken() const;
       
  2778 
       
  2779     virtual ObjCEncodeExpressionAST *clone(MemoryPool *pool) const;
       
  2780 
       
  2781 protected:
       
  2782     virtual void accept0(ASTVisitor *visitor);
       
  2783     virtual bool match0(AST *, ASTMatcher *);
       
  2784 };
       
  2785 
       
  2786 class CPLUSPLUS_EXPORT ObjCSelectorWithoutArgumentsAST: public ObjCSelectorAST
       
  2787 {
       
  2788 public:
       
  2789     unsigned name_token;
       
  2790 
       
  2791 public:
       
  2792     virtual ObjCSelectorWithoutArgumentsAST *asObjCSelectorWithoutArguments() { return this; }
       
  2793 
       
  2794     virtual unsigned firstToken() const;
       
  2795     virtual unsigned lastToken() const;
       
  2796 
       
  2797     virtual ObjCSelectorWithoutArgumentsAST *clone(MemoryPool *pool) const;
       
  2798 
       
  2799 protected:
       
  2800     virtual void accept0(ASTVisitor *visitor);
       
  2801     virtual bool match0(AST *, ASTMatcher *);
       
  2802 };
       
  2803 
       
  2804 class CPLUSPLUS_EXPORT ObjCSelectorArgumentAST: public AST
       
  2805 {
       
  2806 public:
       
  2807     unsigned name_token;
       
  2808     unsigned colon_token;
       
  2809 
       
  2810 public:
       
  2811     virtual ObjCSelectorArgumentAST *asObjCSelectorArgument() { return this; }
       
  2812 
       
  2813     virtual unsigned firstToken() const;
       
  2814     virtual unsigned lastToken() const;
       
  2815 
       
  2816     virtual ObjCSelectorArgumentAST *clone(MemoryPool *pool) const;
       
  2817 
       
  2818 protected:
       
  2819     virtual void accept0(ASTVisitor *visitor);
       
  2820     virtual bool match0(AST *, ASTMatcher *);
       
  2821 };
       
  2822 
       
  2823 class CPLUSPLUS_EXPORT ObjCSelectorWithArgumentsAST: public ObjCSelectorAST
       
  2824 {
       
  2825 public:
       
  2826     ObjCSelectorArgumentListAST *selector_argument_list;
       
  2827 
       
  2828 public:
       
  2829     virtual ObjCSelectorWithArgumentsAST *asObjCSelectorWithArguments() { return this; }
       
  2830 
       
  2831     virtual unsigned firstToken() const;
       
  2832     virtual unsigned lastToken() const;
       
  2833 
       
  2834     virtual ObjCSelectorWithArgumentsAST *clone(MemoryPool *pool) const;
       
  2835 
       
  2836 protected:
       
  2837     virtual void accept0(ASTVisitor *visitor);
       
  2838     virtual bool match0(AST *, ASTMatcher *);
       
  2839 };
       
  2840 
       
  2841 class CPLUSPLUS_EXPORT ObjCSelectorExpressionAST: public ExpressionAST
       
  2842 {
       
  2843 public:
       
  2844     unsigned selector_token;
       
  2845     unsigned lparen_token;
       
  2846     ObjCSelectorAST *selector;
       
  2847     unsigned rparen_token;
       
  2848 
       
  2849 public:
       
  2850     virtual ObjCSelectorExpressionAST *asObjCSelectorExpression() { return this; }
       
  2851 
       
  2852     virtual unsigned firstToken() const;
       
  2853     virtual unsigned lastToken() const;
       
  2854 
       
  2855     virtual ObjCSelectorExpressionAST *clone(MemoryPool *pool) const;
       
  2856 
       
  2857 protected:
       
  2858     virtual void accept0(ASTVisitor *visitor);
       
  2859     virtual bool match0(AST *, ASTMatcher *);
       
  2860 };
       
  2861 
       
  2862 class CPLUSPLUS_EXPORT ObjCInstanceVariablesDeclarationAST: public AST
       
  2863 {
       
  2864 public:
       
  2865     unsigned lbrace_token;
       
  2866     DeclarationListAST *instance_variable_list;
       
  2867     unsigned rbrace_token;
       
  2868 
       
  2869 public:
       
  2870     virtual ObjCInstanceVariablesDeclarationAST *asObjCInstanceVariablesDeclaration() { return this; }
       
  2871 
       
  2872     virtual unsigned firstToken() const;
       
  2873     virtual unsigned lastToken() const;
       
  2874 
       
  2875     virtual ObjCInstanceVariablesDeclarationAST *clone(MemoryPool *pool) const;
       
  2876 
       
  2877 protected:
       
  2878     virtual void accept0(ASTVisitor *visitor);
       
  2879     virtual bool match0(AST *, ASTMatcher *);
       
  2880 };
       
  2881 
       
  2882 class CPLUSPLUS_EXPORT ObjCVisibilityDeclarationAST: public DeclarationAST
       
  2883 {
       
  2884 public:
       
  2885     unsigned visibility_token;
       
  2886 
       
  2887 public:
       
  2888     virtual ObjCVisibilityDeclarationAST *asObjCVisibilityDeclaration() { return this; }
       
  2889 
       
  2890     virtual unsigned firstToken() const;
       
  2891     virtual unsigned lastToken() const;
       
  2892 
       
  2893     virtual ObjCVisibilityDeclarationAST *clone(MemoryPool *pool) const;
       
  2894 
       
  2895 protected:
       
  2896     virtual void accept0(ASTVisitor *visitor);
       
  2897     virtual bool match0(AST *, ASTMatcher *);
       
  2898 };
       
  2899 
       
  2900 class CPLUSPLUS_EXPORT ObjCPropertyAttributeAST: public AST
       
  2901 {
       
  2902 public:
       
  2903     unsigned attribute_identifier_token;
       
  2904     unsigned equals_token;
       
  2905     ObjCSelectorAST *method_selector;
       
  2906 
       
  2907 public:
       
  2908     virtual ObjCPropertyAttributeAST *asObjCPropertyAttribute() { return this; }
       
  2909 
       
  2910     virtual unsigned firstToken() const;
       
  2911     virtual unsigned lastToken() const;
       
  2912 
       
  2913     virtual ObjCPropertyAttributeAST *clone(MemoryPool *pool) const;
       
  2914 
       
  2915 protected:
       
  2916     virtual void accept0(ASTVisitor *visitor);
       
  2917     virtual bool match0(AST *, ASTMatcher *);
       
  2918 };
       
  2919 
       
  2920 class CPLUSPLUS_EXPORT ObjCPropertyDeclarationAST: public DeclarationAST
       
  2921 {
       
  2922 public:
       
  2923     SpecifierListAST *attribute_list;
       
  2924     unsigned property_token;
       
  2925     unsigned lparen_token;
       
  2926     ObjCPropertyAttributeListAST *property_attribute_list;
       
  2927     unsigned rparen_token;
       
  2928     DeclarationAST *simple_declaration;
       
  2929 
       
  2930 public: // annotations
       
  2931     List<ObjCPropertyDeclaration *> *symbols;
       
  2932 
       
  2933 public:
       
  2934     virtual ObjCPropertyDeclarationAST *asObjCPropertyDeclaration() { return this; }
       
  2935 
       
  2936     virtual unsigned firstToken() const;
       
  2937     virtual unsigned lastToken() const;
       
  2938 
       
  2939     virtual ObjCPropertyDeclarationAST *clone(MemoryPool *pool) const;
       
  2940 
       
  2941 protected:
       
  2942     virtual void accept0(ASTVisitor *visitor);
       
  2943     virtual bool match0(AST *, ASTMatcher *);
       
  2944 };
       
  2945 
       
  2946 class CPLUSPLUS_EXPORT ObjCMessageArgumentDeclarationAST: public NameAST
       
  2947 {
       
  2948 public:
       
  2949     ObjCTypeNameAST* type_name;
       
  2950     SpecifierListAST *attribute_list;
       
  2951     unsigned param_name_token;
       
  2952 
       
  2953 public: // annotations
       
  2954     Argument *argument;
       
  2955 
       
  2956 public:
       
  2957     virtual ObjCMessageArgumentDeclarationAST *asObjCMessageArgumentDeclaration() { return this; }
       
  2958 
       
  2959     virtual unsigned firstToken() const;
       
  2960     virtual unsigned lastToken() const;
       
  2961 
       
  2962     virtual ObjCMessageArgumentDeclarationAST *clone(MemoryPool *pool) const;
       
  2963 
       
  2964 protected:
       
  2965     virtual void accept0(ASTVisitor *visitor);
       
  2966     virtual bool match0(AST *, ASTMatcher *);
       
  2967 };
       
  2968 
       
  2969 class CPLUSPLUS_EXPORT ObjCMethodPrototypeAST: public AST
       
  2970 {
       
  2971 public:
       
  2972     unsigned method_type_token;
       
  2973     ObjCTypeNameAST *type_name;
       
  2974     ObjCSelectorAST *selector;
       
  2975     ObjCMessageArgumentDeclarationListAST *argument_list;
       
  2976     unsigned dot_dot_dot_token;
       
  2977     SpecifierListAST *attribute_list;
       
  2978 
       
  2979 public: // annotations
       
  2980     ObjCMethod *symbol;
       
  2981 
       
  2982 public:
       
  2983     virtual ObjCMethodPrototypeAST *asObjCMethodPrototype() { return this; }
       
  2984 
       
  2985     virtual unsigned firstToken() const;
       
  2986     virtual unsigned lastToken() const;
       
  2987 
       
  2988     virtual ObjCMethodPrototypeAST *clone(MemoryPool *pool) const;
       
  2989 
       
  2990 protected:
       
  2991     virtual void accept0(ASTVisitor *visitor);
       
  2992     virtual bool match0(AST *, ASTMatcher *);
       
  2993 };
       
  2994 
       
  2995 class CPLUSPLUS_EXPORT ObjCMethodDeclarationAST: public DeclarationAST
       
  2996 {
       
  2997 public:
       
  2998     ObjCMethodPrototypeAST *method_prototype;
       
  2999     StatementAST *function_body;
       
  3000     unsigned semicolon_token;
       
  3001 
       
  3002 public:
       
  3003     virtual ObjCMethodDeclarationAST *asObjCMethodDeclaration() { return this; }
       
  3004 
       
  3005     virtual unsigned firstToken() const;
       
  3006     virtual unsigned lastToken() const;
       
  3007 
       
  3008     virtual ObjCMethodDeclarationAST *clone(MemoryPool *pool) const;
       
  3009 
       
  3010 protected:
       
  3011     virtual void accept0(ASTVisitor *visitor);
       
  3012     virtual bool match0(AST *, ASTMatcher *);
       
  3013 };
       
  3014 
       
  3015 class CPLUSPLUS_EXPORT ObjCSynthesizedPropertyAST: public AST
       
  3016 {
       
  3017 public:
       
  3018     unsigned property_identifier_token;
       
  3019     unsigned equals_token;
       
  3020     unsigned alias_identifier_token;
       
  3021 
       
  3022 public:
       
  3023     virtual ObjCSynthesizedPropertyAST *asObjCSynthesizedProperty() { return this; }
       
  3024 
       
  3025     virtual unsigned firstToken() const;
       
  3026     virtual unsigned lastToken() const;
       
  3027 
       
  3028     virtual ObjCSynthesizedPropertyAST *clone(MemoryPool *pool) const;
       
  3029 
       
  3030 protected:
       
  3031     virtual void accept0(ASTVisitor *visitor);
       
  3032     virtual bool match0(AST *, ASTMatcher *);
       
  3033 };
       
  3034 
       
  3035 class CPLUSPLUS_EXPORT ObjCSynthesizedPropertiesDeclarationAST: public DeclarationAST
       
  3036 {
       
  3037 public:
       
  3038     unsigned synthesized_token;
       
  3039     ObjCSynthesizedPropertyListAST *property_identifier_list;
       
  3040     unsigned semicolon_token;
       
  3041 
       
  3042 public:
       
  3043     virtual ObjCSynthesizedPropertiesDeclarationAST *asObjCSynthesizedPropertiesDeclaration() { return this; }
       
  3044 
       
  3045     virtual unsigned firstToken() const;
       
  3046     virtual unsigned lastToken() const;
       
  3047 
       
  3048     virtual ObjCSynthesizedPropertiesDeclarationAST *clone(MemoryPool *pool) const;
       
  3049 
       
  3050 protected:
       
  3051     virtual void accept0(ASTVisitor *visitor);
       
  3052     virtual bool match0(AST *, ASTMatcher *);
       
  3053 };
       
  3054 
       
  3055 class CPLUSPLUS_EXPORT ObjCDynamicPropertiesDeclarationAST: public DeclarationAST
       
  3056 {
       
  3057 public:
       
  3058     unsigned dynamic_token;
       
  3059     ObjCIdentifierListAST *property_identifier_list;
       
  3060     unsigned semicolon_token;
       
  3061 
       
  3062 public:
       
  3063     virtual ObjCDynamicPropertiesDeclarationAST *asObjCDynamicPropertiesDeclaration() { return this; }
       
  3064 
       
  3065     virtual unsigned firstToken() const;
       
  3066     virtual unsigned lastToken() const;
       
  3067 
       
  3068     virtual ObjCDynamicPropertiesDeclarationAST *clone(MemoryPool *pool) const;
       
  3069 
       
  3070 protected:
       
  3071     virtual void accept0(ASTVisitor *visitor);
       
  3072     virtual bool match0(AST *, ASTMatcher *);
       
  3073 };
       
  3074 
       
  3075 class CPLUSPLUS_EXPORT ObjCFastEnumerationAST: public StatementAST
       
  3076 {
       
  3077 public:
       
  3078     unsigned for_token;
       
  3079     unsigned lparen_token;
       
  3080 
       
  3081     // declaration
       
  3082     SpecifierListAST *type_specifier_list;
       
  3083     DeclaratorAST *declarator;
       
  3084     // or an expression
       
  3085     ExpressionAST *initializer;
       
  3086 
       
  3087     unsigned in_token;
       
  3088     ExpressionAST *fast_enumeratable_expression;
       
  3089     unsigned rparen_token;
       
  3090     StatementAST *statement;
       
  3091 
       
  3092 public: // annotations
       
  3093     Block *symbol;
       
  3094 
       
  3095 public:
       
  3096     virtual ObjCFastEnumerationAST *asObjCFastEnumeration() { return this; }
       
  3097 
       
  3098     virtual unsigned firstToken() const;
       
  3099     virtual unsigned lastToken() const;
       
  3100 
       
  3101     virtual ObjCFastEnumerationAST *clone(MemoryPool *pool) const;
       
  3102 
       
  3103 protected:
       
  3104     virtual void accept0(ASTVisitor *visitor);
       
  3105     virtual bool match0(AST *, ASTMatcher *);
       
  3106 };
       
  3107 
       
  3108 class CPLUSPLUS_EXPORT ObjCSynchronizedStatementAST: public StatementAST
       
  3109 {
       
  3110 public:
       
  3111     unsigned synchronized_token;
       
  3112     unsigned lparen_token;
       
  3113     ExpressionAST *synchronized_object;
       
  3114     unsigned rparen_token;
       
  3115     StatementAST *statement;
       
  3116 
       
  3117 public:
       
  3118     virtual ObjCSynchronizedStatementAST *asObjCSynchronizedStatement() { return this; }
       
  3119 
       
  3120     virtual unsigned firstToken() const;
       
  3121     virtual unsigned lastToken() const;
       
  3122 
       
  3123     virtual ObjCSynchronizedStatementAST *clone(MemoryPool *pool) const;
       
  3124 
       
  3125 protected:
       
  3126     virtual void accept0(ASTVisitor *visitor);
       
  3127     virtual bool match0(AST *, ASTMatcher *);
       
  3128 };
       
  3129 
       
  3130 } // end of namespace CPlusPlus
       
  3131 
       
  3132 
       
  3133 #endif // CPLUSPLUS_AST_H