Mercurial > projects > dil
annotate trunk/src/dil/ast/Statements.d @ 657:3bd9660f71ac
Moved class Statement to its own module.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Tue, 15 Jan 2008 16:41:12 +0100 |
parents | 4ae7b13aaac8 |
children | a35e6debfb4c |
rev | line source |
---|---|
102 | 1 /++ |
2 Author: Aziz Köksal | |
249 | 3 License: GPL3 |
102 | 4 +/ |
587
7d0ba0c93e95
Moved dil.Statements to dil.ast.Statements.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
586
diff
changeset
|
5 module dil.ast.Statements; |
580
fa6d3c52757d
Moved SyntaxTree.d to new package 'ast'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
563
diff
changeset
|
6 |
657
3bd9660f71ac
Moved class Statement to its own module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
648
diff
changeset
|
7 public import dil.ast.Statement; |
580
fa6d3c52757d
Moved SyntaxTree.d to new package 'ast'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
563
diff
changeset
|
8 import dil.ast.Node; |
586
e25345656d10
Moved dil.Expressions to dil.ast.Expressions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
585
diff
changeset
|
9 import dil.ast.Expressions; |
585
05c375fb2d5c
Moved dil.Declarations to dil.ast.Declarations.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
583
diff
changeset
|
10 import dil.ast.Declarations; |
588
dcfec202718d
Moved dil.Types to dil.ast.Types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
587
diff
changeset
|
11 import dil.ast.Types; |
608
fac9e8b258fc
Moved dil.ast.Parameter to dil.ast.Parameters.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
604
diff
changeset
|
12 import dil.ast.Parameters; |
601
9f96fd51cb41
Moved dil.IdTable to dil.lexer.IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
596
diff
changeset
|
13 import dil.lexer.IdTable; |
102 | 14 |
161 | 15 class Statements : Statement |
16 { | |
294
1ea6a6d97ec6
- Assigning to Node.children in several constructors that inherit from Node.
aziz
parents:
285
diff
changeset
|
17 this() |
1ea6a6d97ec6
- Assigning to Node.children in several constructors that inherit from Node.
aziz
parents:
285
diff
changeset
|
18 { |
1ea6a6d97ec6
- Assigning to Node.children in several constructors that inherit from Node.
aziz
parents:
285
diff
changeset
|
19 mixin(set_kind); |
1ea6a6d97ec6
- Assigning to Node.children in several constructors that inherit from Node.
aziz
parents:
285
diff
changeset
|
20 } |
299
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
294
diff
changeset
|
21 |
161 | 22 void opCatAssign(Statement s) |
23 { | |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
24 addChild(s); |
161 | 25 } |
26 } | |
27 | |
206 | 28 class IllegalStatement : Statement |
29 { | |
496
5a607597dc22
Improved error recovery in the Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
495
diff
changeset
|
30 this() |
206 | 31 { |
278 | 32 mixin(set_kind); |
206 | 33 } |
34 } | |
35 | |
216 | 36 class EmptyStatement : Statement |
37 { | |
38 this() | |
39 { | |
278 | 40 mixin(set_kind); |
216 | 41 } |
42 } | |
43 | |
268 | 44 class FunctionBody : Node |
192 | 45 { |
46 Statement funcBody, inBody, outBody; | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
47 Identifier* outIdent; |
268 | 48 this() |
49 { | |
275 | 50 super(NodeCategory.Other); |
299
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
294
diff
changeset
|
51 mixin(set_kind); |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
294
diff
changeset
|
52 } |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
294
diff
changeset
|
53 |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
294
diff
changeset
|
54 void finishConstruction() |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
294
diff
changeset
|
55 { |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
56 addOptChild(funcBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
57 addOptChild(inBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
58 addOptChild(outBody); |
268 | 59 } |
192 | 60 } |
61 | |
162 | 62 class ScopeStatement : Statement |
63 { | |
64 Statement s; | |
65 this(Statement s) | |
66 { | |
278 | 67 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
68 addChild(s); |
162 | 69 this.s = s; |
70 } | |
71 } | |
72 | |
161 | 73 class LabeledStatement : Statement |
74 { | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
75 Identifier* label; |
161 | 76 Statement s; |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
77 this(Identifier* label, Statement s) |
161 | 78 { |
278 | 79 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
80 addChild(s); |
161 | 81 this.label = label; |
82 this.s = s; | |
83 } | |
84 } | |
85 | |
86 class ExpressionStatement : Statement | |
87 { | |
187 | 88 Expression expression; |
89 this(Expression expression) | |
90 { | |
278 | 91 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
92 addChild(expression); |
187 | 93 this.expression = expression; |
94 } | |
161 | 95 } |
96 | |
97 class DeclarationStatement : Statement | |
98 { | |
188 | 99 Declaration declaration; |
100 this(Declaration declaration) | |
101 { | |
278 | 102 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
103 addChild(declaration); |
188 | 104 this.declaration = declaration; |
105 } | |
161 | 106 } |
107 | |
108 class IfStatement : Statement | |
109 { | |
283 | 110 Statement variable; // AutoDeclaration or VariableDeclaration |
162 | 111 Expression condition; |
112 Statement ifBody; | |
113 Statement elseBody; | |
283 | 114 this(Statement variable, Expression condition, Statement ifBody, Statement elseBody) |
162 | 115 { |
278 | 116 mixin(set_kind); |
294
1ea6a6d97ec6
- Assigning to Node.children in several constructors that inherit from Node.
aziz
parents:
285
diff
changeset
|
117 if (variable) |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
118 addChild(variable); |
294
1ea6a6d97ec6
- Assigning to Node.children in several constructors that inherit from Node.
aziz
parents:
285
diff
changeset
|
119 else |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
120 addChild(condition); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
121 addChild(ifBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
122 addOptChild(elseBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
123 |
283 | 124 this.variable = variable; |
162 | 125 this.condition = condition; |
126 this.ifBody = ifBody; | |
127 this.elseBody = elseBody; | |
128 } | |
161 | 129 } |
130 | |
131 class WhileStatement : Statement | |
132 { | |
164 | 133 Expression condition; |
134 Statement whileBody; | |
135 this(Expression condition, Statement whileBody) | |
136 { | |
278 | 137 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
138 addChild(condition); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
139 addChild(whileBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
140 |
164 | 141 this.condition = condition; |
142 this.whileBody = whileBody; | |
143 } | |
161 | 144 } |
145 | |
165 | 146 class DoWhileStatement : Statement |
161 | 147 { |
165 | 148 Expression condition; |
149 Statement doBody; | |
150 this(Expression condition, Statement doBody) | |
151 { | |
278 | 152 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
153 addChild(condition); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
154 addChild(doBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
155 |
165 | 156 this.condition = condition; |
157 this.doBody = doBody; | |
158 } | |
161 | 159 } |
160 | |
161 class ForStatement : Statement | |
162 { | |
166 | 163 Statement init; |
164 Expression condition, increment; | |
165 Statement forBody; | |
169 | 166 |
166 | 167 this(Statement init, Expression condition, Expression increment, Statement forBody) |
168 { | |
278 | 169 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
170 addOptChild(init); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
171 addOptChild(condition); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
172 addOptChild(increment); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
173 addChild(forBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
174 |
166 | 175 this.init = init; |
176 this.condition = condition; | |
177 this.increment = increment; | |
178 this.forBody = forBody; | |
179 } | |
161 | 180 } |
181 | |
182 class ForeachStatement : Statement | |
183 { | |
169 | 184 TOK tok; |
185 Parameters params; | |
186 Expression aggregate; | |
187 Statement forBody; | |
161 | 188 |
169 | 189 this(TOK tok, Parameters params, Expression aggregate, Statement forBody) |
190 { | |
278 | 191 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
192 addChildren([cast(Node)params, aggregate, forBody]); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
193 |
169 | 194 this.tok = tok; |
195 this.params = params; | |
196 this.aggregate = aggregate; | |
197 this.forBody = forBody; | |
198 } | |
161 | 199 } |
200 | |
635 | 201 // version(D2) |
202 // { | |
269 | 203 class ForeachRangeStatement : Statement |
204 { | |
205 TOK tok; | |
206 Parameters params; | |
207 Expression lower, upper; | |
208 Statement forBody; | |
209 | |
210 this(TOK tok, Parameters params, Expression lower, Expression upper, Statement forBody) | |
211 { | |
278 | 212 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
213 addChildren([cast(Node)params, lower, upper, forBody]); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
214 |
269 | 215 this.tok = tok; |
216 this.params = params; | |
217 this.lower = lower; | |
218 this.upper = upper; | |
219 this.forBody = forBody; | |
220 } | |
221 } | |
635 | 222 // } |
269 | 223 |
161 | 224 class SwitchStatement : Statement |
225 { | |
170 | 226 Expression condition; |
227 Statement switchBody; | |
161 | 228 |
170 | 229 this(Expression condition, Statement switchBody) |
230 { | |
278 | 231 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
232 addChild(condition); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
233 addChild(switchBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
234 |
170 | 235 this.condition = condition; |
236 this.switchBody = switchBody; | |
237 } | |
161 | 238 } |
239 | |
240 class CaseStatement : Statement | |
241 { | |
171 | 242 Expression[] values; |
243 Statement caseBody; | |
161 | 244 |
171 | 245 this(Expression[] values, Statement caseBody) |
246 { | |
278 | 247 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
248 addChildren(values); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
249 addChild(caseBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
250 |
171 | 251 this.values = values; |
252 this.caseBody = caseBody; | |
253 } | |
161 | 254 } |
255 | |
256 class DefaultStatement : Statement | |
257 { | |
172 | 258 Statement defaultBody; |
259 this(Statement defaultBody) | |
260 { | |
278 | 261 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
262 addChild(defaultBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
263 |
172 | 264 this.defaultBody = defaultBody; |
265 } | |
161 | 266 } |
267 | |
268 class ContinueStatement : Statement | |
269 { | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
270 Identifier* ident; |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
271 this(Identifier* ident) |
173 | 272 { |
278 | 273 mixin(set_kind); |
173 | 274 this.ident = ident; |
275 } | |
161 | 276 } |
277 | |
278 class BreakStatement : Statement | |
279 { | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
280 Identifier* ident; |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
281 this(Identifier* ident) |
174 | 282 { |
278 | 283 mixin(set_kind); |
174 | 284 this.ident = ident; |
285 } | |
161 | 286 } |
287 | |
288 class ReturnStatement : Statement | |
289 { | |
175 | 290 Expression expr; |
291 this(Expression expr) | |
292 { | |
278 | 293 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
294 addOptChild(expr); |
175 | 295 this.expr = expr; |
296 } | |
161 | 297 } |
298 | |
299 class GotoStatement : Statement | |
300 { | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
301 Identifier* ident; |
176 | 302 Expression caseExpr; |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
303 this(Identifier* ident, Expression caseExpr) |
176 | 304 { |
278 | 305 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
306 addOptChild(caseExpr); |
176 | 307 this.ident = ident; |
308 this.caseExpr = caseExpr; | |
309 } | |
161 | 310 } |
311 | |
312 class WithStatement : Statement | |
313 { | |
177 | 314 Expression expr; |
315 Statement withBody; | |
316 this(Expression expr, Statement withBody) | |
317 { | |
278 | 318 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
319 addChild(expr); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
320 addChild(withBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
321 |
177 | 322 this.expr = expr; |
323 this.withBody = withBody; | |
324 } | |
161 | 325 } |
326 | |
327 class SynchronizedStatement : Statement | |
328 { | |
178 | 329 Expression expr; |
330 Statement syncBody; | |
396
0a4619735ce9
Applied fixes to Lexer, Parser and other classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
374
diff
changeset
|
331 this(Expression expr, Statement syncBody) |
178 | 332 { |
278 | 333 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
334 addOptChild(expr); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
335 addChild(syncBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
336 |
178 | 337 this.expr = expr; |
338 this.syncBody = syncBody; | |
339 } | |
161 | 340 } |
341 | |
342 class TryStatement : Statement | |
343 { | |
179 | 344 Statement tryBody; |
345 CatchBody[] catchBodies; | |
346 FinallyBody finallyBody; | |
347 this(Statement tryBody, CatchBody[] catchBodies, FinallyBody finallyBody) | |
348 { | |
278 | 349 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
350 addChild(tryBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
351 addOptChildren(catchBodies); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
352 addOptChild(finallyBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
353 |
179 | 354 this.tryBody = tryBody; |
355 this.catchBodies = catchBodies; | |
356 this.finallyBody = finallyBody; | |
357 } | |
358 } | |
161 | 359 |
179 | 360 class CatchBody : Statement |
361 { | |
362 Parameter param; | |
363 Statement catchBody; | |
364 this(Parameter param, Statement catchBody) | |
365 { | |
278 | 366 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
367 addOptChild(param); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
368 addChild(catchBody); |
179 | 369 this.param = param; |
370 this.catchBody = catchBody; | |
371 } | |
372 } | |
373 | |
374 class FinallyBody : Statement | |
375 { | |
376 Statement finallyBody; | |
377 this(Statement finallyBody) | |
378 { | |
278 | 379 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
380 addChild(finallyBody); |
179 | 381 this.finallyBody = finallyBody; |
382 } | |
161 | 383 } |
384 | |
385 class ScopeGuardStatement : Statement | |
386 { | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
387 Identifier* condition; |
181 | 388 Statement scopeBody; |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
389 this(Identifier* condition, Statement scopeBody) |
181 | 390 { |
278 | 391 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
392 addChild(scopeBody); |
181 | 393 this.condition = condition; |
394 this.scopeBody = scopeBody; | |
395 } | |
161 | 396 } |
397 | |
398 class ThrowStatement : Statement | |
399 { | |
180 | 400 Expression expr; |
401 this(Expression expr) | |
402 { | |
278 | 403 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
404 addChild(expr); |
180 | 405 this.expr = expr; |
406 } | |
161 | 407 } |
408 | |
409 class VolatileStatement : Statement | |
410 { | |
182 | 411 Statement volatileBody; |
412 this(Statement volatileBody) | |
413 { | |
278 | 414 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
415 addOptChild(volatileBody); |
182 | 416 this.volatileBody = volatileBody; |
417 } | |
161 | 418 } |
419 | |
420 class AsmStatement : Statement | |
421 { | |
285 | 422 Statements statements; |
423 this(Statements statements) | |
278 | 424 { |
425 mixin(set_kind); | |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
426 addChild(statements); |
285 | 427 this.statements = statements; |
428 } | |
429 } | |
430 | |
431 class AsmInstruction : Statement | |
432 { | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
433 Identifier* ident; |
285 | 434 Expression[] operands; |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
435 this(Identifier* ident, Expression[] operands) |
285 | 436 { |
437 mixin(set_kind); | |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
438 addOptChildren(operands); |
285 | 439 this.ident = ident; |
440 this.operands = operands; | |
441 } | |
442 } | |
443 | |
374 | 444 class AsmAlignStatement : Statement |
445 { | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
446 int number; |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
447 this(int number) |
374 | 448 { |
449 mixin(set_kind); | |
450 this.number = number; | |
451 } | |
452 } | |
453 | |
285 | 454 class IllegalAsmInstruction : IllegalStatement |
455 { | |
496
5a607597dc22
Improved error recovery in the Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
495
diff
changeset
|
456 this() |
285 | 457 { |
458 mixin(set_kind); | |
278 | 459 } |
161 | 460 } |
461 | |
462 class PragmaStatement : Statement | |
463 { | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
464 Identifier* ident; |
184 | 465 Expression[] args; |
466 Statement pragmaBody; | |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
467 this(Identifier* ident, Expression[] args, Statement pragmaBody) |
184 | 468 { |
278 | 469 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
470 addOptChildren(args); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
471 addChild(pragmaBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
472 |
184 | 473 this.ident = ident; |
474 this.args = args; | |
475 this.pragmaBody = pragmaBody; | |
476 } | |
161 | 477 } |
478 | |
479 class MixinStatement : Statement | |
480 { | |
618
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
608
diff
changeset
|
481 Expression templateExpr; |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
482 Identifier* mixinIdent; |
618
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
608
diff
changeset
|
483 this(Expression templateExpr, Identifier* mixinIdent) |
185 | 484 { |
278 | 485 mixin(set_kind); |
618
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
608
diff
changeset
|
486 addChild(templateExpr); |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
608
diff
changeset
|
487 this.templateExpr = templateExpr; |
256 | 488 this.mixinIdent = mixinIdent; |
185 | 489 } |
161 | 490 } |
186
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
491 |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
492 class StaticIfStatement : Statement |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
493 { |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
494 Expression condition; |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
495 Statement ifBody, elseBody; |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
496 this(Expression condition, Statement ifBody, Statement elseBody) |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
497 { |
278 | 498 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
499 addChild(condition); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
500 addChild(ifBody); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
501 addOptChild(elseBody); |
186
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
502 this.condition = condition; |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
503 this.ifBody = ifBody; |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
504 this.elseBody = elseBody; |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
505 } |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
506 } |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
507 |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
508 class StaticAssertStatement : Statement |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
509 { |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
510 Expression condition, message; |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
511 this(Expression condition, Expression message) |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
512 { |
278 | 513 mixin(set_kind); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
514 addChild(condition); |
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
515 addOptChild(message); |
186
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
516 this.condition = condition; |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
517 this.message = message; |
d4292a5a7b8b
- Implemented parseStaticIfStatement() and parseStaticAssertStatement().
aziz
parents:
185
diff
changeset
|
518 } |
187 | 519 } |
190
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
520 |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
521 abstract class ConditionalCompilationStatement : Statement |
190
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
522 { |
264 | 523 Token* cond; |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
524 Statement mainBody, elseBody; |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
525 this(Token* cond, Statement mainBody, Statement elseBody) |
190
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
526 { |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
527 addChild(mainBody); |
489
a7291d3ee9d7
Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
396
diff
changeset
|
528 addOptChild(elseBody); |
264 | 529 this.cond = cond; |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
530 this.mainBody = mainBody; |
190
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
531 this.elseBody = elseBody; |
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
532 } |
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
533 } |
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
534 |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
535 class DebugStatement : ConditionalCompilationStatement |
190
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
536 { |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
537 this(Token* cond, Statement debugBody, Statement elseBody) |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
538 { |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
539 super(cond, debugBody, elseBody); |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
540 mixin(set_kind); |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
541 } |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
542 } |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
543 |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
544 class VersionStatement : ConditionalCompilationStatement |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
545 { |
264 | 546 this(Token* cond, Statement versionBody, Statement elseBody) |
190
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
547 { |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
496
diff
changeset
|
548 super(cond, versionBody, elseBody); |
278 | 549 mixin(set_kind); |
190
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
550 } |
d0712601fa47
- Implemented parseDebugStatement() and parseVersionStatement().
aziz
parents:
188
diff
changeset
|
551 } |