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