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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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