Mercurial > projects > dang
annotate 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 |
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 { |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
8 /// 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
|
9 bool isConstantExpr() { return false; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
10 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
11 NumberLiteral asNumberLiteral() { return null; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
12 bool isNumberLiteral() { return false; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
13 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
14 StringLiteral asStringLiteral() { return null; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
15 bool isStringLiteral() { return false; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
16 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
17 ArrayLiteral asArrayLiteral() { return null; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
18 bool isArrayLiteral() { return false; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
19 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
20 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
21 /** |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
22 NumberLiteral |
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 class NumberLiteral : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
25 { |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
26 override bool isConstantExpr() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
27 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
28 override NumberLiteral asNumberLiteral() { return this; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
29 override bool isNumberLiteral() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
30 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
31 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
32 /** |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
33 StringLiteral |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
34 */ |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
35 class StringLiteral : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
36 { |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
37 override bool isConstantExpr() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
38 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
39 override StringLiteral asStringLiteral() { return this; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
40 override bool isStringLiteral() { return true; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
41 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
42 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
43 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
44 /** |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
45 StringLiteral |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
46 */ |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
47 class ArrayLiteral : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
48 { |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
49 override bool isConstantExpr() |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
50 { |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
51 foreach (arg; arguments) |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
52 if (!arg.isConstantExpr()) |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
53 return false; |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
54 return true; |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
55 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
56 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
57 override ArrayLiteral asArrayLiteral() { return this; } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
58 override bool isArrayLiteral() { return true; } |
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 private: |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
61 Expr[] arguments; |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
62 } |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
63 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
64 |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
65 |
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 Identifier |
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 class Identifier : Expr |
4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
70 { |
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 } |