Mercurial > projects > dil
annotate trunk/src/Types.d @ 150:753bc07bf3a0
- Forgot to pass ident to constructor of TemplateArgument.
- Implemented parseMixinDeclaration().
- Forgot calling nT() before creating an AttributeDeclaration.
- Removed GlobalIdExpression. Creating an IdentifierExpression with "." as ident instead.
- Created TemplateArguments typedef for Object[].
author | aziz |
---|---|
date | Thu, 12 Jul 2007 18:06:02 +0000 |
parents | b49903801f14 |
children | 66790fc2c0a2 |
rev | line source |
---|---|
94 | 1 /++ |
2 Author: Aziz Köksal | |
3 License: GPL2 | |
4 +/ | |
5 module Types; | |
6 import Token; | |
7 import Expressions; | |
8 | |
95 | 9 enum StorageClass |
10 { | |
11 None = 0, | |
12 Abstract = 1, | |
13 Auto = 1<<2, | |
14 Const = 1<<3, | |
15 Deprecated = 1<<4, | |
16 Extern = 1<<5, | |
17 Final = 1<<6, | |
18 Invariant = 1<<7, | |
19 Override = 1<<8, | |
20 Scope = 1<<9, | |
21 Static = 1<<10, | |
22 Synchronized = 1<<11, | |
23 In = 1<<12, | |
24 Out = 1<<13, | |
25 Ref = 1<<14, | |
26 Lazy = 1<<15, | |
27 Variadic = 1<<16, | |
28 } | |
29 | |
117
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
30 class Parameter |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
31 { |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
32 StorageClass stc; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
33 Type type; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
34 string ident; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
35 Expression assignExpr; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
36 |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
37 this(StorageClass stc, Type type, string ident, Expression assignExpr) |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
38 { |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
39 this.stc = stc; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
40 this.type = type; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
41 this.ident = ident; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
42 this.assignExpr = assignExpr; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
43 } |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
44 |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
45 bool isVariadic() |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
46 { |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
47 return !!(stc & StorageClass.Variadic); |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
48 } |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
49 |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
50 bool isOnlyVariadic() |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
51 { |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
52 return stc == StorageClass.Variadic; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
53 } |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
54 } |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
55 |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
56 struct Parameters |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
57 { |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
58 Parameter[] items; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
59 |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
60 bool hasVariadic() |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
61 { |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
62 if (items.length != 0) |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
63 return items[$-1].isVariadic(); |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
64 return false; |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
65 } |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
66 |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
67 void opCatAssign(Parameter param) |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
68 { items ~= param; } |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
69 |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
70 size_t length() |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
71 { return items.length; } |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
72 } |
79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
aziz
parents:
106
diff
changeset
|
73 |
137 | 74 enum TP |
75 { | |
76 Type, | |
77 Value, | |
78 Alias, | |
79 Tuple | |
80 } | |
81 | |
82 class TemplateParameter | |
83 { | |
84 TP tp; | |
85 Type valueType; | |
150
753bc07bf3a0
- Forgot to pass ident to constructor of TemplateArgument.
aziz
parents:
137
diff
changeset
|
86 string ident; |
137 | 87 Type specType, defType; |
88 Expression specValue, defValue; | |
150
753bc07bf3a0
- Forgot to pass ident to constructor of TemplateArgument.
aziz
parents:
137
diff
changeset
|
89 this(TP tp, Type valueType, string ident, Type specType, Type defType, Expression specValue, Expression defValue) |
137 | 90 { |
91 this.tp = tp; | |
92 this.valueType = valueType; | |
150
753bc07bf3a0
- Forgot to pass ident to constructor of TemplateArgument.
aziz
parents:
137
diff
changeset
|
93 this.ident = ident; |
137 | 94 this.specType = specType; |
95 this.defType = defType; | |
96 this.specValue = specValue; | |
97 this.defValue = defValue; | |
98 } | |
99 } | |
100 | |
150
753bc07bf3a0
- Forgot to pass ident to constructor of TemplateArgument.
aziz
parents:
137
diff
changeset
|
101 typedef Object[] TemplateArguments; |
753bc07bf3a0
- Forgot to pass ident to constructor of TemplateArgument.
aziz
parents:
137
diff
changeset
|
102 |
135 | 103 enum TID |
104 { | |
105 Void = TOK.Void, | |
106 Char = TOK.Char, | |
107 Wchar = TOK.Wchar, | |
108 Dchar = TOK.Dchar, | |
109 Bool = TOK.Bool, | |
110 Byte = TOK.Byte, | |
111 Ubyte = TOK.Ubyte, | |
112 Short = TOK.Short, | |
113 Ushort = TOK.Ushort, | |
114 Int = TOK.Int, | |
115 Uint = TOK.Uint, | |
116 Long = TOK.Long, | |
117 Ulong = TOK.Ulong, | |
118 Float = TOK.Float, | |
119 Double = TOK.Double, | |
120 Real = TOK.Real, | |
121 Ifloat = TOK.Ifloat, | |
122 Idouble = TOK.Idouble, | |
123 Ireal = TOK.Ireal, | |
124 Cfloat = TOK.Cfloat, | |
125 Cdouble = TOK.Cdouble, | |
126 Creal = TOK.Creal, | |
127 | |
128 Undefined, | |
129 Function, | |
130 Delegate, | |
131 Pointer, | |
132 Array, | |
133 Identifier, | |
134 Typeof, | |
135 Specialization, | |
136 } | |
137 | |
94 | 138 class Type |
139 { | |
135 | 140 TID tid; |
95 | 141 Type next; |
142 | |
135 | 143 this(TOK tok) |
144 { | |
145 this.tid = cast(TID)tok; | |
146 } | |
95 | 147 |
135 | 148 this(TID tid) |
149 { this(tid, null); } | |
150 | |
151 this(TID tid, Type next) | |
94 | 152 { |
135 | 153 this.tid = tid; |
95 | 154 this.next = next; |
94 | 155 } |
156 } | |
157 | |
134
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
158 class UndefinedType : Type |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
159 { |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
160 this() |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
161 { |
135 | 162 super(TID.Undefined, null); |
134
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
163 } |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
164 } |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
165 |
94 | 166 class IdentifierType : Type |
167 { | |
168 string[] idents; | |
169 | |
170 this(string[] idents) | |
171 { | |
135 | 172 super(TID.Identifier, null); |
94 | 173 this.idents = idents; |
174 } | |
175 | |
135 | 176 this(TID tid) |
94 | 177 { |
135 | 178 super(tid); |
94 | 179 } |
180 | |
181 void opCatAssign(string ident) | |
182 { | |
183 this.idents ~= ident; | |
184 } | |
185 } | |
186 | |
187 class TypeofType : IdentifierType | |
188 { | |
189 Expression e; | |
190 this(Expression e) | |
191 { | |
135 | 192 super(TID.Typeof); |
94 | 193 this.e = e; |
194 } | |
195 } | |
95 | 196 |
197 class PointerType : Type | |
198 { | |
199 this(Type t) | |
200 { | |
135 | 201 super(TID.Pointer, t); |
95 | 202 } |
203 } | |
204 | |
205 class ArrayType : Type | |
206 { | |
106 | 207 Expression e, e2; |
208 Type assocType; | |
209 this(Type t) | |
95 | 210 { |
135 | 211 super(TID.Array, t); |
106 | 212 } |
213 this(Type t, Expression e, Expression e2) | |
214 { | |
215 this(t); | |
95 | 216 this.e = e; |
106 | 217 this.e2 = e2; |
218 } | |
219 this(Type t, Type assocType) | |
220 { | |
221 this(t); | |
222 this.assocType = assocType; | |
95 | 223 } |
224 } | |
100 | 225 |
226 class SpecializationType : Type | |
227 { | |
106 | 228 TOK specTok; // Colon|Equal |
100 | 229 Type type; |
106 | 230 TOK tokType; // Typedef|Struct|Union|Class|Interface| |
231 // Enum|Function|Delegate|Super|Return | |
100 | 232 |
233 this(TOK specTok, TOK tokType) | |
234 { | |
135 | 235 super(TID.Specialization, null); |
100 | 236 this.specTok = specTok; |
237 this.tokType = tokType; | |
238 } | |
239 | |
240 this(TOK specTok, Type type) | |
241 { | |
135 | 242 super(TID.Specialization, null); |
100 | 243 this.specTok = specTok; |
244 this.type = type; | |
245 } | |
246 } | |
130 | 247 |
248 class FunctionType : Type | |
249 { | |
250 Type returnType; | |
251 Parameters parameters; | |
252 this(Type returnType, Parameters parameters) | |
253 { | |
135 | 254 super(TID.Function, null); |
130 | 255 this.returnType = returnType; |
256 this.parameters = parameters; | |
257 } | |
258 } | |
135 | 259 |
260 class DelegateType : Type | |
261 { | |
262 this(Type func) | |
263 { | |
264 super(TID.Delegate, func); | |
265 } | |
266 } |