Mercurial > projects > dang
comparison ast/Expr.d @ 201:4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Mon, 11 Aug 2008 18:41:45 +0200 |
parents | |
children | 227d6a8fb574 |
comparison
equal
deleted
inserted
replaced
200:4c121c2aa844 | 201:4f94b5adbc8a |
---|---|
1 module ast.Expr; | |
2 | |
3 /** | |
4 The base class for all Expressions. | |
5 */ | |
6 class Expr | |
7 { | |
8 /// Returns true if the Expr can be compile-time evaluated. | |
9 bool isConstantExpr() { return false; } | |
10 | |
11 NumberLiteral asNumberLiteral() { return null; } | |
12 bool isNumberLiteral() { return false; } | |
13 | |
14 StringLiteral asStringLiteral() { return null; } | |
15 bool isStringLiteral() { return false; } | |
16 | |
17 ArrayLiteral asArrayLiteral() { return null; } | |
18 bool isArrayLiteral() { return false; } | |
19 } | |
20 | |
21 /** | |
22 NumberLiteral | |
23 */ | |
24 class NumberLiteral : Expr | |
25 { | |
26 override bool isConstantExpr() { return true; } | |
27 | |
28 override NumberLiteral asNumberLiteral() { return this; } | |
29 override bool isNumberLiteral() { return true; } | |
30 } | |
31 | |
32 /** | |
33 StringLiteral | |
34 */ | |
35 class StringLiteral : Expr | |
36 { | |
37 override bool isConstantExpr() { return true; } | |
38 | |
39 override StringLiteral asStringLiteral() { return this; } | |
40 override bool isStringLiteral() { return true; } | |
41 } | |
42 | |
43 | |
44 /** | |
45 StringLiteral | |
46 */ | |
47 class ArrayLiteral : Expr | |
48 { | |
49 override bool isConstantExpr() | |
50 { | |
51 foreach (arg; arguments) | |
52 if (!arg.isConstantExpr()) | |
53 return false; | |
54 return true; | |
55 } | |
56 | |
57 override ArrayLiteral asArrayLiteral() { return this; } | |
58 override bool isArrayLiteral() { return true; } | |
59 | |
60 private: | |
61 Expr[] arguments; | |
62 } | |
63 | |
64 | |
65 | |
66 /** | |
67 Identifier | |
68 */ | |
69 class Identifier : Expr | |
70 { | |
71 | |
72 } |