Mercurial > projects > dil
annotate trunk/src/Types.d @ 117:79857de26e86
- Moved class Parameter to module Types. Added struct Parameters.
- Implemented parseConstructorDeclaration().
- Added method stub parseStatements().
- Restructured parseBaseClasses() a bit.
author | aziz |
---|---|
date | Mon, 09 Jul 2007 16:36:05 +0000 |
parents | 441962b0f526 |
children | 0467f01ed524 |
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 | |
89 class IdentifierType : Type | |
90 { | |
91 string[] idents; | |
92 | |
93 this(string[] idents) | |
94 { | |
95 | 95 super(TOK.Identifier, null); |
94 | 96 this.idents = idents; |
97 } | |
98 | |
99 this(TOK type) | |
100 { | |
95 | 101 super(type, null); |
94 | 102 } |
103 | |
104 void opCatAssign(string ident) | |
105 { | |
106 this.idents ~= ident; | |
107 } | |
108 } | |
109 | |
110 class TypeofType : IdentifierType | |
111 { | |
112 Expression e; | |
113 this(Expression e) | |
114 { | |
115 super(TOK.Typeof); | |
116 this.e = e; | |
117 } | |
118 } | |
95 | 119 |
120 class PointerType : Type | |
121 { | |
122 this(Type t) | |
123 { | |
124 super(TOK.Mul, t); | |
125 } | |
126 } | |
127 | |
128 class ArrayType : Type | |
129 { | |
106 | 130 Expression e, e2; |
131 Type assocType; | |
132 this(Type t) | |
95 | 133 { |
134 super(TOK.Invalid, t); | |
106 | 135 } |
136 this(Type t, Expression e, Expression e2) | |
137 { | |
138 this(t); | |
95 | 139 this.e = e; |
106 | 140 this.e2 = e2; |
141 } | |
142 this(Type t, Type assocType) | |
143 { | |
144 this(t); | |
145 this.assocType = assocType; | |
95 | 146 } |
147 } | |
100 | 148 |
149 class SpecializationType : Type | |
150 { | |
106 | 151 TOK specTok; // Colon|Equal |
100 | 152 Type type; |
106 | 153 TOK tokType; // Typedef|Struct|Union|Class|Interface| |
154 // Enum|Function|Delegate|Super|Return | |
100 | 155 |
156 this(TOK specTok, TOK tokType) | |
157 { | |
158 super(TOK.Invalid, null); | |
159 this.specTok = specTok; | |
160 this.tokType = tokType; | |
161 } | |
162 | |
163 this(TOK specTok, Type type) | |
164 { | |
165 super(TOK.Invalid, null); | |
166 this.specTok = specTok; | |
167 this.type = type; | |
168 } | |
169 } |