Mercurial > projects > dil
annotate trunk/src/Types.d @ 135:145e0d68ec95
- Added enum TID to module Type.
- Classes that inherit from Type are passing correct TID to its ctor.
author | aziz |
---|---|
date | Tue, 10 Jul 2007 22:23:02 +0000 |
parents | a31aa0d6dd5e |
children | b49903801f14 |
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 |
135 | 74 enum TID |
75 { | |
76 Void = TOK.Void, | |
77 Char = TOK.Char, | |
78 Wchar = TOK.Wchar, | |
79 Dchar = TOK.Dchar, | |
80 Bool = TOK.Bool, | |
81 Byte = TOK.Byte, | |
82 Ubyte = TOK.Ubyte, | |
83 Short = TOK.Short, | |
84 Ushort = TOK.Ushort, | |
85 Int = TOK.Int, | |
86 Uint = TOK.Uint, | |
87 Long = TOK.Long, | |
88 Ulong = TOK.Ulong, | |
89 Float = TOK.Float, | |
90 Double = TOK.Double, | |
91 Real = TOK.Real, | |
92 Ifloat = TOK.Ifloat, | |
93 Idouble = TOK.Idouble, | |
94 Ireal = TOK.Ireal, | |
95 Cfloat = TOK.Cfloat, | |
96 Cdouble = TOK.Cdouble, | |
97 Creal = TOK.Creal, | |
98 | |
99 Undefined, | |
100 Function, | |
101 Delegate, | |
102 Pointer, | |
103 Array, | |
104 Identifier, | |
105 Typeof, | |
106 Specialization, | |
107 } | |
108 | |
94 | 109 class Type |
110 { | |
135 | 111 TID tid; |
95 | 112 Type next; |
113 | |
135 | 114 this(TOK tok) |
115 { | |
116 this.tid = cast(TID)tok; | |
117 } | |
95 | 118 |
135 | 119 this(TID tid) |
120 { this(tid, null); } | |
121 | |
122 this(TID tid, Type next) | |
94 | 123 { |
135 | 124 this.tid = tid; |
95 | 125 this.next = next; |
94 | 126 } |
127 } | |
128 | |
134
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
129 class UndefinedType : Type |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
130 { |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
131 this() |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
132 { |
135 | 133 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
|
134 } |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
135 } |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
136 |
94 | 137 class IdentifierType : Type |
138 { | |
139 string[] idents; | |
140 | |
141 this(string[] idents) | |
142 { | |
135 | 143 super(TID.Identifier, null); |
94 | 144 this.idents = idents; |
145 } | |
146 | |
135 | 147 this(TID tid) |
94 | 148 { |
135 | 149 super(tid); |
94 | 150 } |
151 | |
152 void opCatAssign(string ident) | |
153 { | |
154 this.idents ~= ident; | |
155 } | |
156 } | |
157 | |
158 class TypeofType : IdentifierType | |
159 { | |
160 Expression e; | |
161 this(Expression e) | |
162 { | |
135 | 163 super(TID.Typeof); |
94 | 164 this.e = e; |
165 } | |
166 } | |
95 | 167 |
168 class PointerType : Type | |
169 { | |
170 this(Type t) | |
171 { | |
135 | 172 super(TID.Pointer, t); |
95 | 173 } |
174 } | |
175 | |
176 class ArrayType : Type | |
177 { | |
106 | 178 Expression e, e2; |
179 Type assocType; | |
180 this(Type t) | |
95 | 181 { |
135 | 182 super(TID.Array, t); |
106 | 183 } |
184 this(Type t, Expression e, Expression e2) | |
185 { | |
186 this(t); | |
95 | 187 this.e = e; |
106 | 188 this.e2 = e2; |
189 } | |
190 this(Type t, Type assocType) | |
191 { | |
192 this(t); | |
193 this.assocType = assocType; | |
95 | 194 } |
195 } | |
100 | 196 |
197 class SpecializationType : Type | |
198 { | |
106 | 199 TOK specTok; // Colon|Equal |
100 | 200 Type type; |
106 | 201 TOK tokType; // Typedef|Struct|Union|Class|Interface| |
202 // Enum|Function|Delegate|Super|Return | |
100 | 203 |
204 this(TOK specTok, TOK tokType) | |
205 { | |
135 | 206 super(TID.Specialization, null); |
100 | 207 this.specTok = specTok; |
208 this.tokType = tokType; | |
209 } | |
210 | |
211 this(TOK specTok, Type type) | |
212 { | |
135 | 213 super(TID.Specialization, null); |
100 | 214 this.specTok = specTok; |
215 this.type = type; | |
216 } | |
217 } | |
130 | 218 |
219 class FunctionType : Type | |
220 { | |
221 Type returnType; | |
222 Parameters parameters; | |
223 this(Type returnType, Parameters parameters) | |
224 { | |
135 | 225 super(TID.Function, null); |
130 | 226 this.returnType = returnType; |
227 this.parameters = parameters; | |
228 } | |
229 } | |
135 | 230 |
231 class DelegateType : Type | |
232 { | |
233 this(Type func) | |
234 { | |
235 super(TID.Delegate, func); | |
236 } | |
237 } |