annotate generator/parser/ast.h @ 382:1d56b2a2e10c

Fixes to debugging stuff. Added size_t as primitive type to workaround Qwt build failure in debug
author Max Samukha <maxter@spambox.com>
date Mon, 12 Jul 2010 20:36:07 +0300
parents 09a0f1d048f2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /****************************************************************************
e78566595089 initial import
mandel
parents:
diff changeset
2 **
52
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
3 ** Copyright (C) 1992-2009 Nokia. All rights reserved.
1
e78566595089 initial import
mandel
parents:
diff changeset
4 ** Copyright (C) 2002-2005 Roberto Raggi <roberto@kdevelop.org>
e78566595089 initial import
mandel
parents:
diff changeset
5 **
e78566595089 initial import
mandel
parents:
diff changeset
6 ** This file is part of Qt Jambi.
e78566595089 initial import
mandel
parents:
diff changeset
7 **
52
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
8 ** Commercial Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
9 Licensees holding valid Qt Commercial licenses may use this file in
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
10 accordance with the Qt Commercial License Agreement provided with the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
11 Software or, alternatively, in accordance with the terms contained in
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
12 a written agreement between you and Nokia.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
13
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
14 GNU Lesser General Public License Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
15 Alternatively, this file may be used under the terms of the GNU Lesser
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
16 General Public License version 2.1 as published by the Free Software
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
17 Foundation and appearing in the file LICENSE.LGPL included in the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
18 packaging of this file. Please review the following information to
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
19 ensure the GNU Lesser General Public License version 2.1 requirements
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
20 will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
21
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
22 In addition, as a special exception, Nokia gives you certain
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
23 additional rights. These rights are described in the Nokia Qt LGPL
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
24 Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
25 package.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
26
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
27 GNU General Public License Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
28 Alternatively, this file may be used under the terms of the GNU
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
29 General Public License version 3.0 as published by the Free Software
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
30 Foundation and appearing in the file LICENSE.GPL included in the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
31 packaging of this file. Please review the following information to
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
32 ensure the GNU General Public License version 3.0 requirements will be
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
33 met: http://www.gnu.org/copyleft/gpl.html.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
34
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
35 If you are unsure which license is appropriate for your use, please
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
36 contact the sales department at qt-sales@nokia.com.
1
e78566595089 initial import
mandel
parents:
diff changeset
37
e78566595089 initial import
mandel
parents:
diff changeset
38 **
e78566595089 initial import
mandel
parents:
diff changeset
39 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
e78566595089 initial import
mandel
parents:
diff changeset
40 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e78566595089 initial import
mandel
parents:
diff changeset
41 **
e78566595089 initial import
mandel
parents:
diff changeset
42 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
43
e78566595089 initial import
mandel
parents:
diff changeset
44
e78566595089 initial import
mandel
parents:
diff changeset
45 #ifndef AST_H
e78566595089 initial import
mandel
parents:
diff changeset
46 #define AST_H
e78566595089 initial import
mandel
parents:
diff changeset
47
e78566595089 initial import
mandel
parents:
diff changeset
48 #include "smallobject.h"
e78566595089 initial import
mandel
parents:
diff changeset
49 #include "list.h"
e78566595089 initial import
mandel
parents:
diff changeset
50
e78566595089 initial import
mandel
parents:
diff changeset
51 class QString;
e78566595089 initial import
mandel
parents:
diff changeset
52
e78566595089 initial import
mandel
parents:
diff changeset
53 #define DECLARE_AST_NODE(k) \
e78566595089 initial import
mandel
parents:
diff changeset
54 enum { __node_kind = Kind_##k };
e78566595089 initial import
mandel
parents:
diff changeset
55
e78566595089 initial import
mandel
parents:
diff changeset
56 class TokenStream;
e78566595089 initial import
mandel
parents:
diff changeset
57
e78566595089 initial import
mandel
parents:
diff changeset
58 struct AccessSpecifierAST;
e78566595089 initial import
mandel
parents:
diff changeset
59 struct AsmDefinitionAST;
e78566595089 initial import
mandel
parents:
diff changeset
60 struct BaseClauseAST;
e78566595089 initial import
mandel
parents:
diff changeset
61 struct BaseSpecifierAST;
e78566595089 initial import
mandel
parents:
diff changeset
62 struct BinaryExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
63 struct CastExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
64 struct ClassMemberAccessAST;
e78566595089 initial import
mandel
parents:
diff changeset
65 struct ClassSpecifierAST;
e78566595089 initial import
mandel
parents:
diff changeset
66 struct CompoundStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
67 struct ConditionAST;
e78566595089 initial import
mandel
parents:
diff changeset
68 struct ConditionalExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
69 struct CppCastExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
70 struct CtorInitializerAST;
e78566595089 initial import
mandel
parents:
diff changeset
71 struct DeclarationAST;
e78566595089 initial import
mandel
parents:
diff changeset
72 struct DeclarationStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
73 struct DeclaratorAST;
e78566595089 initial import
mandel
parents:
diff changeset
74 struct DeleteExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
75 struct DoStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
76 struct ElaboratedTypeSpecifierAST;
e78566595089 initial import
mandel
parents:
diff changeset
77 struct EnumSpecifierAST;
e78566595089 initial import
mandel
parents:
diff changeset
78 struct EnumeratorAST;
e78566595089 initial import
mandel
parents:
diff changeset
79 struct ExceptionSpecificationAST;
e78566595089 initial import
mandel
parents:
diff changeset
80 struct ExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
81 struct ExpressionOrDeclarationStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
82 struct ExpressionStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
83 struct ForStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
84 struct FunctionCallAST;
e78566595089 initial import
mandel
parents:
diff changeset
85 struct FunctionDefinitionAST;
e78566595089 initial import
mandel
parents:
diff changeset
86 struct IfStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
87 struct IncrDecrExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
88 struct InitDeclaratorAST;
e78566595089 initial import
mandel
parents:
diff changeset
89 struct InitializerAST;
e78566595089 initial import
mandel
parents:
diff changeset
90 struct InitializerClauseAST;
e78566595089 initial import
mandel
parents:
diff changeset
91 struct LabeledStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
92 struct LinkageBodyAST;
e78566595089 initial import
mandel
parents:
diff changeset
93 struct LinkageSpecificationAST;
e78566595089 initial import
mandel
parents:
diff changeset
94 struct MemInitializerAST;
e78566595089 initial import
mandel
parents:
diff changeset
95 struct NameAST;
e78566595089 initial import
mandel
parents:
diff changeset
96 struct NamespaceAST;
e78566595089 initial import
mandel
parents:
diff changeset
97 struct NamespaceAliasDefinitionAST;
e78566595089 initial import
mandel
parents:
diff changeset
98 struct NewDeclaratorAST;
e78566595089 initial import
mandel
parents:
diff changeset
99 struct NewExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
100 struct NewInitializerAST;
e78566595089 initial import
mandel
parents:
diff changeset
101 struct NewTypeIdAST;
e78566595089 initial import
mandel
parents:
diff changeset
102 struct OperatorAST;
e78566595089 initial import
mandel
parents:
diff changeset
103 struct OperatorFunctionIdAST;
e78566595089 initial import
mandel
parents:
diff changeset
104 struct ParameterDeclarationAST;
e78566595089 initial import
mandel
parents:
diff changeset
105 struct ParameterDeclarationClauseAST;
e78566595089 initial import
mandel
parents:
diff changeset
106 struct PostfixExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
107 struct PrimaryExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
108 struct PtrOperatorAST;
e78566595089 initial import
mandel
parents:
diff changeset
109 struct PtrToMemberAST;
e78566595089 initial import
mandel
parents:
diff changeset
110 struct ReturnStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
111 struct SimpleDeclarationAST;
e78566595089 initial import
mandel
parents:
diff changeset
112 struct SimpleTypeSpecifierAST;
e78566595089 initial import
mandel
parents:
diff changeset
113 struct SizeofExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
114 struct StatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
115 struct StringLiteralAST;
e78566595089 initial import
mandel
parents:
diff changeset
116 struct SubscriptExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
117 struct SwitchStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
118 struct TemplateArgumentAST;
e78566595089 initial import
mandel
parents:
diff changeset
119 struct TemplateDeclarationAST;
e78566595089 initial import
mandel
parents:
diff changeset
120 struct TemplateParameterAST;
e78566595089 initial import
mandel
parents:
diff changeset
121 struct ThrowExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
122 struct TranslationUnitAST;
e78566595089 initial import
mandel
parents:
diff changeset
123 struct TryBlockStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
124 struct TypeIdAST;
e78566595089 initial import
mandel
parents:
diff changeset
125 struct TypeIdentificationAST;
e78566595089 initial import
mandel
parents:
diff changeset
126 struct TypeParameterAST;
e78566595089 initial import
mandel
parents:
diff changeset
127 struct TypeSpecifierAST;
e78566595089 initial import
mandel
parents:
diff changeset
128 struct TypedefAST;
e78566595089 initial import
mandel
parents:
diff changeset
129 struct UnaryExpressionAST;
e78566595089 initial import
mandel
parents:
diff changeset
130 struct UnqualifiedNameAST;
e78566595089 initial import
mandel
parents:
diff changeset
131 struct UsingAST;
e78566595089 initial import
mandel
parents:
diff changeset
132 struct UsingDirectiveAST;
e78566595089 initial import
mandel
parents:
diff changeset
133 struct WhileStatementAST;
e78566595089 initial import
mandel
parents:
diff changeset
134 struct WinDeclSpecAST;
e78566595089 initial import
mandel
parents:
diff changeset
135 struct QPropertyAST;
e78566595089 initial import
mandel
parents:
diff changeset
136 struct QEnumsAST;
e78566595089 initial import
mandel
parents:
diff changeset
137
e78566595089 initial import
mandel
parents:
diff changeset
138 struct AST
e78566595089 initial import
mandel
parents:
diff changeset
139 {
e78566595089 initial import
mandel
parents:
diff changeset
140 enum NODE_KIND
e78566595089 initial import
mandel
parents:
diff changeset
141 {
e78566595089 initial import
mandel
parents:
diff changeset
142 Kind_UNKNOWN = 0,
e78566595089 initial import
mandel
parents:
diff changeset
143
e78566595089 initial import
mandel
parents:
diff changeset
144 Kind_AccessSpecifier,
e78566595089 initial import
mandel
parents:
diff changeset
145 Kind_AsmDefinition,
e78566595089 initial import
mandel
parents:
diff changeset
146 Kind_BaseClause,
e78566595089 initial import
mandel
parents:
diff changeset
147 Kind_BaseSpecifier,
e78566595089 initial import
mandel
parents:
diff changeset
148 Kind_BinaryExpression,
e78566595089 initial import
mandel
parents:
diff changeset
149 Kind_CastExpression,
e78566595089 initial import
mandel
parents:
diff changeset
150 Kind_ClassMemberAccess,
e78566595089 initial import
mandel
parents:
diff changeset
151 Kind_ClassSpecifier,
e78566595089 initial import
mandel
parents:
diff changeset
152 Kind_CompoundStatement,
e78566595089 initial import
mandel
parents:
diff changeset
153 Kind_Condition,
e78566595089 initial import
mandel
parents:
diff changeset
154 Kind_ConditionalExpression,
e78566595089 initial import
mandel
parents:
diff changeset
155 Kind_CppCastExpression,
e78566595089 initial import
mandel
parents:
diff changeset
156 Kind_CtorInitializer,
e78566595089 initial import
mandel
parents:
diff changeset
157 Kind_DeclarationStatement,
e78566595089 initial import
mandel
parents:
diff changeset
158 Kind_Declarator,
e78566595089 initial import
mandel
parents:
diff changeset
159 Kind_DeleteExpression,
e78566595089 initial import
mandel
parents:
diff changeset
160 Kind_DoStatement,
e78566595089 initial import
mandel
parents:
diff changeset
161 Kind_ElaboratedTypeSpecifier,
e78566595089 initial import
mandel
parents:
diff changeset
162 Kind_EnumSpecifier,
e78566595089 initial import
mandel
parents:
diff changeset
163 Kind_Enumerator,
e78566595089 initial import
mandel
parents:
diff changeset
164 Kind_ExceptionSpecification,
e78566595089 initial import
mandel
parents:
diff changeset
165 Kind_ExpressionOrDeclarationStatement,
e78566595089 initial import
mandel
parents:
diff changeset
166 Kind_ExpressionStatement,
e78566595089 initial import
mandel
parents:
diff changeset
167 Kind_ForStatement,
e78566595089 initial import
mandel
parents:
diff changeset
168 Kind_FunctionCall,
e78566595089 initial import
mandel
parents:
diff changeset
169 Kind_FunctionDefinition,
e78566595089 initial import
mandel
parents:
diff changeset
170 Kind_IfStatement,
e78566595089 initial import
mandel
parents:
diff changeset
171 Kind_IncrDecrExpression,
e78566595089 initial import
mandel
parents:
diff changeset
172 Kind_InitDeclarator,
e78566595089 initial import
mandel
parents:
diff changeset
173 Kind_Initializer,
e78566595089 initial import
mandel
parents:
diff changeset
174 Kind_InitializerClause,
e78566595089 initial import
mandel
parents:
diff changeset
175 Kind_LabeledStatement,
e78566595089 initial import
mandel
parents:
diff changeset
176 Kind_LinkageBody,
e78566595089 initial import
mandel
parents:
diff changeset
177 Kind_LinkageSpecification,
e78566595089 initial import
mandel
parents:
diff changeset
178 Kind_MemInitializer,
e78566595089 initial import
mandel
parents:
diff changeset
179 Kind_Name,
e78566595089 initial import
mandel
parents:
diff changeset
180 Kind_Namespace,
e78566595089 initial import
mandel
parents:
diff changeset
181 Kind_NamespaceAliasDefinition,
e78566595089 initial import
mandel
parents:
diff changeset
182 Kind_NewDeclarator,
e78566595089 initial import
mandel
parents:
diff changeset
183 Kind_NewExpression,
e78566595089 initial import
mandel
parents:
diff changeset
184 Kind_NewInitializer,
e78566595089 initial import
mandel
parents:
diff changeset
185 Kind_NewTypeId,
e78566595089 initial import
mandel
parents:
diff changeset
186 Kind_Operator,
e78566595089 initial import
mandel
parents:
diff changeset
187 Kind_OperatorFunctionId,
e78566595089 initial import
mandel
parents:
diff changeset
188 Kind_ParameterDeclaration,
e78566595089 initial import
mandel
parents:
diff changeset
189 Kind_ParameterDeclarationClause,
e78566595089 initial import
mandel
parents:
diff changeset
190 Kind_PostfixExpression,
e78566595089 initial import
mandel
parents:
diff changeset
191 Kind_PrimaryExpression,
e78566595089 initial import
mandel
parents:
diff changeset
192 Kind_PtrOperator,
e78566595089 initial import
mandel
parents:
diff changeset
193 Kind_PtrToMember,
e78566595089 initial import
mandel
parents:
diff changeset
194 Kind_ReturnStatement,
e78566595089 initial import
mandel
parents:
diff changeset
195 Kind_SimpleDeclaration,
e78566595089 initial import
mandel
parents:
diff changeset
196 Kind_SimpleTypeSpecifier,
e78566595089 initial import
mandel
parents:
diff changeset
197 Kind_SizeofExpression,
e78566595089 initial import
mandel
parents:
diff changeset
198 Kind_StringLiteral,
e78566595089 initial import
mandel
parents:
diff changeset
199 Kind_SubscriptExpression,
e78566595089 initial import
mandel
parents:
diff changeset
200 Kind_SwitchStatement,
e78566595089 initial import
mandel
parents:
diff changeset
201 Kind_TemplateArgument,
e78566595089 initial import
mandel
parents:
diff changeset
202 Kind_TemplateDeclaration,
e78566595089 initial import
mandel
parents:
diff changeset
203 Kind_TemplateParameter,
e78566595089 initial import
mandel
parents:
diff changeset
204 Kind_ThrowExpression,
e78566595089 initial import
mandel
parents:
diff changeset
205 Kind_TranslationUnit,
e78566595089 initial import
mandel
parents:
diff changeset
206 Kind_TryBlockStatement,
e78566595089 initial import
mandel
parents:
diff changeset
207 Kind_TypeId,
e78566595089 initial import
mandel
parents:
diff changeset
208 Kind_TypeIdentification,
e78566595089 initial import
mandel
parents:
diff changeset
209 Kind_TypeParameter,
e78566595089 initial import
mandel
parents:
diff changeset
210 Kind_Typedef,
e78566595089 initial import
mandel
parents:
diff changeset
211 Kind_UnaryExpression,
e78566595089 initial import
mandel
parents:
diff changeset
212 Kind_UnqualifiedName,
e78566595089 initial import
mandel
parents:
diff changeset
213 Kind_Using,
e78566595089 initial import
mandel
parents:
diff changeset
214 Kind_UsingDirective,
e78566595089 initial import
mandel
parents:
diff changeset
215 Kind_WhileStatement,
e78566595089 initial import
mandel
parents:
diff changeset
216 Kind_WinDeclSpec,
e78566595089 initial import
mandel
parents:
diff changeset
217 Kind_QPropertyAST,
e78566595089 initial import
mandel
parents:
diff changeset
218 Kind_ForwardDeclarationSpecifier,
e78566595089 initial import
mandel
parents:
diff changeset
219 Kind_QEnumsAST,
e78566595089 initial import
mandel
parents:
diff changeset
220
e78566595089 initial import
mandel
parents:
diff changeset
221 NODE_KIND_COUNT
e78566595089 initial import
mandel
parents:
diff changeset
222 };
e78566595089 initial import
mandel
parents:
diff changeset
223
e78566595089 initial import
mandel
parents:
diff changeset
224 QString toString(TokenStream *stream) const;
e78566595089 initial import
mandel
parents:
diff changeset
225
e78566595089 initial import
mandel
parents:
diff changeset
226 int kind;
e78566595089 initial import
mandel
parents:
diff changeset
227
e78566595089 initial import
mandel
parents:
diff changeset
228 std::size_t start_token;
e78566595089 initial import
mandel
parents:
diff changeset
229 std::size_t end_token;
e78566595089 initial import
mandel
parents:
diff changeset
230 };
e78566595089 initial import
mandel
parents:
diff changeset
231
e78566595089 initial import
mandel
parents:
diff changeset
232 struct TypeSpecifierAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
233 {
e78566595089 initial import
mandel
parents:
diff changeset
234 const ListNode<std::size_t> *cv;
e78566595089 initial import
mandel
parents:
diff changeset
235 };
e78566595089 initial import
mandel
parents:
diff changeset
236
e78566595089 initial import
mandel
parents:
diff changeset
237 struct StatementAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
238 {
e78566595089 initial import
mandel
parents:
diff changeset
239 };
e78566595089 initial import
mandel
parents:
diff changeset
240
e78566595089 initial import
mandel
parents:
diff changeset
241 struct ExpressionAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
242 {
e78566595089 initial import
mandel
parents:
diff changeset
243 };
e78566595089 initial import
mandel
parents:
diff changeset
244
e78566595089 initial import
mandel
parents:
diff changeset
245 struct DeclarationAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
246 {
e78566595089 initial import
mandel
parents:
diff changeset
247 };
e78566595089 initial import
mandel
parents:
diff changeset
248
e78566595089 initial import
mandel
parents:
diff changeset
249 struct AccessSpecifierAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
250 {
e78566595089 initial import
mandel
parents:
diff changeset
251 DECLARE_AST_NODE(AccessSpecifier)
e78566595089 initial import
mandel
parents:
diff changeset
252
e78566595089 initial import
mandel
parents:
diff changeset
253 const ListNode<std::size_t> *specs;
e78566595089 initial import
mandel
parents:
diff changeset
254 };
e78566595089 initial import
mandel
parents:
diff changeset
255
e78566595089 initial import
mandel
parents:
diff changeset
256 struct AsmDefinitionAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
257 {
e78566595089 initial import
mandel
parents:
diff changeset
258 DECLARE_AST_NODE(AsmDefinition)
e78566595089 initial import
mandel
parents:
diff changeset
259
e78566595089 initial import
mandel
parents:
diff changeset
260 const ListNode<std::size_t> *cv;
e78566595089 initial import
mandel
parents:
diff changeset
261 };
e78566595089 initial import
mandel
parents:
diff changeset
262
e78566595089 initial import
mandel
parents:
diff changeset
263 struct BaseClauseAST: public AST // ### kill me
e78566595089 initial import
mandel
parents:
diff changeset
264 {
e78566595089 initial import
mandel
parents:
diff changeset
265 DECLARE_AST_NODE(BaseClause)
e78566595089 initial import
mandel
parents:
diff changeset
266
e78566595089 initial import
mandel
parents:
diff changeset
267 const ListNode<BaseSpecifierAST*> *base_specifiers;
e78566595089 initial import
mandel
parents:
diff changeset
268 };
e78566595089 initial import
mandel
parents:
diff changeset
269
e78566595089 initial import
mandel
parents:
diff changeset
270 struct BaseSpecifierAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
271 {
e78566595089 initial import
mandel
parents:
diff changeset
272 DECLARE_AST_NODE(BaseSpecifier)
e78566595089 initial import
mandel
parents:
diff changeset
273
e78566595089 initial import
mandel
parents:
diff changeset
274 std::size_t virt;
e78566595089 initial import
mandel
parents:
diff changeset
275 std::size_t access_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
276 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
277 };
e78566595089 initial import
mandel
parents:
diff changeset
278
e78566595089 initial import
mandel
parents:
diff changeset
279 struct BinaryExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
280 {
e78566595089 initial import
mandel
parents:
diff changeset
281 DECLARE_AST_NODE(BinaryExpression)
e78566595089 initial import
mandel
parents:
diff changeset
282
e78566595089 initial import
mandel
parents:
diff changeset
283 std::size_t op;
e78566595089 initial import
mandel
parents:
diff changeset
284 ExpressionAST *left_expression;
e78566595089 initial import
mandel
parents:
diff changeset
285 ExpressionAST *right_expression;
e78566595089 initial import
mandel
parents:
diff changeset
286 };
e78566595089 initial import
mandel
parents:
diff changeset
287
e78566595089 initial import
mandel
parents:
diff changeset
288 struct CastExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
289 {
e78566595089 initial import
mandel
parents:
diff changeset
290 DECLARE_AST_NODE(CastExpression)
e78566595089 initial import
mandel
parents:
diff changeset
291
e78566595089 initial import
mandel
parents:
diff changeset
292 TypeIdAST *type_id;
e78566595089 initial import
mandel
parents:
diff changeset
293 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
294 };
e78566595089 initial import
mandel
parents:
diff changeset
295
e78566595089 initial import
mandel
parents:
diff changeset
296 struct ClassMemberAccessAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
297 {
e78566595089 initial import
mandel
parents:
diff changeset
298 DECLARE_AST_NODE(ClassMemberAccess)
e78566595089 initial import
mandel
parents:
diff changeset
299
e78566595089 initial import
mandel
parents:
diff changeset
300 std::size_t op;
e78566595089 initial import
mandel
parents:
diff changeset
301 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
302 };
e78566595089 initial import
mandel
parents:
diff changeset
303
e78566595089 initial import
mandel
parents:
diff changeset
304 struct ClassSpecifierAST: public TypeSpecifierAST
e78566595089 initial import
mandel
parents:
diff changeset
305 {
e78566595089 initial import
mandel
parents:
diff changeset
306 DECLARE_AST_NODE(ClassSpecifier)
e78566595089 initial import
mandel
parents:
diff changeset
307
e78566595089 initial import
mandel
parents:
diff changeset
308 WinDeclSpecAST *win_decl_specifiers;
e78566595089 initial import
mandel
parents:
diff changeset
309 std::size_t class_key;
e78566595089 initial import
mandel
parents:
diff changeset
310 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
311 BaseClauseAST *base_clause;
e78566595089 initial import
mandel
parents:
diff changeset
312 const ListNode<DeclarationAST*> *member_specs;
e78566595089 initial import
mandel
parents:
diff changeset
313 };
e78566595089 initial import
mandel
parents:
diff changeset
314
e78566595089 initial import
mandel
parents:
diff changeset
315 struct ForwardDeclarationSpecifierAST: public TypeSpecifierAST
e78566595089 initial import
mandel
parents:
diff changeset
316 {
e78566595089 initial import
mandel
parents:
diff changeset
317 DECLARE_AST_NODE(ForwardDeclarationSpecifier)
e78566595089 initial import
mandel
parents:
diff changeset
318
e78566595089 initial import
mandel
parents:
diff changeset
319 std::size_t class_key;
e78566595089 initial import
mandel
parents:
diff changeset
320 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
321 BaseClauseAST *base_clause;
e78566595089 initial import
mandel
parents:
diff changeset
322 };
e78566595089 initial import
mandel
parents:
diff changeset
323
e78566595089 initial import
mandel
parents:
diff changeset
324 struct CompoundStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
325 {
e78566595089 initial import
mandel
parents:
diff changeset
326 DECLARE_AST_NODE(CompoundStatement)
e78566595089 initial import
mandel
parents:
diff changeset
327
e78566595089 initial import
mandel
parents:
diff changeset
328 const ListNode<StatementAST*> *statements;
e78566595089 initial import
mandel
parents:
diff changeset
329 };
e78566595089 initial import
mandel
parents:
diff changeset
330
e78566595089 initial import
mandel
parents:
diff changeset
331 struct ConditionAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
332 {
e78566595089 initial import
mandel
parents:
diff changeset
333 DECLARE_AST_NODE(Condition)
e78566595089 initial import
mandel
parents:
diff changeset
334
e78566595089 initial import
mandel
parents:
diff changeset
335 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
336 DeclaratorAST *declarator;
e78566595089 initial import
mandel
parents:
diff changeset
337 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
338 };
e78566595089 initial import
mandel
parents:
diff changeset
339
e78566595089 initial import
mandel
parents:
diff changeset
340 struct ConditionalExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
341 {
e78566595089 initial import
mandel
parents:
diff changeset
342 DECLARE_AST_NODE(ConditionalExpression)
e78566595089 initial import
mandel
parents:
diff changeset
343
e78566595089 initial import
mandel
parents:
diff changeset
344 ExpressionAST *condition;
e78566595089 initial import
mandel
parents:
diff changeset
345 ExpressionAST *left_expression;
e78566595089 initial import
mandel
parents:
diff changeset
346 ExpressionAST *right_expression;
e78566595089 initial import
mandel
parents:
diff changeset
347 };
e78566595089 initial import
mandel
parents:
diff changeset
348
e78566595089 initial import
mandel
parents:
diff changeset
349 struct CppCastExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
350 {
e78566595089 initial import
mandel
parents:
diff changeset
351 DECLARE_AST_NODE(CppCastExpression)
e78566595089 initial import
mandel
parents:
diff changeset
352
e78566595089 initial import
mandel
parents:
diff changeset
353 std::size_t op;
e78566595089 initial import
mandel
parents:
diff changeset
354 TypeIdAST *type_id;
e78566595089 initial import
mandel
parents:
diff changeset
355 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
356 const ListNode<ExpressionAST*> *sub_expressions;
e78566595089 initial import
mandel
parents:
diff changeset
357 };
e78566595089 initial import
mandel
parents:
diff changeset
358
e78566595089 initial import
mandel
parents:
diff changeset
359 struct CtorInitializerAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
360 {
e78566595089 initial import
mandel
parents:
diff changeset
361 DECLARE_AST_NODE(CtorInitializer)
e78566595089 initial import
mandel
parents:
diff changeset
362
e78566595089 initial import
mandel
parents:
diff changeset
363 std::size_t colon;
e78566595089 initial import
mandel
parents:
diff changeset
364 const ListNode<MemInitializerAST*> *member_initializers;
e78566595089 initial import
mandel
parents:
diff changeset
365 };
e78566595089 initial import
mandel
parents:
diff changeset
366
e78566595089 initial import
mandel
parents:
diff changeset
367 struct DeclarationStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
368 {
e78566595089 initial import
mandel
parents:
diff changeset
369 DECLARE_AST_NODE(DeclarationStatement)
e78566595089 initial import
mandel
parents:
diff changeset
370
e78566595089 initial import
mandel
parents:
diff changeset
371 DeclarationAST *declaration;
e78566595089 initial import
mandel
parents:
diff changeset
372 };
e78566595089 initial import
mandel
parents:
diff changeset
373
e78566595089 initial import
mandel
parents:
diff changeset
374 struct DeclaratorAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
375 {
e78566595089 initial import
mandel
parents:
diff changeset
376 DECLARE_AST_NODE(Declarator)
e78566595089 initial import
mandel
parents:
diff changeset
377
e78566595089 initial import
mandel
parents:
diff changeset
378 const ListNode<PtrOperatorAST*> *ptr_ops;
e78566595089 initial import
mandel
parents:
diff changeset
379 DeclaratorAST *sub_declarator;
e78566595089 initial import
mandel
parents:
diff changeset
380 NameAST *id;
e78566595089 initial import
mandel
parents:
diff changeset
381 ExpressionAST *bit_expression;
e78566595089 initial import
mandel
parents:
diff changeset
382 const ListNode<ExpressionAST*> *array_dimensions;
e78566595089 initial import
mandel
parents:
diff changeset
383 ParameterDeclarationClauseAST *parameter_declaration_clause;
e78566595089 initial import
mandel
parents:
diff changeset
384 const ListNode<std::size_t> *fun_cv;
e78566595089 initial import
mandel
parents:
diff changeset
385 ExceptionSpecificationAST *exception_spec;
e78566595089 initial import
mandel
parents:
diff changeset
386 };
e78566595089 initial import
mandel
parents:
diff changeset
387
e78566595089 initial import
mandel
parents:
diff changeset
388 struct DeleteExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
389 {
e78566595089 initial import
mandel
parents:
diff changeset
390 DECLARE_AST_NODE(DeleteExpression)
e78566595089 initial import
mandel
parents:
diff changeset
391
e78566595089 initial import
mandel
parents:
diff changeset
392 std::size_t scope_token;
e78566595089 initial import
mandel
parents:
diff changeset
393 std::size_t delete_token;
e78566595089 initial import
mandel
parents:
diff changeset
394 std::size_t lbracket_token;
e78566595089 initial import
mandel
parents:
diff changeset
395 std::size_t rbracket_token;
e78566595089 initial import
mandel
parents:
diff changeset
396 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
397 };
e78566595089 initial import
mandel
parents:
diff changeset
398
e78566595089 initial import
mandel
parents:
diff changeset
399 struct DoStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
400 {
e78566595089 initial import
mandel
parents:
diff changeset
401 DECLARE_AST_NODE(DoStatement)
e78566595089 initial import
mandel
parents:
diff changeset
402
e78566595089 initial import
mandel
parents:
diff changeset
403 StatementAST *statement;
e78566595089 initial import
mandel
parents:
diff changeset
404 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
405 };
e78566595089 initial import
mandel
parents:
diff changeset
406
e78566595089 initial import
mandel
parents:
diff changeset
407 struct ElaboratedTypeSpecifierAST: public TypeSpecifierAST
e78566595089 initial import
mandel
parents:
diff changeset
408 {
e78566595089 initial import
mandel
parents:
diff changeset
409 DECLARE_AST_NODE(ElaboratedTypeSpecifier)
e78566595089 initial import
mandel
parents:
diff changeset
410
e78566595089 initial import
mandel
parents:
diff changeset
411 std::size_t type;
e78566595089 initial import
mandel
parents:
diff changeset
412 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
413 };
e78566595089 initial import
mandel
parents:
diff changeset
414
e78566595089 initial import
mandel
parents:
diff changeset
415 struct EnumSpecifierAST: public TypeSpecifierAST
e78566595089 initial import
mandel
parents:
diff changeset
416 {
e78566595089 initial import
mandel
parents:
diff changeset
417 DECLARE_AST_NODE(EnumSpecifier)
e78566595089 initial import
mandel
parents:
diff changeset
418
e78566595089 initial import
mandel
parents:
diff changeset
419 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
420 const ListNode<EnumeratorAST*> *enumerators;
e78566595089 initial import
mandel
parents:
diff changeset
421 };
e78566595089 initial import
mandel
parents:
diff changeset
422
e78566595089 initial import
mandel
parents:
diff changeset
423 struct EnumeratorAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
424 {
e78566595089 initial import
mandel
parents:
diff changeset
425 DECLARE_AST_NODE(Enumerator)
e78566595089 initial import
mandel
parents:
diff changeset
426
e78566595089 initial import
mandel
parents:
diff changeset
427 std::size_t id;
e78566595089 initial import
mandel
parents:
diff changeset
428 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
429 };
e78566595089 initial import
mandel
parents:
diff changeset
430
e78566595089 initial import
mandel
parents:
diff changeset
431 struct ExceptionSpecificationAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
432 {
e78566595089 initial import
mandel
parents:
diff changeset
433 DECLARE_AST_NODE(ExceptionSpecification)
e78566595089 initial import
mandel
parents:
diff changeset
434
e78566595089 initial import
mandel
parents:
diff changeset
435 std::size_t ellipsis;
e78566595089 initial import
mandel
parents:
diff changeset
436 const ListNode<TypeIdAST*> *type_ids;
e78566595089 initial import
mandel
parents:
diff changeset
437 };
e78566595089 initial import
mandel
parents:
diff changeset
438
e78566595089 initial import
mandel
parents:
diff changeset
439 struct ExpressionOrDeclarationStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
440 {
e78566595089 initial import
mandel
parents:
diff changeset
441 DECLARE_AST_NODE(ExpressionOrDeclarationStatement)
e78566595089 initial import
mandel
parents:
diff changeset
442
e78566595089 initial import
mandel
parents:
diff changeset
443 StatementAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
444 StatementAST *declaration;
e78566595089 initial import
mandel
parents:
diff changeset
445 };
e78566595089 initial import
mandel
parents:
diff changeset
446
e78566595089 initial import
mandel
parents:
diff changeset
447 struct ExpressionStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
448 {
e78566595089 initial import
mandel
parents:
diff changeset
449 DECLARE_AST_NODE(ExpressionStatement)
e78566595089 initial import
mandel
parents:
diff changeset
450
e78566595089 initial import
mandel
parents:
diff changeset
451 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
452 };
e78566595089 initial import
mandel
parents:
diff changeset
453
e78566595089 initial import
mandel
parents:
diff changeset
454 struct FunctionCallAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
455 {
e78566595089 initial import
mandel
parents:
diff changeset
456 DECLARE_AST_NODE(FunctionCall)
e78566595089 initial import
mandel
parents:
diff changeset
457
e78566595089 initial import
mandel
parents:
diff changeset
458 ExpressionAST *arguments;
e78566595089 initial import
mandel
parents:
diff changeset
459 };
e78566595089 initial import
mandel
parents:
diff changeset
460
e78566595089 initial import
mandel
parents:
diff changeset
461 struct FunctionDefinitionAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
462 {
e78566595089 initial import
mandel
parents:
diff changeset
463 DECLARE_AST_NODE(FunctionDefinition)
e78566595089 initial import
mandel
parents:
diff changeset
464
e78566595089 initial import
mandel
parents:
diff changeset
465 const ListNode<std::size_t> *storage_specifiers;
e78566595089 initial import
mandel
parents:
diff changeset
466 const ListNode<std::size_t> *function_specifiers;
e78566595089 initial import
mandel
parents:
diff changeset
467 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
468 InitDeclaratorAST *init_declarator;
e78566595089 initial import
mandel
parents:
diff changeset
469 StatementAST *function_body;
e78566595089 initial import
mandel
parents:
diff changeset
470 WinDeclSpecAST *win_decl_specifiers;
e78566595089 initial import
mandel
parents:
diff changeset
471 };
e78566595089 initial import
mandel
parents:
diff changeset
472
e78566595089 initial import
mandel
parents:
diff changeset
473 struct ForStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
474 {
e78566595089 initial import
mandel
parents:
diff changeset
475 DECLARE_AST_NODE(ForStatement)
e78566595089 initial import
mandel
parents:
diff changeset
476
e78566595089 initial import
mandel
parents:
diff changeset
477 StatementAST *init_statement;
e78566595089 initial import
mandel
parents:
diff changeset
478 ConditionAST *condition;
e78566595089 initial import
mandel
parents:
diff changeset
479 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
480 StatementAST *statement;
e78566595089 initial import
mandel
parents:
diff changeset
481 };
e78566595089 initial import
mandel
parents:
diff changeset
482
e78566595089 initial import
mandel
parents:
diff changeset
483 struct IfStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
484 {
e78566595089 initial import
mandel
parents:
diff changeset
485 DECLARE_AST_NODE(IfStatement)
e78566595089 initial import
mandel
parents:
diff changeset
486
e78566595089 initial import
mandel
parents:
diff changeset
487 ConditionAST *condition;
e78566595089 initial import
mandel
parents:
diff changeset
488 StatementAST *statement;
e78566595089 initial import
mandel
parents:
diff changeset
489 StatementAST *else_statement;
e78566595089 initial import
mandel
parents:
diff changeset
490 };
e78566595089 initial import
mandel
parents:
diff changeset
491
e78566595089 initial import
mandel
parents:
diff changeset
492 struct IncrDecrExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
493 {
e78566595089 initial import
mandel
parents:
diff changeset
494 DECLARE_AST_NODE(IncrDecrExpression)
e78566595089 initial import
mandel
parents:
diff changeset
495
e78566595089 initial import
mandel
parents:
diff changeset
496 std::size_t op;
e78566595089 initial import
mandel
parents:
diff changeset
497 };
e78566595089 initial import
mandel
parents:
diff changeset
498
e78566595089 initial import
mandel
parents:
diff changeset
499 struct InitDeclaratorAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
500 {
e78566595089 initial import
mandel
parents:
diff changeset
501 DECLARE_AST_NODE(InitDeclarator)
e78566595089 initial import
mandel
parents:
diff changeset
502
e78566595089 initial import
mandel
parents:
diff changeset
503 DeclaratorAST *declarator;
e78566595089 initial import
mandel
parents:
diff changeset
504 InitializerAST *initializer;
e78566595089 initial import
mandel
parents:
diff changeset
505 };
e78566595089 initial import
mandel
parents:
diff changeset
506
e78566595089 initial import
mandel
parents:
diff changeset
507 struct InitializerAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
508 {
e78566595089 initial import
mandel
parents:
diff changeset
509 DECLARE_AST_NODE(Initializer)
e78566595089 initial import
mandel
parents:
diff changeset
510
e78566595089 initial import
mandel
parents:
diff changeset
511 InitializerClauseAST *initializer_clause;
e78566595089 initial import
mandel
parents:
diff changeset
512 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
513 };
e78566595089 initial import
mandel
parents:
diff changeset
514
e78566595089 initial import
mandel
parents:
diff changeset
515 struct InitializerClauseAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
516 {
e78566595089 initial import
mandel
parents:
diff changeset
517 DECLARE_AST_NODE(InitializerClause)
e78566595089 initial import
mandel
parents:
diff changeset
518
e78566595089 initial import
mandel
parents:
diff changeset
519 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
520 };
e78566595089 initial import
mandel
parents:
diff changeset
521
e78566595089 initial import
mandel
parents:
diff changeset
522 struct LabeledStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
523 {
e78566595089 initial import
mandel
parents:
diff changeset
524 DECLARE_AST_NODE(LabeledStatement)
e78566595089 initial import
mandel
parents:
diff changeset
525 };
e78566595089 initial import
mandel
parents:
diff changeset
526
e78566595089 initial import
mandel
parents:
diff changeset
527 struct LinkageBodyAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
528 {
e78566595089 initial import
mandel
parents:
diff changeset
529 DECLARE_AST_NODE(LinkageBody)
e78566595089 initial import
mandel
parents:
diff changeset
530
e78566595089 initial import
mandel
parents:
diff changeset
531 const ListNode<DeclarationAST*> *declarations;
e78566595089 initial import
mandel
parents:
diff changeset
532 };
e78566595089 initial import
mandel
parents:
diff changeset
533
e78566595089 initial import
mandel
parents:
diff changeset
534 struct LinkageSpecificationAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
535 {
e78566595089 initial import
mandel
parents:
diff changeset
536 DECLARE_AST_NODE(LinkageSpecification)
e78566595089 initial import
mandel
parents:
diff changeset
537
e78566595089 initial import
mandel
parents:
diff changeset
538 std::size_t extern_type;
e78566595089 initial import
mandel
parents:
diff changeset
539 LinkageBodyAST *linkage_body;
e78566595089 initial import
mandel
parents:
diff changeset
540 DeclarationAST *declaration;
e78566595089 initial import
mandel
parents:
diff changeset
541 };
e78566595089 initial import
mandel
parents:
diff changeset
542
e78566595089 initial import
mandel
parents:
diff changeset
543 struct MemInitializerAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
544 {
e78566595089 initial import
mandel
parents:
diff changeset
545 DECLARE_AST_NODE(MemInitializer)
e78566595089 initial import
mandel
parents:
diff changeset
546
e78566595089 initial import
mandel
parents:
diff changeset
547 NameAST *initializer_id;
e78566595089 initial import
mandel
parents:
diff changeset
548 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
549 };
e78566595089 initial import
mandel
parents:
diff changeset
550
e78566595089 initial import
mandel
parents:
diff changeset
551 struct NameAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
552 {
e78566595089 initial import
mandel
parents:
diff changeset
553 DECLARE_AST_NODE(Name)
e78566595089 initial import
mandel
parents:
diff changeset
554
e78566595089 initial import
mandel
parents:
diff changeset
555 bool global;
e78566595089 initial import
mandel
parents:
diff changeset
556 const ListNode<UnqualifiedNameAST*> *qualified_names;
e78566595089 initial import
mandel
parents:
diff changeset
557 UnqualifiedNameAST *unqualified_name;
e78566595089 initial import
mandel
parents:
diff changeset
558 };
e78566595089 initial import
mandel
parents:
diff changeset
559
e78566595089 initial import
mandel
parents:
diff changeset
560 struct NamespaceAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
561 {
e78566595089 initial import
mandel
parents:
diff changeset
562 DECLARE_AST_NODE(Namespace)
e78566595089 initial import
mandel
parents:
diff changeset
563
e78566595089 initial import
mandel
parents:
diff changeset
564 std::size_t namespace_name;
e78566595089 initial import
mandel
parents:
diff changeset
565 LinkageBodyAST *linkage_body;
e78566595089 initial import
mandel
parents:
diff changeset
566 };
e78566595089 initial import
mandel
parents:
diff changeset
567
e78566595089 initial import
mandel
parents:
diff changeset
568 struct NamespaceAliasDefinitionAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
569 {
e78566595089 initial import
mandel
parents:
diff changeset
570 DECLARE_AST_NODE(NamespaceAliasDefinition)
e78566595089 initial import
mandel
parents:
diff changeset
571
e78566595089 initial import
mandel
parents:
diff changeset
572 std::size_t namespace_name;
e78566595089 initial import
mandel
parents:
diff changeset
573 NameAST *alias_name;
e78566595089 initial import
mandel
parents:
diff changeset
574 };
e78566595089 initial import
mandel
parents:
diff changeset
575
e78566595089 initial import
mandel
parents:
diff changeset
576 struct NewDeclaratorAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
577 {
e78566595089 initial import
mandel
parents:
diff changeset
578 DECLARE_AST_NODE(NewDeclarator)
e78566595089 initial import
mandel
parents:
diff changeset
579
e78566595089 initial import
mandel
parents:
diff changeset
580 PtrOperatorAST *ptr_op;
e78566595089 initial import
mandel
parents:
diff changeset
581 NewDeclaratorAST *sub_declarator;
e78566595089 initial import
mandel
parents:
diff changeset
582 const ListNode<ExpressionAST*> *expressions;
e78566595089 initial import
mandel
parents:
diff changeset
583 };
e78566595089 initial import
mandel
parents:
diff changeset
584
e78566595089 initial import
mandel
parents:
diff changeset
585 struct NewExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
586 {
e78566595089 initial import
mandel
parents:
diff changeset
587 DECLARE_AST_NODE(NewExpression)
e78566595089 initial import
mandel
parents:
diff changeset
588
e78566595089 initial import
mandel
parents:
diff changeset
589 std::size_t scope_token;
e78566595089 initial import
mandel
parents:
diff changeset
590 std::size_t new_token;
e78566595089 initial import
mandel
parents:
diff changeset
591 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
592 TypeIdAST *type_id;
e78566595089 initial import
mandel
parents:
diff changeset
593 NewTypeIdAST *new_type_id;
e78566595089 initial import
mandel
parents:
diff changeset
594 NewInitializerAST *new_initializer;
e78566595089 initial import
mandel
parents:
diff changeset
595 };
e78566595089 initial import
mandel
parents:
diff changeset
596
e78566595089 initial import
mandel
parents:
diff changeset
597 struct NewInitializerAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
598 {
e78566595089 initial import
mandel
parents:
diff changeset
599 DECLARE_AST_NODE(NewInitializer)
e78566595089 initial import
mandel
parents:
diff changeset
600
e78566595089 initial import
mandel
parents:
diff changeset
601 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
602 };
e78566595089 initial import
mandel
parents:
diff changeset
603
e78566595089 initial import
mandel
parents:
diff changeset
604 struct NewTypeIdAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
605 {
e78566595089 initial import
mandel
parents:
diff changeset
606 DECLARE_AST_NODE(NewTypeId)
e78566595089 initial import
mandel
parents:
diff changeset
607
e78566595089 initial import
mandel
parents:
diff changeset
608 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
609 NewInitializerAST *new_initializer;
e78566595089 initial import
mandel
parents:
diff changeset
610 NewDeclaratorAST *new_declarator;
e78566595089 initial import
mandel
parents:
diff changeset
611 };
e78566595089 initial import
mandel
parents:
diff changeset
612
e78566595089 initial import
mandel
parents:
diff changeset
613 struct OperatorAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
614 {
e78566595089 initial import
mandel
parents:
diff changeset
615 DECLARE_AST_NODE(Operator)
e78566595089 initial import
mandel
parents:
diff changeset
616
e78566595089 initial import
mandel
parents:
diff changeset
617 std::size_t op;
e78566595089 initial import
mandel
parents:
diff changeset
618 std::size_t open;
e78566595089 initial import
mandel
parents:
diff changeset
619 std::size_t close;
e78566595089 initial import
mandel
parents:
diff changeset
620 };
e78566595089 initial import
mandel
parents:
diff changeset
621
e78566595089 initial import
mandel
parents:
diff changeset
622 struct OperatorFunctionIdAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
623 {
e78566595089 initial import
mandel
parents:
diff changeset
624 DECLARE_AST_NODE(OperatorFunctionId)
e78566595089 initial import
mandel
parents:
diff changeset
625
e78566595089 initial import
mandel
parents:
diff changeset
626 OperatorAST *op;
e78566595089 initial import
mandel
parents:
diff changeset
627 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
628 const ListNode<PtrOperatorAST*> *ptr_ops;
e78566595089 initial import
mandel
parents:
diff changeset
629 };
e78566595089 initial import
mandel
parents:
diff changeset
630
e78566595089 initial import
mandel
parents:
diff changeset
631 struct ParameterDeclarationAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
632 {
e78566595089 initial import
mandel
parents:
diff changeset
633 DECLARE_AST_NODE(ParameterDeclaration)
e78566595089 initial import
mandel
parents:
diff changeset
634
e78566595089 initial import
mandel
parents:
diff changeset
635 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
636 DeclaratorAST *declarator;
e78566595089 initial import
mandel
parents:
diff changeset
637 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
638 };
e78566595089 initial import
mandel
parents:
diff changeset
639
e78566595089 initial import
mandel
parents:
diff changeset
640 struct ParameterDeclarationClauseAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
641 {
e78566595089 initial import
mandel
parents:
diff changeset
642 DECLARE_AST_NODE(ParameterDeclarationClause)
e78566595089 initial import
mandel
parents:
diff changeset
643
e78566595089 initial import
mandel
parents:
diff changeset
644 const ListNode<ParameterDeclarationAST*> *parameter_declarations;
e78566595089 initial import
mandel
parents:
diff changeset
645 std::size_t ellipsis;
e78566595089 initial import
mandel
parents:
diff changeset
646 };
e78566595089 initial import
mandel
parents:
diff changeset
647
e78566595089 initial import
mandel
parents:
diff changeset
648 struct PostfixExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
649 {
e78566595089 initial import
mandel
parents:
diff changeset
650 DECLARE_AST_NODE(PostfixExpression)
e78566595089 initial import
mandel
parents:
diff changeset
651
e78566595089 initial import
mandel
parents:
diff changeset
652 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
653 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
654 const ListNode<ExpressionAST*> *sub_expressions;
e78566595089 initial import
mandel
parents:
diff changeset
655 };
e78566595089 initial import
mandel
parents:
diff changeset
656
e78566595089 initial import
mandel
parents:
diff changeset
657 struct PrimaryExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
658 {
e78566595089 initial import
mandel
parents:
diff changeset
659 DECLARE_AST_NODE(PrimaryExpression)
e78566595089 initial import
mandel
parents:
diff changeset
660
e78566595089 initial import
mandel
parents:
diff changeset
661 StringLiteralAST *literal;
e78566595089 initial import
mandel
parents:
diff changeset
662 std::size_t token;
e78566595089 initial import
mandel
parents:
diff changeset
663 StatementAST *expression_statement;
e78566595089 initial import
mandel
parents:
diff changeset
664 ExpressionAST *sub_expression;
e78566595089 initial import
mandel
parents:
diff changeset
665 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
666 };
e78566595089 initial import
mandel
parents:
diff changeset
667
e78566595089 initial import
mandel
parents:
diff changeset
668 struct PtrOperatorAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
669 {
e78566595089 initial import
mandel
parents:
diff changeset
670 DECLARE_AST_NODE(PtrOperator)
e78566595089 initial import
mandel
parents:
diff changeset
671
e78566595089 initial import
mandel
parents:
diff changeset
672 const ListNode<std::size_t> *cv;
e78566595089 initial import
mandel
parents:
diff changeset
673 std::size_t op;
e78566595089 initial import
mandel
parents:
diff changeset
674 PtrToMemberAST *mem_ptr;
e78566595089 initial import
mandel
parents:
diff changeset
675 };
e78566595089 initial import
mandel
parents:
diff changeset
676
e78566595089 initial import
mandel
parents:
diff changeset
677 struct PtrToMemberAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
678 {
e78566595089 initial import
mandel
parents:
diff changeset
679 DECLARE_AST_NODE(PtrToMember)
e78566595089 initial import
mandel
parents:
diff changeset
680 };
e78566595089 initial import
mandel
parents:
diff changeset
681
e78566595089 initial import
mandel
parents:
diff changeset
682 struct ReturnStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
683 {
e78566595089 initial import
mandel
parents:
diff changeset
684 DECLARE_AST_NODE(ReturnStatement)
e78566595089 initial import
mandel
parents:
diff changeset
685
e78566595089 initial import
mandel
parents:
diff changeset
686 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
687 };
e78566595089 initial import
mandel
parents:
diff changeset
688
e78566595089 initial import
mandel
parents:
diff changeset
689 struct SimpleDeclarationAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
690 {
e78566595089 initial import
mandel
parents:
diff changeset
691 DECLARE_AST_NODE(SimpleDeclaration)
e78566595089 initial import
mandel
parents:
diff changeset
692
e78566595089 initial import
mandel
parents:
diff changeset
693 const ListNode<std::size_t> *storage_specifiers;
e78566595089 initial import
mandel
parents:
diff changeset
694 const ListNode<std::size_t> *function_specifiers;
e78566595089 initial import
mandel
parents:
diff changeset
695 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
696 const ListNode<InitDeclaratorAST*> *init_declarators;
e78566595089 initial import
mandel
parents:
diff changeset
697 WinDeclSpecAST *win_decl_specifiers;
e78566595089 initial import
mandel
parents:
diff changeset
698 };
e78566595089 initial import
mandel
parents:
diff changeset
699
e78566595089 initial import
mandel
parents:
diff changeset
700 struct SimpleTypeSpecifierAST: public TypeSpecifierAST
e78566595089 initial import
mandel
parents:
diff changeset
701 {
e78566595089 initial import
mandel
parents:
diff changeset
702 DECLARE_AST_NODE(SimpleTypeSpecifier)
e78566595089 initial import
mandel
parents:
diff changeset
703
e78566595089 initial import
mandel
parents:
diff changeset
704 const ListNode<std::size_t> *integrals;
e78566595089 initial import
mandel
parents:
diff changeset
705 std::size_t type_of;
e78566595089 initial import
mandel
parents:
diff changeset
706 TypeIdAST *type_id;
e78566595089 initial import
mandel
parents:
diff changeset
707 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
708 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
709 };
e78566595089 initial import
mandel
parents:
diff changeset
710
e78566595089 initial import
mandel
parents:
diff changeset
711 struct SizeofExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
712 {
e78566595089 initial import
mandel
parents:
diff changeset
713 DECLARE_AST_NODE(SizeofExpression)
e78566595089 initial import
mandel
parents:
diff changeset
714
e78566595089 initial import
mandel
parents:
diff changeset
715 std::size_t sizeof_token;
e78566595089 initial import
mandel
parents:
diff changeset
716 TypeIdAST *type_id;
e78566595089 initial import
mandel
parents:
diff changeset
717 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
718 };
e78566595089 initial import
mandel
parents:
diff changeset
719
e78566595089 initial import
mandel
parents:
diff changeset
720 struct StringLiteralAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
721 {
e78566595089 initial import
mandel
parents:
diff changeset
722 DECLARE_AST_NODE(StringLiteral)
e78566595089 initial import
mandel
parents:
diff changeset
723
e78566595089 initial import
mandel
parents:
diff changeset
724 const ListNode<std::size_t> *literals;
e78566595089 initial import
mandel
parents:
diff changeset
725 };
e78566595089 initial import
mandel
parents:
diff changeset
726
e78566595089 initial import
mandel
parents:
diff changeset
727 struct SubscriptExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
728 {
e78566595089 initial import
mandel
parents:
diff changeset
729 DECLARE_AST_NODE(SubscriptExpression)
e78566595089 initial import
mandel
parents:
diff changeset
730
e78566595089 initial import
mandel
parents:
diff changeset
731 ExpressionAST *subscript;
e78566595089 initial import
mandel
parents:
diff changeset
732 };
e78566595089 initial import
mandel
parents:
diff changeset
733
e78566595089 initial import
mandel
parents:
diff changeset
734 struct SwitchStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
735 {
e78566595089 initial import
mandel
parents:
diff changeset
736 DECLARE_AST_NODE(SwitchStatement)
e78566595089 initial import
mandel
parents:
diff changeset
737
e78566595089 initial import
mandel
parents:
diff changeset
738 ConditionAST *condition;
e78566595089 initial import
mandel
parents:
diff changeset
739 StatementAST *statement;
e78566595089 initial import
mandel
parents:
diff changeset
740 };
e78566595089 initial import
mandel
parents:
diff changeset
741
e78566595089 initial import
mandel
parents:
diff changeset
742 struct TemplateArgumentAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
743 {
e78566595089 initial import
mandel
parents:
diff changeset
744 DECLARE_AST_NODE(TemplateArgument)
e78566595089 initial import
mandel
parents:
diff changeset
745
e78566595089 initial import
mandel
parents:
diff changeset
746 TypeIdAST *type_id;
e78566595089 initial import
mandel
parents:
diff changeset
747 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
748 };
e78566595089 initial import
mandel
parents:
diff changeset
749
e78566595089 initial import
mandel
parents:
diff changeset
750 struct TemplateDeclarationAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
751 {
e78566595089 initial import
mandel
parents:
diff changeset
752 DECLARE_AST_NODE(TemplateDeclaration)
e78566595089 initial import
mandel
parents:
diff changeset
753
e78566595089 initial import
mandel
parents:
diff changeset
754 std::size_t exported;
e78566595089 initial import
mandel
parents:
diff changeset
755 const ListNode<TemplateParameterAST*> *template_parameters;
e78566595089 initial import
mandel
parents:
diff changeset
756 DeclarationAST* declaration;
e78566595089 initial import
mandel
parents:
diff changeset
757 };
e78566595089 initial import
mandel
parents:
diff changeset
758
e78566595089 initial import
mandel
parents:
diff changeset
759 struct TemplateParameterAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
760 {
e78566595089 initial import
mandel
parents:
diff changeset
761 DECLARE_AST_NODE(TemplateParameter)
e78566595089 initial import
mandel
parents:
diff changeset
762
e78566595089 initial import
mandel
parents:
diff changeset
763 TypeParameterAST *type_parameter;
e78566595089 initial import
mandel
parents:
diff changeset
764 ParameterDeclarationAST *parameter_declaration;
e78566595089 initial import
mandel
parents:
diff changeset
765 };
e78566595089 initial import
mandel
parents:
diff changeset
766
e78566595089 initial import
mandel
parents:
diff changeset
767 struct ThrowExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
768 {
e78566595089 initial import
mandel
parents:
diff changeset
769 DECLARE_AST_NODE(ThrowExpression)
e78566595089 initial import
mandel
parents:
diff changeset
770
e78566595089 initial import
mandel
parents:
diff changeset
771 std::size_t throw_token;
e78566595089 initial import
mandel
parents:
diff changeset
772 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
773 };
e78566595089 initial import
mandel
parents:
diff changeset
774
e78566595089 initial import
mandel
parents:
diff changeset
775 struct TranslationUnitAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
776 {
e78566595089 initial import
mandel
parents:
diff changeset
777 DECLARE_AST_NODE(TranslationUnit)
e78566595089 initial import
mandel
parents:
diff changeset
778
e78566595089 initial import
mandel
parents:
diff changeset
779 const ListNode<DeclarationAST*> *declarations;
e78566595089 initial import
mandel
parents:
diff changeset
780 };
e78566595089 initial import
mandel
parents:
diff changeset
781
e78566595089 initial import
mandel
parents:
diff changeset
782 struct TryBlockStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
783 {
e78566595089 initial import
mandel
parents:
diff changeset
784 DECLARE_AST_NODE(TryBlockStatement)
e78566595089 initial import
mandel
parents:
diff changeset
785 };
e78566595089 initial import
mandel
parents:
diff changeset
786
e78566595089 initial import
mandel
parents:
diff changeset
787 struct TypeIdAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
788 {
e78566595089 initial import
mandel
parents:
diff changeset
789 DECLARE_AST_NODE(TypeId)
e78566595089 initial import
mandel
parents:
diff changeset
790
e78566595089 initial import
mandel
parents:
diff changeset
791 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
792 DeclaratorAST *declarator;
e78566595089 initial import
mandel
parents:
diff changeset
793 };
e78566595089 initial import
mandel
parents:
diff changeset
794
e78566595089 initial import
mandel
parents:
diff changeset
795 struct TypeIdentificationAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
796 {
e78566595089 initial import
mandel
parents:
diff changeset
797 DECLARE_AST_NODE(TypeIdentification)
e78566595089 initial import
mandel
parents:
diff changeset
798
e78566595089 initial import
mandel
parents:
diff changeset
799 std::size_t typename_token;
e78566595089 initial import
mandel
parents:
diff changeset
800 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
801 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
802 };
e78566595089 initial import
mandel
parents:
diff changeset
803
e78566595089 initial import
mandel
parents:
diff changeset
804 struct TypeParameterAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
805 {
e78566595089 initial import
mandel
parents:
diff changeset
806 DECLARE_AST_NODE(TypeParameter)
e78566595089 initial import
mandel
parents:
diff changeset
807
e78566595089 initial import
mandel
parents:
diff changeset
808 std::size_t type;
e78566595089 initial import
mandel
parents:
diff changeset
809 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
810 TypeIdAST *type_id;
e78566595089 initial import
mandel
parents:
diff changeset
811 const ListNode<TemplateParameterAST*> *template_parameters;
e78566595089 initial import
mandel
parents:
diff changeset
812 NameAST *template_name;
e78566595089 initial import
mandel
parents:
diff changeset
813 };
e78566595089 initial import
mandel
parents:
diff changeset
814
e78566595089 initial import
mandel
parents:
diff changeset
815 struct TypedefAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
816 {
e78566595089 initial import
mandel
parents:
diff changeset
817 DECLARE_AST_NODE(Typedef)
e78566595089 initial import
mandel
parents:
diff changeset
818
e78566595089 initial import
mandel
parents:
diff changeset
819 TypeSpecifierAST *type_specifier;
e78566595089 initial import
mandel
parents:
diff changeset
820 const ListNode<InitDeclaratorAST*> *init_declarators;
e78566595089 initial import
mandel
parents:
diff changeset
821 };
e78566595089 initial import
mandel
parents:
diff changeset
822
e78566595089 initial import
mandel
parents:
diff changeset
823 struct UnaryExpressionAST: public ExpressionAST
e78566595089 initial import
mandel
parents:
diff changeset
824 {
e78566595089 initial import
mandel
parents:
diff changeset
825 DECLARE_AST_NODE(UnaryExpression)
e78566595089 initial import
mandel
parents:
diff changeset
826
e78566595089 initial import
mandel
parents:
diff changeset
827 std::size_t op;
e78566595089 initial import
mandel
parents:
diff changeset
828 ExpressionAST *expression;
e78566595089 initial import
mandel
parents:
diff changeset
829 };
e78566595089 initial import
mandel
parents:
diff changeset
830
e78566595089 initial import
mandel
parents:
diff changeset
831 struct UnqualifiedNameAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
832 {
e78566595089 initial import
mandel
parents:
diff changeset
833 DECLARE_AST_NODE(UnqualifiedName)
e78566595089 initial import
mandel
parents:
diff changeset
834
e78566595089 initial import
mandel
parents:
diff changeset
835 std::size_t tilde;
e78566595089 initial import
mandel
parents:
diff changeset
836 std::size_t id;
e78566595089 initial import
mandel
parents:
diff changeset
837 OperatorFunctionIdAST *operator_id;
e78566595089 initial import
mandel
parents:
diff changeset
838 const ListNode<TemplateArgumentAST*> *template_arguments;
e78566595089 initial import
mandel
parents:
diff changeset
839 };
e78566595089 initial import
mandel
parents:
diff changeset
840
e78566595089 initial import
mandel
parents:
diff changeset
841 struct UsingAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
842 {
e78566595089 initial import
mandel
parents:
diff changeset
843 DECLARE_AST_NODE(Using)
e78566595089 initial import
mandel
parents:
diff changeset
844
e78566595089 initial import
mandel
parents:
diff changeset
845 std::size_t type_name;
e78566595089 initial import
mandel
parents:
diff changeset
846 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
847 };
e78566595089 initial import
mandel
parents:
diff changeset
848
e78566595089 initial import
mandel
parents:
diff changeset
849 struct UsingDirectiveAST: public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
850 {
e78566595089 initial import
mandel
parents:
diff changeset
851 DECLARE_AST_NODE(UsingDirective)
e78566595089 initial import
mandel
parents:
diff changeset
852
e78566595089 initial import
mandel
parents:
diff changeset
853 NameAST *name;
e78566595089 initial import
mandel
parents:
diff changeset
854 };
e78566595089 initial import
mandel
parents:
diff changeset
855
e78566595089 initial import
mandel
parents:
diff changeset
856 struct WhileStatementAST: public StatementAST
e78566595089 initial import
mandel
parents:
diff changeset
857 {
e78566595089 initial import
mandel
parents:
diff changeset
858 DECLARE_AST_NODE(WhileStatement)
e78566595089 initial import
mandel
parents:
diff changeset
859
e78566595089 initial import
mandel
parents:
diff changeset
860 ConditionAST *condition;
e78566595089 initial import
mandel
parents:
diff changeset
861 StatementAST *statement;
e78566595089 initial import
mandel
parents:
diff changeset
862 };
e78566595089 initial import
mandel
parents:
diff changeset
863
e78566595089 initial import
mandel
parents:
diff changeset
864 struct WinDeclSpecAST: public AST
e78566595089 initial import
mandel
parents:
diff changeset
865 {
e78566595089 initial import
mandel
parents:
diff changeset
866 DECLARE_AST_NODE(WinDeclSpec)
e78566595089 initial import
mandel
parents:
diff changeset
867
e78566595089 initial import
mandel
parents:
diff changeset
868 std::size_t specifier;
e78566595089 initial import
mandel
parents:
diff changeset
869 std::size_t modifier;
e78566595089 initial import
mandel
parents:
diff changeset
870 };
e78566595089 initial import
mandel
parents:
diff changeset
871
e78566595089 initial import
mandel
parents:
diff changeset
872 struct QPropertyAST : public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
873 {
e78566595089 initial import
mandel
parents:
diff changeset
874 DECLARE_AST_NODE(QPropertyAST)
e78566595089 initial import
mandel
parents:
diff changeset
875 };
e78566595089 initial import
mandel
parents:
diff changeset
876
e78566595089 initial import
mandel
parents:
diff changeset
877 struct QEnumsAST : public DeclarationAST
e78566595089 initial import
mandel
parents:
diff changeset
878 {
e78566595089 initial import
mandel
parents:
diff changeset
879 DECLARE_AST_NODE(QEnumsAST)
e78566595089 initial import
mandel
parents:
diff changeset
880 };
e78566595089 initial import
mandel
parents:
diff changeset
881
e78566595089 initial import
mandel
parents:
diff changeset
882 template <class _Tp>
e78566595089 initial import
mandel
parents:
diff changeset
883 _Tp *CreateNode(pool *memory_pool)
e78566595089 initial import
mandel
parents:
diff changeset
884 {
e78566595089 initial import
mandel
parents:
diff changeset
885 _Tp *node = reinterpret_cast<_Tp*>(memory_pool->allocate(sizeof(_Tp)));
e78566595089 initial import
mandel
parents:
diff changeset
886 node->kind = _Tp::__node_kind;
e78566595089 initial import
mandel
parents:
diff changeset
887 return node;
e78566595089 initial import
mandel
parents:
diff changeset
888 }
e78566595089 initial import
mandel
parents:
diff changeset
889
e78566595089 initial import
mandel
parents:
diff changeset
890 template <class _Tp>
e78566595089 initial import
mandel
parents:
diff changeset
891 _Tp ast_cast(AST *item)
e78566595089 initial import
mandel
parents:
diff changeset
892 {
e78566595089 initial import
mandel
parents:
diff changeset
893 if (item && static_cast<_Tp>(0)->__node_kind == item->kind)
e78566595089 initial import
mandel
parents:
diff changeset
894 return static_cast<_Tp>(item);
e78566595089 initial import
mandel
parents:
diff changeset
895
e78566595089 initial import
mandel
parents:
diff changeset
896 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
897 }
e78566595089 initial import
mandel
parents:
diff changeset
898
e78566595089 initial import
mandel
parents:
diff changeset
899 #endif // AST_H
e78566595089 initial import
mandel
parents:
diff changeset
900
e78566595089 initial import
mandel
parents:
diff changeset
901 // kate: space-indent on; indent-width 2; replace-tabs on;