Mercurial > projects > dil
annotate trunk/src/Types.d @ 134:a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
author | aziz |
---|---|
date | Tue, 10 Jul 2007 21:20:05 +0000 |
parents | 0467f01ed524 |
children | 145e0d68ec95 |
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 |
94 | 74 class Type |
75 { | |
76 TOK type; | |
95 | 77 Type next; |
78 | |
94 | 79 this(TOK type) |
95 | 80 { this(type, null); } |
81 | |
82 this(TOK type, Type next) | |
94 | 83 { |
84 this.type = type; | |
95 | 85 this.next = next; |
94 | 86 } |
87 } | |
88 | |
134
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
89 class UndefinedType : Type |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
90 { |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
91 this() |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
92 { |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
93 super(TOK.Invalid, null); |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
94 } |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
95 } |
a31aa0d6dd5e
- Added class UndefinedType. Returning it in parseBasicType() when no token matched the basic type list.
aziz
parents:
130
diff
changeset
|
96 |
94 | 97 class IdentifierType : Type |
98 { | |
99 string[] idents; | |
100 | |
101 this(string[] idents) | |
102 { | |
95 | 103 super(TOK.Identifier, null); |
94 | 104 this.idents = idents; |
105 } | |
106 | |
107 this(TOK type) | |
108 { | |
95 | 109 super(type, null); |
94 | 110 } |
111 | |
112 void opCatAssign(string ident) | |
113 { | |
114 this.idents ~= ident; | |
115 } | |
116 } | |
117 | |
118 class TypeofType : IdentifierType | |
119 { | |
120 Expression e; | |
121 this(Expression e) | |
122 { | |
123 super(TOK.Typeof); | |
124 this.e = e; | |
125 } | |
126 } | |
95 | 127 |
128 class PointerType : Type | |
129 { | |
130 this(Type t) | |
131 { | |
132 super(TOK.Mul, t); | |
133 } | |
134 } | |
135 | |
136 class ArrayType : Type | |
137 { | |
106 | 138 Expression e, e2; |
139 Type assocType; | |
140 this(Type t) | |
95 | 141 { |
142 super(TOK.Invalid, t); | |
106 | 143 } |
144 this(Type t, Expression e, Expression e2) | |
145 { | |
146 this(t); | |
95 | 147 this.e = e; |
106 | 148 this.e2 = e2; |
149 } | |
150 this(Type t, Type assocType) | |
151 { | |
152 this(t); | |
153 this.assocType = assocType; | |
95 | 154 } |
155 } | |
100 | 156 |
157 class SpecializationType : Type | |
158 { | |
106 | 159 TOK specTok; // Colon|Equal |
100 | 160 Type type; |
106 | 161 TOK tokType; // Typedef|Struct|Union|Class|Interface| |
162 // Enum|Function|Delegate|Super|Return | |
100 | 163 |
164 this(TOK specTok, TOK tokType) | |
165 { | |
166 super(TOK.Invalid, null); | |
167 this.specTok = specTok; | |
168 this.tokType = tokType; | |
169 } | |
170 | |
171 this(TOK specTok, Type type) | |
172 { | |
173 super(TOK.Invalid, null); | |
174 this.specTok = specTok; | |
175 this.type = type; | |
176 } | |
177 } | |
130 | 178 |
179 class FunctionType : Type | |
180 { | |
181 Type returnType; | |
182 Parameters parameters; | |
183 this(Type returnType, Parameters parameters) | |
184 { | |
185 super(TOK.Invalid, null); | |
186 this.returnType = returnType; | |
187 this.parameters = parameters; | |
188 } | |
189 } |