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 }