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