Mercurial > projects > dang
annotate ast/Expr.d @ 204:227d6a8fb574
Added some random stuff...
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Mon, 11 Aug 2008 21:27:44 +0200 |
parents | 4f94b5adbc8a |
children | 8387cbaa85ab |
rev | line source |
---|---|
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
1 module ast.Expr; |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
2 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
3 /** |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
4 The base class for all Expressions. |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
5 */ |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
6 class Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
7 { |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
8 /// Get the type of the Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
9 Object getType() |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
10 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
11 assert(0, "Unimplemented"); |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
12 return null; |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
13 } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
14 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
15 /// Set the type of the Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
16 void setType(Object type) |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
17 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
18 assert(0, "Unimplemented"); |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
19 } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
20 |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
21 /// Returns true if the Expr can be compile-time evaluated. |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
22 bool isConstantExpr() { return false; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
23 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
24 NumberLiteral asNumberLiteral() { return null; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
25 bool isNumberLiteral() { return false; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
26 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
27 StringLiteral asStringLiteral() { return null; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
28 bool isStringLiteral() { return false; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
29 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
30 ArrayLiteral asArrayLiteral() { return null; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
31 bool isArrayLiteral() { return false; } |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
32 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
33 Assign asAssign() { return null; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
34 bool isAssign() { return false; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
35 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
36 Binary asBinary() { return null; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
37 bool isBinary() { return false; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
38 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
39 Negate asNegate() { return null; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
40 bool isNegate() { return false; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
41 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
42 Deref asDeref() { return null; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
43 bool isDeref() { return false; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
44 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
45 AddressOf asAddressOf() { return null; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
46 bool isAddressOf() { return false; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
47 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
48 Index asIndex() { return null; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
49 bool isIndex() { return false; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
50 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
51 Identifier asIdentifier() { return null; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
52 bool isIdentifier() { return false; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
53 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
54 Member asMember() { return null; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
55 bool isMember() { return false; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
56 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
57 private: |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
58 /// FIXME: Add DType? here |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
59 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
60 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
61 /** |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
62 NumberLiteral |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
63 */ |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
64 /// FIXME: Should there be an IntegerLiteral and FloatLiteral instead? |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
65 class NumberLiteral : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
66 { |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
67 override bool isConstantExpr() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
68 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
69 override NumberLiteral asNumberLiteral() { return this; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
70 override bool isNumberLiteral() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
71 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
72 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
73 /** |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
74 StringLiteral |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
75 */ |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
76 class StringLiteral : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
77 { |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
78 override bool isConstantExpr() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
79 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
80 override StringLiteral asStringLiteral() { return this; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
81 override bool isStringLiteral() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
82 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
83 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
84 /** |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
85 ArrayLiteral |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
86 */ |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
87 class ArrayLiteral : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
88 { |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
89 /// Return the arguments for the ArrayLiteral |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
90 Expr[] getArguments() { return arguments; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
91 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
92 /// Return a given argument for the ArrayLiteral |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
93 Expr getArgument(int index) { return arguments[index]; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
94 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
95 /// Get the count of arguments for the ArrayLiteral |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
96 int getArgumentCount() { return arguments.length; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
97 |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
98 override bool isConstantExpr() |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
99 { |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
100 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
101 If all the arguments to the ArrayLiteral is an constant Expr, then |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
102 this ArrayLiteral can be considered an constant Expr aswell. |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
103 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
104 // FIXME: consider if it should save the result |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
105 foreach (arg; arguments) |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
106 if (!arg.isConstantExpr()) |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
107 return false; |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
108 return true; |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
109 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
110 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
111 override ArrayLiteral asArrayLiteral() { return this; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
112 override bool isArrayLiteral() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
113 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
114 private: |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
115 Expr[] arguments; |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
116 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
117 |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
118 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
119 Assign |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
120 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
121 class Assign : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
122 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
123 override Assign asAssign() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
124 override bool isAssign() { return true; } |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
125 |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
126 private: |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
127 Expr left, right; |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
128 } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
129 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
130 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
131 Binary |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
132 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
133 class Binary : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
134 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
135 override Binary asBinary() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
136 override bool isBinary() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
137 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
138 private: |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
139 Expr left, right; |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
140 } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
141 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
142 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
143 Negate |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
144 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
145 class Negate : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
146 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
147 override Negate asNegate() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
148 override bool isNegate() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
149 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
150 private: |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
151 Expr expr; |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
152 } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
153 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
154 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
155 Deref |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
156 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
157 class Deref : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
158 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
159 override Deref asDeref() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
160 override bool isDeref() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
161 } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
162 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
163 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
164 AddressOf |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
165 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
166 class AddressOf : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
167 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
168 override AddressOf asAddressOf() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
169 override bool isAddressOf() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
170 } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
171 |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
172 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
173 Index |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
174 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
175 class Index : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
176 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
177 override Index asIndex() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
178 override bool isIndex() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
179 } |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
180 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
181 /** |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
182 Identifier |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
183 */ |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
184 class Identifier : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
185 { |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
186 override Identifier asIdentifier() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
187 override bool isIdentifier() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
188 } |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
189 |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
190 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
191 Member |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
192 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
193 class Member : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
194 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
195 override Member asMember() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
196 override bool isMember() { return true; } |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
197 } |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
198 |