Mercurial > projects > ldc
comparison dmd/template.h @ 875:330f999ade44
Merged DMD 1.038
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 06 Jan 2009 16:33:51 +0100 |
parents | eef8ac26c66c |
children | 39519a1ff603 |
comparison
equal
deleted
inserted
replaced
874:2ddee23bd70e | 875:330f999ade44 |
---|---|
1 | 1 |
2 // Compiler implementation of the D programming language | 2 // Compiler implementation of the D programming language |
3 // Copyright (c) 1999-2006 by Digital Mars | 3 // Copyright (c) 1999-2008 by Digital Mars |
4 // All Rights Reserved | 4 // All Rights Reserved |
5 // written by Walter Bright | 5 // written by Walter Bright |
6 // http://www.digitalmars.com | 6 // http://www.digitalmars.com |
7 // License for redistribution is by either the Artistic License | 7 // License for redistribution is by either the Artistic License |
8 // in artistic.txt, or the GNU General Public License in gnu.txt. | 8 // in artistic.txt, or the GNU General Public License in gnu.txt. |
52 struct TemplateDeclaration : ScopeDsymbol | 52 struct TemplateDeclaration : ScopeDsymbol |
53 { | 53 { |
54 TemplateParameters *parameters; // array of TemplateParameter's | 54 TemplateParameters *parameters; // array of TemplateParameter's |
55 | 55 |
56 TemplateParameters *origParameters; // originals for Ddoc | 56 TemplateParameters *origParameters; // originals for Ddoc |
57 | 57 #if DMDV2 |
58 Expression *constraint; | |
59 #endif | |
58 Array instances; // array of TemplateInstance's | 60 Array instances; // array of TemplateInstance's |
59 | 61 |
60 TemplateDeclaration *overnext; // next overloaded TemplateDeclaration | 62 TemplateDeclaration *overnext; // next overloaded TemplateDeclaration |
61 TemplateDeclaration *overroot; // first in overnext list | 63 TemplateDeclaration *overroot; // first in overnext list |
62 | 64 |
63 Scope *scope; | 65 Scope *scope; |
64 Dsymbol *onemember; // if !=NULL then one member of this template | 66 Dsymbol *onemember; // if !=NULL then one member of this template |
65 | 67 |
66 TemplateDeclaration(Loc loc, Identifier *id, TemplateParameters *parameters, Array *decldefs); | 68 TemplateDeclaration(Loc loc, Identifier *id, TemplateParameters *parameters, |
69 #if DMDV2 | |
70 Expression *constraint, | |
71 #endif | |
72 Array *decldefs); | |
67 Dsymbol *syntaxCopy(Dsymbol *); | 73 Dsymbol *syntaxCopy(Dsymbol *); |
68 void semantic(Scope *sc); | 74 void semantic(Scope *sc); |
69 int overloadInsert(Dsymbol *s); | 75 int overloadInsert(Dsymbol *s); |
70 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | 76 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
71 const char *kind(); | 77 const char *kind(); |
75 // void toDocBuffer(OutBuffer *buf); | 81 // void toDocBuffer(OutBuffer *buf); |
76 | 82 |
77 MATCH matchWithInstance(TemplateInstance *ti, Objects *atypes, int flag); | 83 MATCH matchWithInstance(TemplateInstance *ti, Objects *atypes, int flag); |
78 int leastAsSpecialized(TemplateDeclaration *td2); | 84 int leastAsSpecialized(TemplateDeclaration *td2); |
79 | 85 |
80 MATCH deduceFunctionTemplateMatch(Objects *targsi, Expressions *fargs, Objects *dedargs); | 86 MATCH deduceFunctionTemplateMatch(Loc loc, Objects *targsi, Expression *ethis, Expressions *fargs, Objects *dedargs); |
81 FuncDeclaration *deduceFunctionTemplate(Scope *sc, Loc loc, Objects *targsi, Expressions *fargs); | 87 FuncDeclaration *deduceFunctionTemplate(Scope *sc, Loc loc, Objects *targsi, Expression *ethis, Expressions *fargs, int flags = 0); |
82 void declareParameter(Scope *sc, TemplateParameter *tp, Object *o); | 88 void declareParameter(Scope *sc, TemplateParameter *tp, Object *o); |
83 | 89 |
84 TemplateDeclaration *isTemplateDeclaration() { return this; } | 90 TemplateDeclaration *isTemplateDeclaration() { return this; } |
85 | 91 |
86 TemplateTupleParameter *isVariadic(); | 92 TemplateTupleParameter *isVariadic(); |
110 TemplateParameter(Loc loc, Identifier *ident); | 116 TemplateParameter(Loc loc, Identifier *ident); |
111 | 117 |
112 virtual TemplateTypeParameter *isTemplateTypeParameter(); | 118 virtual TemplateTypeParameter *isTemplateTypeParameter(); |
113 virtual TemplateValueParameter *isTemplateValueParameter(); | 119 virtual TemplateValueParameter *isTemplateValueParameter(); |
114 virtual TemplateAliasParameter *isTemplateAliasParameter(); | 120 virtual TemplateAliasParameter *isTemplateAliasParameter(); |
121 #if DMDV2 | |
122 virtual TemplateThisParameter *isTemplateThisParameter(); | |
123 #endif | |
115 virtual TemplateTupleParameter *isTemplateTupleParameter(); | 124 virtual TemplateTupleParameter *isTemplateTupleParameter(); |
116 | 125 |
117 virtual TemplateParameter *syntaxCopy() = 0; | 126 virtual TemplateParameter *syntaxCopy() = 0; |
118 virtual void declareParameter(Scope *sc) = 0; | 127 virtual void declareParameter(Scope *sc) = 0; |
119 virtual void semantic(Scope *) = 0; | 128 virtual void semantic(Scope *) = 0; |
120 virtual void print(Object *oarg, Object *oded) = 0; | 129 virtual void print(Object *oarg, Object *oded) = 0; |
121 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs) = 0; | 130 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs) = 0; |
122 virtual Object *specialization() = 0; | 131 virtual Object *specialization() = 0; |
123 virtual Object *defaultArg(Scope *sc) = 0; | 132 virtual Object *defaultArg(Loc loc, Scope *sc) = 0; |
124 | 133 |
125 /* If TemplateParameter's match as far as overloading goes. | 134 /* If TemplateParameter's match as far as overloading goes. |
126 */ | 135 */ |
127 virtual int overloadMatch(TemplateParameter *) = 0; | 136 virtual int overloadMatch(TemplateParameter *) = 0; |
128 | 137 |
150 void declareParameter(Scope *sc); | 159 void declareParameter(Scope *sc); |
151 void semantic(Scope *); | 160 void semantic(Scope *); |
152 void print(Object *oarg, Object *oded); | 161 void print(Object *oarg, Object *oded); |
153 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | 162 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
154 Object *specialization(); | 163 Object *specialization(); |
155 Object *defaultArg(Scope *sc); | 164 Object *defaultArg(Loc loc, Scope *sc); |
156 int overloadMatch(TemplateParameter *); | 165 int overloadMatch(TemplateParameter *); |
157 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam); | 166 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam); |
158 void *dummyArg(); | 167 void *dummyArg(); |
159 }; | 168 }; |
160 | 169 |
194 void declareParameter(Scope *sc); | 203 void declareParameter(Scope *sc); |
195 void semantic(Scope *); | 204 void semantic(Scope *); |
196 void print(Object *oarg, Object *oded); | 205 void print(Object *oarg, Object *oded); |
197 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | 206 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
198 Object *specialization(); | 207 Object *specialization(); |
199 Object *defaultArg(Scope *sc); | 208 Object *defaultArg(Loc loc, Scope *sc); |
200 int overloadMatch(TemplateParameter *); | 209 int overloadMatch(TemplateParameter *); |
201 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam); | 210 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam); |
202 void *dummyArg(); | 211 void *dummyArg(); |
203 }; | 212 }; |
204 | 213 |
222 void declareParameter(Scope *sc); | 231 void declareParameter(Scope *sc); |
223 void semantic(Scope *); | 232 void semantic(Scope *); |
224 void print(Object *oarg, Object *oded); | 233 void print(Object *oarg, Object *oded); |
225 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | 234 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
226 Object *specialization(); | 235 Object *specialization(); |
227 Object *defaultArg(Scope *sc); | 236 Object *defaultArg(Loc loc, Scope *sc); |
228 int overloadMatch(TemplateParameter *); | 237 int overloadMatch(TemplateParameter *); |
229 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam); | 238 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam); |
230 void *dummyArg(); | 239 void *dummyArg(); |
231 }; | 240 }; |
232 | 241 |
243 void declareParameter(Scope *sc); | 252 void declareParameter(Scope *sc); |
244 void semantic(Scope *); | 253 void semantic(Scope *); |
245 void print(Object *oarg, Object *oded); | 254 void print(Object *oarg, Object *oded); |
246 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | 255 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
247 Object *specialization(); | 256 Object *specialization(); |
248 Object *defaultArg(Scope *sc); | 257 Object *defaultArg(Loc loc, Scope *sc); |
249 int overloadMatch(TemplateParameter *); | 258 int overloadMatch(TemplateParameter *); |
250 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam); | 259 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam); |
251 void *dummyArg(); | 260 void *dummyArg(); |
252 }; | 261 }; |
253 | 262 |