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