Mercurial > projects > dang
annotate ast/Expr.d @ 205:8387cbaa85ab
Small addition to the comments of an assign expr.
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Mon, 11 Aug 2008 21:56:21 +0200 |
parents | 227d6a8fb574 |
children |
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 /** |
205
8387cbaa85ab
Small addition to the comments of an assign expr.
Anders Johnsen <skabet@gmail.com>
parents:
204
diff
changeset
|
119 The Assign expression contains two expression, a left and a right side, |
8387cbaa85ab
Small addition to the comments of an assign expr.
Anders Johnsen <skabet@gmail.com>
parents:
204
diff
changeset
|
120 left being a lvalue, right being a rvalue. |
8387cbaa85ab
Small addition to the comments of an assign expr.
Anders Johnsen <skabet@gmail.com>
parents:
204
diff
changeset
|
121 |
8387cbaa85ab
Small addition to the comments of an assign expr.
Anders Johnsen <skabet@gmail.com>
parents:
204
diff
changeset
|
122 If the right side ain't the same type as the left type, the right side will |
8387cbaa85ab
Small addition to the comments of an assign expr.
Anders Johnsen <skabet@gmail.com>
parents:
204
diff
changeset
|
123 try to be promoted through an implicit cast. If this failes, an error must |
8387cbaa85ab
Small addition to the comments of an assign expr.
Anders Johnsen <skabet@gmail.com>
parents:
204
diff
changeset
|
124 be given. |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
125 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
126 class Assign : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
127 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
128 override Assign asAssign() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
129 override bool isAssign() { return true; } |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
130 |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
131 private: |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
132 Expr left, right; |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
133 } |
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 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
136 Binary |
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 class Binary : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
139 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
140 override Binary asBinary() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
141 override bool isBinary() { return true; } |
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 private: |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
144 Expr left, right; |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
145 } |
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 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
148 Negate |
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 class Negate : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
151 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
152 override Negate asNegate() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
153 override bool isNegate() { return true; } |
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 private: |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
156 Expr expr; |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
157 } |
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 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
160 Deref |
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 class Deref : Expr |
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 override Deref asDeref() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
165 override bool isDeref() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
166 } |
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 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
169 AddressOf |
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 class AddressOf : Expr |
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 override AddressOf asAddressOf() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
174 override bool isAddressOf() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
175 } |
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 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
178 Index |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
179 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
180 class Index : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
181 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
182 override Index asIndex() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
183 override bool isIndex() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
184 } |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
185 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
186 /** |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
187 Identifier |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
188 */ |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
189 class Identifier : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
190 { |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
191 override Identifier asIdentifier() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
192 override bool isIdentifier() { return true; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
193 } |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
194 |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
195 /** |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
196 Member |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
197 */ |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
198 class Member : Expr |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
199 { |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
200 override Member asMember() { return this; } |
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
201 override bool isMember() { return true; } |
201
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
202 } |
204
227d6a8fb574
Added some random stuff...
Anders Johnsen <skabet@gmail.com>
parents:
201
diff
changeset
|
203 |