summaryrefslogtreecommitdiff
path: root/shared/cplusplus/AST.h
diff options
context:
space:
mode:
Diffstat (limited to 'shared/cplusplus/AST.h')
-rw-r--r--shared/cplusplus/AST.h1722
1 files changed, 1722 insertions, 0 deletions
diff --git a/shared/cplusplus/AST.h b/shared/cplusplus/AST.h
new file mode 100644
index 0000000000..e692a60976
--- /dev/null
+++ b/shared/cplusplus/AST.h
@@ -0,0 +1,1722 @@
+/***************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+**
+** Non-Open Source Usage
+**
+** Licensees may use this file in accordance with the Qt Beta Version
+** License Agreement, Agreement version 2.2 provided with the Software or,
+** alternatively, in accordance with the terms contained in a written
+** agreement between you and Nokia.
+**
+** GNU General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the packaging
+** of this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+**
+** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt GPL Exception version
+** 1.2, included in the file GPL_EXCEPTION.txt in this package.
+**
+***************************************************************************/
+// Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#ifndef CPLUSPLUS_AST_H
+#define CPLUSPLUS_AST_H
+
+#include "CPlusPlusForwardDeclarations.h"
+#include "ASTfwd.h"
+#include <new>
+
+CPLUSPLUS_BEGIN_HEADER
+CPLUSPLUS_BEGIN_NAMESPACE
+
+class CPLUSPLUS_EXPORT AST
+{
+ AST(const AST &other);
+ void operator =(const AST &other);
+
+public:
+ AST();
+ virtual ~AST();
+
+ void accept(ASTVisitor *visitor);
+
+ static void accept(AST *ast, ASTVisitor *visitor)
+ { if (ast) ast->accept(visitor); }
+
+ void *operator new(size_t size, MemoryPool *pool);
+ void operator delete(void *);
+ void operator delete(void *, MemoryPool *);
+
+ virtual unsigned firstToken() const = 0;
+ virtual unsigned lastToken() const = 0;
+
+ AccessDeclarationAST *asAccessDeclaration();
+ ArrayAccessAST *asArrayAccess();
+ ArrayDeclaratorAST *asArrayDeclarator();
+ ArrayInitializerAST *asArrayInitializer();
+ AsmDefinitionAST *asAsmDefinition();
+ AttributeAST *asAttribute();
+ AttributeSpecifierAST *asAttributeSpecifier();
+ BaseSpecifierAST *asBaseSpecifier();
+ QtMethodAST *asQtMethod();
+ BinaryExpressionAST *asBinaryExpression();
+ BoolLiteralAST *asBoolLiteral();
+ BreakStatementAST *asBreakStatement();
+ CallAST *asCall();
+ CaseStatementAST *asCaseStatement();
+ CastExpressionAST *asCastExpression();
+ CatchClauseAST *asCatchClause();
+ ClassSpecifierAST *asClassSpecifier();
+ CompoundStatementAST *asCompoundStatement();
+ ConditionAST *asCondition();
+ ConditionalExpressionAST *asConditionalExpression();
+ ContinueStatementAST *asContinueStatement();
+ ConversionFunctionIdAST *asConversionFunctionId();
+ CoreDeclaratorAST *asCoreDeclarator();
+ CppCastExpressionAST *asCppCastExpression();
+ CtorInitializerAST *asCtorInitializer();
+ DeclarationAST *asDeclaration();
+ DeclarationStatementAST *asDeclarationStatement();
+ DeclaratorAST *asDeclarator();
+ DeclaratorIdAST *asDeclaratorId();
+ DeclaratorListAST *asDeclaratorList();
+ DeleteExpressionAST *asDeleteExpression();
+ DestructorNameAST *asDestructorName();
+ DoStatementAST *asDoStatement();
+ ElaboratedTypeSpecifierAST *asElaboratedTypeSpecifier();
+ EmptyDeclarationAST *asEmptyDeclaration();
+ EnumSpecifierAST *asEnumSpecifier();
+ EnumeratorAST *asEnumerator();
+ ExceptionDeclarationAST *asExceptionDeclaration();
+ ExceptionSpecificationAST *asExceptionSpecification();
+ ExpressionAST *asExpression();
+ ExpressionListAST *asExpressionList();
+ ExpressionOrDeclarationStatementAST *asExpressionOrDeclarationStatement();
+ ExpressionStatementAST *asExpressionStatement();
+ ForStatementAST *asForStatement();
+ FunctionDeclaratorAST *asFunctionDeclarator();
+ FunctionDefinitionAST *asFunctionDefinition();
+ GotoStatementAST *asGotoStatement();
+ IfStatementAST *asIfStatement();
+ LabeledStatementAST *asLabeledStatement();
+ LinkageBodyAST *asLinkageBody();
+ LinkageSpecificationAST *asLinkageSpecification();
+ MemInitializerAST *asMemInitializer();
+ MemberAccessAST *asMemberAccess();
+ NameAST *asName();
+ NamedTypeSpecifierAST *asNamedTypeSpecifier();
+ NamespaceAST *asNamespace();
+ NamespaceAliasDefinitionAST *asNamespaceAliasDefinition();
+ NestedDeclaratorAST *asNestedDeclarator();
+ NestedExpressionAST *asNestedExpression();
+ NestedNameSpecifierAST *asNestedNameSpecifier();
+ NewDeclaratorAST *asNewDeclarator();
+ NewExpressionAST *asNewExpression();
+ NewInitializerAST *asNewInitializer();
+ NewTypeIdAST *asNewTypeId();
+ NumericLiteralAST *asNumericLiteral();
+ OperatorAST *asOperator();
+ OperatorFunctionIdAST *asOperatorFunctionId();
+ ParameterDeclarationAST *asParameterDeclaration();
+ ParameterDeclarationClauseAST *asParameterDeclarationClause();
+ PointerAST *asPointer();
+ PointerToMemberAST *asPointerToMember();
+ PostIncrDecrAST *asPostIncrDecr();
+ PostfixAST *asPostfix();
+ PostfixDeclaratorAST *asPostfixDeclarator();
+ PostfixExpressionAST *asPostfixExpression();
+ PtrOperatorAST *asPtrOperator();
+ QualifiedNameAST *asQualifiedName();
+ ReferenceAST *asReference();
+ ReturnStatementAST *asReturnStatement();
+ SimpleDeclarationAST *asSimpleDeclaration();
+ SimpleNameAST *asSimpleName();
+ SimpleSpecifierAST *asSimpleSpecifier();
+ SizeofExpressionAST *asSizeofExpression();
+ SpecifierAST *asSpecifier();
+ StatementAST *asStatement();
+ StringLiteralAST *asStringLiteral();
+ SwitchStatementAST *asSwitchStatement();
+ TemplateArgumentListAST *asTemplateArgumentList();
+ TemplateDeclarationAST *asTemplateDeclaration();
+ TemplateIdAST *asTemplateId();
+ TemplateTypeParameterAST *asTemplateTypeParameter();
+ ThisExpressionAST *asThisExpression();
+ ThrowExpressionAST *asThrowExpression();
+ TranslationUnitAST *asTranslationUnit();
+ TryBlockStatementAST *asTryBlockStatement();
+ TypeConstructorCallAST *asTypeConstructorCall();
+ TypeIdAST *asTypeId();
+ TypeidExpressionAST *asTypeidExpression();
+ TypenameCallExpressionAST *asTypenameCallExpression();
+ TypenameTypeParameterAST *asTypenameTypeParameter();
+ TypeofSpecifierAST *asTypeofSpecifier();
+ UnaryExpressionAST *asUnaryExpression();
+ UsingAST *asUsing();
+ UsingDirectiveAST *asUsingDirective();
+ WhileStatementAST *asWhileStatement();
+
+protected:
+ virtual void accept0(ASTVisitor *visitor) = 0;
+};
+
+class CPLUSPLUS_EXPORT SpecifierAST: public AST
+{
+public:
+ SpecifierAST *next;
+};
+
+class CPLUSPLUS_EXPORT SimpleSpecifierAST: public SpecifierAST
+{
+public:
+ unsigned specifier_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT AttributeSpecifierAST: public SpecifierAST
+{
+public:
+ unsigned attribute_token;
+ unsigned first_lparen_token;
+ unsigned second_lparen_token;
+ AttributeAST *attributes;
+ unsigned first_rparen_token;
+ unsigned second_rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT AttributeAST: public AST
+{
+public:
+ unsigned identifier_token;
+ unsigned lparen_token;
+ unsigned tag_token;
+ ExpressionListAST *expression_list;
+ unsigned rparen_token;
+ AttributeAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TypeofSpecifierAST: public SpecifierAST
+{
+public:
+ unsigned typeof_token;
+ ExpressionAST *expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT StatementAST: public AST
+{
+public:
+ StatementAST *next;
+};
+
+class CPLUSPLUS_EXPORT ExpressionAST: public AST
+{
+public:
+};
+
+class CPLUSPLUS_EXPORT DeclarationAST: public AST
+{
+public:
+ DeclarationAST *next;
+};
+
+class CPLUSPLUS_EXPORT CoreDeclaratorAST: public AST
+{
+public:
+};
+
+class CPLUSPLUS_EXPORT PostfixDeclaratorAST: public AST
+{
+public:
+ PostfixDeclaratorAST *next;
+};
+
+class CPLUSPLUS_EXPORT DeclaratorAST: public AST
+{
+public:
+ PtrOperatorAST *ptr_operators;
+ CoreDeclaratorAST *core_declarator;
+ PostfixDeclaratorAST *postfix_declarators;
+ SpecifierAST *attributes;
+ ExpressionAST *initializer;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ExpressionListAST: public ExpressionAST
+{
+public:
+ ExpressionAST *expression;
+ ExpressionListAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT SimpleDeclarationAST: public DeclarationAST
+{
+public:
+ SpecifierAST *decl_specifier_seq;
+ DeclaratorListAST *declarators;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT EmptyDeclarationAST: public DeclarationAST
+{
+public:
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT AccessDeclarationAST: public DeclarationAST
+{
+public:
+ unsigned access_specifier_token;
+ unsigned slots_token;
+ unsigned colon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT AsmDefinitionAST: public DeclarationAST
+{
+public:
+ unsigned asm_token;
+ SpecifierAST *cv_qualifier_seq;
+ unsigned lparen_token;
+ unsigned rparen_token;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT BaseSpecifierAST: public AST
+{
+public:
+ unsigned token_virtual;
+ unsigned token_access_specifier;
+ NameAST *name;
+ BaseSpecifierAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT QtMethodAST: public ExpressionAST
+{
+public:
+ unsigned method_token;
+ unsigned lparen_token;
+ DeclaratorAST *declarator;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT BinaryExpressionAST: public ExpressionAST
+{
+public:
+ unsigned binary_op_token;
+ ExpressionAST *left_expression;
+ ExpressionAST *right_expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT CastExpressionAST: public ExpressionAST
+{
+public:
+ unsigned lparen_token;
+ ExpressionAST *type_id;
+ unsigned rparen_token;
+ ExpressionAST *expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ClassSpecifierAST: public SpecifierAST
+{
+public:
+ unsigned classkey_token;
+ SpecifierAST *attributes;
+ NameAST *name;
+ BaseSpecifierAST *base_clause;
+ unsigned lbrace_token;
+ DeclarationAST *member_specifiers;
+ unsigned rbrace_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT CaseStatementAST: public StatementAST
+{
+public:
+ unsigned case_token;
+ ExpressionAST *expression;
+ unsigned colon_token;
+ StatementAST *statement;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT CompoundStatementAST: public StatementAST
+{
+public:
+ unsigned lbrace_token;
+ StatementAST *statements;
+ unsigned rbrace_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ConditionAST: public ExpressionAST
+{
+public:
+ SpecifierAST *type_specifier;
+ DeclaratorAST *declarator;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ConditionalExpressionAST: public ExpressionAST
+{
+public:
+ ExpressionAST *condition;
+ unsigned question_token;
+ ExpressionAST *left_expression;
+ unsigned colon_token;
+ ExpressionAST *right_expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT CppCastExpressionAST: public ExpressionAST
+{
+public:
+ unsigned cast_token;
+ unsigned less_token;
+ ExpressionAST *type_id;
+ unsigned greater_token;
+ unsigned lparen_token;
+ ExpressionAST *expression;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT CtorInitializerAST: public AST
+{
+public:
+ unsigned colon_token;
+ MemInitializerAST *member_initializers;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT DeclarationStatementAST: public StatementAST
+{
+public:
+ DeclarationAST *declaration;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT DeclaratorIdAST: public CoreDeclaratorAST
+{
+public:
+ NameAST *name;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NestedDeclaratorAST: public CoreDeclaratorAST
+{
+public:
+ unsigned lparen_token;
+ DeclaratorAST *declarator;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT FunctionDeclaratorAST: public PostfixDeclaratorAST
+{
+public:
+ unsigned lparen_token;
+ ParameterDeclarationClauseAST *parameters;
+ unsigned rparen_token;
+ SpecifierAST *cv_qualifier_seq;
+ ExceptionSpecificationAST *exception_specification;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ArrayDeclaratorAST: public PostfixDeclaratorAST
+{
+public:
+ unsigned lbracket_token;
+ ExpressionAST *expression;
+ unsigned rbracket_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT DeclaratorListAST: public AST
+{
+public:
+ DeclaratorAST *declarator;
+ DeclaratorListAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT DeleteExpressionAST: public ExpressionAST
+{
+public:
+ unsigned scope_token;
+ unsigned delete_token;
+ unsigned lbracket_token;
+ unsigned rbracket_token;
+ ExpressionAST *expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT DoStatementAST: public StatementAST
+{
+public:
+ unsigned do_token;
+ StatementAST *statement;
+ unsigned while_token;
+ unsigned lparen_token;
+ ExpressionAST *expression;
+ unsigned rparen_token;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NamedTypeSpecifierAST: public SpecifierAST
+{
+public:
+ NameAST *name;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ElaboratedTypeSpecifierAST: public SpecifierAST
+{
+public:
+ unsigned classkey_token;
+ NameAST *name;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT EnumSpecifierAST: public SpecifierAST
+{
+public:
+ unsigned enum_token;
+ NameAST *name;
+ unsigned lbrace_token;
+ EnumeratorAST *enumerators;
+ unsigned rbrace_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT EnumeratorAST: public AST
+{
+public:
+ unsigned identifier_token;
+ unsigned equal_token;
+ ExpressionAST *expression;
+ EnumeratorAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ExceptionDeclarationAST: public DeclarationAST
+{
+public:
+ SpecifierAST *type_specifier;
+ DeclaratorAST *declarator;
+ unsigned dot_dot_dot_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ExceptionSpecificationAST: public AST
+{
+public:
+ unsigned throw_token;
+ unsigned lparen_token;
+ unsigned dot_dot_dot_token;
+ ExpressionListAST *type_ids;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ExpressionOrDeclarationStatementAST: public StatementAST
+{
+public:
+ StatementAST *expression;
+ StatementAST *declaration;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ExpressionStatementAST: public StatementAST
+{
+public:
+ ExpressionAST *expression;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT FunctionDefinitionAST: public DeclarationAST
+{
+public:
+ SpecifierAST *decl_specifier_seq;
+ DeclaratorAST *declarator;
+ CtorInitializerAST *ctor_initializer;
+ StatementAST *function_body;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ForStatementAST: public StatementAST
+{
+public:
+ unsigned for_token;
+ unsigned lparen_token;
+ StatementAST *initializer;
+ ExpressionAST *condition;
+ unsigned semicolon_token;
+ ExpressionAST *expression;
+ unsigned rparen_token;
+ StatementAST *statement;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT IfStatementAST: public StatementAST
+{
+public:
+ unsigned if_token;
+ unsigned lparen_token;
+ ExpressionAST *condition;
+ unsigned rparen_token;
+ StatementAST *statement;
+ unsigned else_token;
+ StatementAST *else_statement;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ArrayInitializerAST: public ExpressionAST
+{
+public:
+ unsigned lbrace_token;
+ ExpressionListAST *expression_list;
+ unsigned rbrace_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT LabeledStatementAST: public StatementAST
+{
+public:
+ unsigned label_token;
+ unsigned colon_token;
+ StatementAST *statement;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT LinkageBodyAST: public DeclarationAST
+{
+public:
+ unsigned lbrace_token;
+ DeclarationAST *declarations;
+ unsigned rbrace_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT LinkageSpecificationAST: public DeclarationAST
+{
+public:
+ unsigned extern_token;
+ unsigned extern_type;
+ DeclarationAST *declaration;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT MemInitializerAST: public AST
+{
+public:
+ NameAST *name;
+ unsigned lparen_token;
+ ExpressionAST *expression;
+ unsigned rparen_token;
+ MemInitializerAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NameAST: public ExpressionAST
+{
+public:
+};
+
+class CPLUSPLUS_EXPORT NestedNameSpecifierAST: public AST
+{
+public:
+ NameAST *class_or_namespace_name;
+ unsigned scope_token;
+ NestedNameSpecifierAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT QualifiedNameAST: public NameAST
+{
+public:
+ unsigned global_scope_token;
+ NestedNameSpecifierAST *nested_name_specifier;
+ NameAST *unqualified_name;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT OperatorFunctionIdAST: public NameAST
+{
+public:
+ unsigned operator_token;
+ OperatorAST *op;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ConversionFunctionIdAST: public NameAST
+{
+public:
+ unsigned operator_token;
+ SpecifierAST *type_specifier;
+ PtrOperatorAST *ptr_operators;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT SimpleNameAST: public NameAST
+{
+public:
+ unsigned identifier_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT DestructorNameAST: public NameAST
+{
+public:
+ unsigned tilde_token;
+ unsigned identifier_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TemplateIdAST: public NameAST
+{
+public:
+ unsigned identifier_token;
+ unsigned less_token;
+ TemplateArgumentListAST *template_arguments;
+ unsigned greater_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NamespaceAST: public DeclarationAST
+{
+public:
+ unsigned namespace_token;
+ unsigned identifier_token;
+ SpecifierAST *attributes;
+ DeclarationAST *linkage_body;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NamespaceAliasDefinitionAST: public DeclarationAST
+{
+public:
+ unsigned namespace_token;
+ unsigned namespace_name;
+ unsigned equal_token;
+ NameAST *name;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NewDeclaratorAST: public AST
+{
+public:
+ PtrOperatorAST *ptr_operators;
+ NewDeclaratorAST *declarator;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NewExpressionAST: public ExpressionAST
+{
+public:
+ unsigned scope_token;
+ unsigned new_token;
+ ExpressionAST *expression;
+ ExpressionAST *type_id;
+ NewTypeIdAST *new_type_id;
+ NewInitializerAST *new_initializer;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NewInitializerAST: public AST
+{
+public:
+ unsigned lparen_token;
+ ExpressionAST *expression;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NewTypeIdAST: public AST
+{
+public:
+ SpecifierAST *type_specifier;
+ NewInitializerAST *new_initializer;
+ NewDeclaratorAST *new_declarator;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT OperatorAST: public AST
+{
+public:
+ unsigned op_token;
+ unsigned open_token;
+ unsigned close_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ParameterDeclarationAST: public DeclarationAST
+{
+public:
+ SpecifierAST *type_specifier;
+ DeclaratorAST *declarator;
+ unsigned equal_token;
+ ExpressionAST *expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ParameterDeclarationClauseAST: public AST
+{
+public:
+ DeclarationAST *parameter_declarations;
+ unsigned dot_dot_dot_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT PostfixAST: public AST
+{
+public:
+ PostfixAST *next;
+};
+
+class CPLUSPLUS_EXPORT CallAST: public PostfixAST
+{
+public:
+ unsigned lparen_token;
+ ExpressionListAST *expression_list;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ArrayAccessAST: public PostfixAST
+{
+public:
+ unsigned lbracket_token;
+ ExpressionAST *expression;
+ unsigned rbracket_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT PostIncrDecrAST: public PostfixAST
+{
+public:
+ unsigned incr_decr_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT MemberAccessAST: public PostfixAST
+{
+public:
+ unsigned access_token;
+ unsigned template_token;
+ NameAST *member_name;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TypeidExpressionAST: public ExpressionAST
+{
+public:
+ unsigned typeid_token;
+ unsigned lparen_token;
+ ExpressionAST *expression;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TypenameCallExpressionAST: public ExpressionAST
+{
+public:
+ unsigned typename_token;
+ NameAST *name;
+ unsigned lparen_token;
+ ExpressionListAST *expression_list;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TypeConstructorCallAST: public ExpressionAST
+{
+public:
+ SpecifierAST *type_specifier;
+ unsigned lparen_token;
+ ExpressionListAST *expression_list;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT PostfixExpressionAST: public ExpressionAST
+{
+public:
+ ExpressionAST *base_expression;
+ PostfixAST *postfix_expressions;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT PtrOperatorAST: public AST
+{
+public:
+ PtrOperatorAST *next;
+};
+
+class CPLUSPLUS_EXPORT PointerToMemberAST: public PtrOperatorAST
+{
+public:
+ unsigned global_scope_token;
+ NestedNameSpecifierAST *nested_name_specifier;
+ unsigned star_token;
+ SpecifierAST *cv_qualifier_seq;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT PointerAST: public PtrOperatorAST
+{
+public:
+ unsigned star_token;
+ SpecifierAST *cv_qualifier_seq;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ReferenceAST: public PtrOperatorAST
+{
+public:
+ unsigned amp_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT BreakStatementAST: public StatementAST
+{
+public:
+ unsigned break_token;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ContinueStatementAST: public StatementAST
+{
+public:
+ unsigned continue_token;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT GotoStatementAST: public StatementAST
+{
+public:
+ unsigned goto_token;
+ unsigned identifier_token;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ReturnStatementAST: public StatementAST
+{
+public:
+ unsigned return_token;
+ ExpressionAST *expression;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT SizeofExpressionAST: public ExpressionAST
+{
+public:
+ unsigned sizeof_token;
+ ExpressionAST *expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NumericLiteralAST: public ExpressionAST
+{
+public:
+ unsigned token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT BoolLiteralAST: public ExpressionAST
+{
+public:
+ unsigned token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ThisExpressionAST: public ExpressionAST
+{
+public:
+ unsigned this_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT NestedExpressionAST: public ExpressionAST
+{
+public:
+ unsigned lparen_token;
+ ExpressionAST *expression;
+ unsigned rparen_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT StringLiteralAST: public ExpressionAST
+{
+public:
+ unsigned token;
+ StringLiteralAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT SwitchStatementAST: public StatementAST
+{
+public:
+ unsigned switch_token;
+ unsigned lparen_token;
+ ExpressionAST *condition;
+ unsigned rparen_token;
+ StatementAST *statement;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TemplateArgumentListAST: public AST
+{
+public:
+ ExpressionAST *template_argument;
+ TemplateArgumentListAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TemplateDeclarationAST: public DeclarationAST
+{
+public:
+ unsigned export_token;
+ unsigned template_token;
+ unsigned less_token;
+ DeclarationAST *template_parameters;
+ unsigned greater_token;
+ DeclarationAST *declaration;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT ThrowExpressionAST: public ExpressionAST
+{
+public:
+ unsigned throw_token;
+ ExpressionAST *expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TranslationUnitAST: public AST
+{
+public:
+ DeclarationAST *declarations;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TryBlockStatementAST: public StatementAST
+{
+public:
+ unsigned try_token;
+ StatementAST *statement;
+ CatchClauseAST *catch_clause_seq;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT CatchClauseAST: public StatementAST
+{
+public:
+ unsigned catch_token;
+ unsigned lparen_token;
+ ExceptionDeclarationAST *exception_declaration;
+ unsigned rparen_token;
+ StatementAST *statement;
+ CatchClauseAST *next;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TypeIdAST: public ExpressionAST
+{
+public:
+ SpecifierAST *type_specifier;
+ DeclaratorAST *declarator;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TypenameTypeParameterAST: public DeclarationAST
+{
+public:
+ unsigned classkey_token;
+ NameAST *name;
+ unsigned equal_token;
+ ExpressionAST *type_id;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT TemplateTypeParameterAST: public DeclarationAST
+{
+public:
+ unsigned template_token;
+ unsigned less_token;
+ DeclarationAST *template_parameters;
+ unsigned greater_token;
+ unsigned class_token;
+ NameAST *name;
+ unsigned equal_token;
+ ExpressionAST *type_id;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT UnaryExpressionAST: public ExpressionAST
+{
+public:
+ unsigned unary_op_token;
+ ExpressionAST *expression;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT UsingAST: public DeclarationAST
+{
+public:
+ unsigned using_token;
+ unsigned typename_token;
+ NameAST *name;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT UsingDirectiveAST: public DeclarationAST
+{
+public:
+ unsigned using_token;
+ unsigned namespace_token;
+ NameAST *name;
+ unsigned semicolon_token;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+class CPLUSPLUS_EXPORT WhileStatementAST: public StatementAST
+{
+public:
+ unsigned while_token;
+ unsigned lparen_token;
+ ExpressionAST *condition;
+ unsigned rparen_token;
+ StatementAST *statement;
+
+public:
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+};
+
+CPLUSPLUS_END_NAMESPACE
+CPLUSPLUS_END_HEADER
+
+#endif // CPLUSPLUS_AST_H