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