annotate ast/Decl.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 5e05c03d1558
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
199
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
1 module ast.Decl;
201
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
2
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
3 import ast.Expr;
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
4
199
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
5 /**
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
6 The base class for all Declarations.
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
7
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
8 Declarations comes in two forms:
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
9
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
10 $(OL
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
11 $(LI members, such as variables and functions.)
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
12 $(LI types, such as classes, structs.))
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
13
201
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
14 */
199
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
15 class Decl
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
16 {
201
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
17
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
18 /// Method for doing cast(FunctionDecl)
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
19 FunctionDecl asFunctionDecl() { return null;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
20
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
21 /// Returns true if it is a FunctionDecl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
22 bool isFunctionDecl() { return false;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
23
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
24 /// Method for doing cast(VarDecl)
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
25 VarDecl asVarDecl() { return null;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
26
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
27 /// Returns true if it is a VarDecl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
28 bool isVarDecl() { return false;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
29
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
30 /// Method for doing cast(StructDecl)
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
31 StructDecl asStructDecl() { return null;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
32
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
33 /// Returns true if it is a StructDecl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
34 bool isStructDecl() { return false;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
35
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
36 /// Method for doing cast(ClassDecl)
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
37 ClassDecl asClassDecl() { return null;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
38
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
39 /// Returns true if it is a ClassDecl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
40 bool isClassDecl() { return false;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
41
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
42 /// Method for doing cast(InterfaceDecl)
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
43 InterfaceDecl asInterfaceDecl() { return null;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
44
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
45 /// Returns true if it is a InterfaceDecl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
46 bool isInterfaceDecl() { return false;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
47
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
48 /// Method for doing cast(TypedefDecl)
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
49 TypedefDecl asTypedefDecl() { return null;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
50
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
51 /// Returns true if it is a TypedefDecl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
52 bool isTypedefDecl() { return false;}
199
5e05c03d1558 First comment submit.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
53 }
201
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
54
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
55 /**
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
56 The FunctionDecl contains a set of VarDecls, being the parameters of the
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
57 method. It also contains a potentiel list of statements.
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
58 */
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
59 class FunctionDecl : Decl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
60 {
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
61 /// Returns the parameters of the method.
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
62 VarDecl[] getParams() { return params;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
63 /// Return the parameter on a given index.
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
64 VarDecl getParam(int index) { return params[index];}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
65 /// Returns the number of parameters.
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
66 int getNumberOfParamst() { return params.length;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
67 /**
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
68 Returns the number of required arguments, that should be given to
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
69 call this method.
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
70 */
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
71 int getMinimumNumberOfParams()
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
72 {
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
73 assert(0, "Unimplemented");
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
74 return 0;
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
75 }
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
76
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
77 override FunctionDecl asFunctionDecl() { return this;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
78 override bool isFunctionDecl() { return true;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
79
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
80 private:
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
81 VarDecl[] params;
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
82 }
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
83
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
84 /**
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
85 The VarDecl contains as a minimum a Type. As an addition, i will also
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
86 in most cases contain an Identifier that it'll be reconized by and in
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
87 some cases it will also contain an expression that'll be it initializer.
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
88
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
89 Some cases to check:
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
90
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
91 $(UL
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
92 $(LI
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
93 If the VarDecl is a param in a FunctionDecl the initializer, if
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
94 present, should be a constant expression(Enum, Number, String
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
95 or the like).
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
96 )
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
97 )
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
98 */
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
99 class VarDecl : Decl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
100 {
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
101 /// Return true if the VarDecl has an identifier/name.
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
102 bool hasIdentifier() { return !(identifier is null);}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
103 /// Return true if the VarDecl has en initializer.
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
104 bool hasInitializer() { return !(initializer is null);}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
105
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
106 override VarDecl asVarDecl() { return this;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
107 override bool isVarDecl() { return true;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
108
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
109 private:
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
110 Identifier identifier;
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
111 Expr initializer;
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
112 }
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
113
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
114 class StructDecl : Decl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
115 {
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
116 override StructDecl asStructDecl() { return this;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
117 override bool isStructDecl() { return true;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
118 }
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
119
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
120 class ClassDecl : Decl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
121 {
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
122 override ClassDecl asClassDecl() { return this;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
123 override bool isClassDecl() { return true;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
124 }
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
125
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
126 class InterfaceDecl : Decl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
127 {
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
128 override InterfaceDecl asInterfaceDecl() { return this;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
129 override bool isInterfaceDecl() { return true;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
130 }
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
131
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
132 class TypedefDecl : Decl
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
133 {
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
134 override TypedefDecl asTypedefDecl() { return this;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
135 override bool isTypedefDecl() { return true;}
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
136 }
4f94b5adbc8a Added ast/Expr.d to contain all expressions.
Anders Johnsen <skabet@gmail.com>
parents: 199
diff changeset
137