comparison dmd/TemplateDeclaration.d @ 121:347de076ad34

TemplateParameters -> Vector
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Thu, 02 Sep 2010 22:41:12 +0100
parents e28b18c23469
children 1765f3ef917d
comparison
equal deleted inserted replaced
120:46ef67271ef3 121:347de076ad34
55 { 55 {
56 size_t dim = parameters.dim; 56 size_t dim = parameters.dim;
57 TemplateTupleParameter tp = null; 57 TemplateTupleParameter tp = null;
58 58
59 if (dim) 59 if (dim)
60 tp = (cast(TemplateParameter)parameters.data[dim - 1]).isTemplateTupleParameter(); 60 tp = parameters[dim - 1].isTemplateTupleParameter();
61 61
62 return tp; 62 return tp;
63 } 63 }
64 64
65 void ObjectToCBuffer(OutBuffer buf, HdrGenState* hgs, Object oarg) 65 void ObjectToCBuffer(OutBuffer buf, HdrGenState* hgs, Object oarg)
163 { 163 {
164 p = new TemplateParameters(); 164 p = new TemplateParameters();
165 p.setDim(parameters.dim); 165 p.setDim(parameters.dim);
166 for (int i = 0; i < p.dim; i++) 166 for (int i = 0; i < p.dim; i++)
167 { 167 {
168 TemplateParameter tp = cast(TemplateParameter)parameters.data[i]; 168 auto tp = parameters[i];
169 p.data[i] = cast(void*)tp.syntaxCopy(); 169 p[i] = tp.syntaxCopy();
170 } 170 }
171 } 171 }
172 172
173 Expression e = null; 173 Expression e = null;
174 if (constraint) 174 if (constraint)
226 226
227 if (global.params.doDocComments) 227 if (global.params.doDocComments)
228 { 228 {
229 origParameters = new TemplateParameters(); 229 origParameters = new TemplateParameters();
230 origParameters.setDim(parameters.dim); 230 origParameters.setDim(parameters.dim);
231 for (int i = 0; i < parameters.dim; i++) 231 foreach (size_t i, TemplateParameter tp; parameters)
232 { 232 {
233 TemplateParameter tp = cast(TemplateParameter)parameters.data[i]; 233 origParameters[i] = tp.syntaxCopy();
234 origParameters.data[i] = cast(void*)tp.syntaxCopy(); 234 }
235 } 235 }
236 } 236
237 237 foreach (tp; parameters)
238 for (int i = 0; i < parameters.dim; i++) 238 {
239 {
240 TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
241 tp.declareParameter(paramscope); 239 tp.declareParameter(paramscope);
242 } 240 }
243 241
244 for (int i = 0; i < parameters.dim; i++) 242 foreach (size_t i, TemplateParameter tp; parameters)
245 { 243 {
246 TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
247
248 tp.semantic(paramscope); 244 tp.semantic(paramscope);
249 if (i + 1 != parameters.dim && tp.isTemplateTupleParameter()) 245 if (i + 1 != parameters.dim && tp.isTemplateTupleParameter())
250 error("template tuple parameter must be last one"); 246 error("template tuple parameter must be last one");
251 } 247 }
252 248
333 } 329 }
334 buf.writestring(kind()); 330 buf.writestring(kind());
335 buf.writeByte(' '); 331 buf.writeByte(' ');
336 buf.writestring(ident.toChars()); 332 buf.writestring(ident.toChars());
337 buf.writeByte('('); 333 buf.writeByte('(');
338 for (int i = 0; i < parameters.dim; i++) 334 foreach (size_t i, TemplateParameter tp; parameters)
339 { 335 {
340 TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
341 if (hgs.ddoc) 336 if (hgs.ddoc)
342 tp = cast(TemplateParameter)origParameters.data[i]; 337 tp = origParameters[i];
343 if (i) 338 if (i)
344 buf.writeByte(','); 339 buf.writeByte(',');
345 tp.toCBuffer(buf, hgs); 340 tp.toCBuffer(buf, hgs);
346 } 341 }
347 buf.writeByte(')'); 342 buf.writeByte(')');
413 HdrGenState hgs; 408 HdrGenState hgs;
414 409
415 /// memset(&hgs, 0, hgs.sizeof); 410 /// memset(&hgs, 0, hgs.sizeof);
416 buf.writestring(ident.toChars()); 411 buf.writestring(ident.toChars());
417 buf.writeByte('('); 412 buf.writeByte('(');
418 for (int i = 0; i < parameters.dim; i++) 413 foreach (size_t i, TemplateParameter tp; parameters)
419 { 414 {
420 TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
421 if (i) 415 if (i)
422 buf.writeByte(','); 416 buf.writeByte(',');
423 tp.toCBuffer(buf, &hgs); 417 tp.toCBuffer(buf, &hgs);
424 } 418 }
425 buf.writeByte(')'); 419 buf.writeByte(')');
494 // Attempt type deduction 488 // Attempt type deduction
495 m = MATCHexact; 489 m = MATCHexact;
496 for (int i = 0; i < dedtypes_dim; i++) 490 for (int i = 0; i < dedtypes_dim; i++)
497 { 491 {
498 MATCH m2; 492 MATCH m2;
499 TemplateParameter tp = cast(TemplateParameter)parameters.data[i]; 493 auto tp = parameters[i];
500 Declaration sparam; 494 Declaration sparam;
501 495
502 //printf("\targument [%d]\n", i); 496 //printf("\targument [%d]\n", i);
503 version (LOGM) { 497 version (LOGM) {
504 //printf("\targument [%d] is %s\n", i, oarg ? oarg.toChars() : "null"); 498 //printf("\targument [%d] is %s\n", i, oarg ? oarg.toChars() : "null");
635 // generated from the parameters to this template declaration 629 // generated from the parameters to this template declaration
636 ti.tiargs = new Objects(); 630 ti.tiargs = new Objects();
637 ti.tiargs.setDim(parameters.dim); 631 ti.tiargs.setDim(parameters.dim);
638 for (int i = 0; i < ti.tiargs.dim; i++) 632 for (int i = 0; i < ti.tiargs.dim; i++)
639 { 633 {
640 TemplateParameter tp = cast(TemplateParameter)parameters.data[i]; 634 auto tp = parameters[i];
641 635
642 auto p = tp.dummyArg(); 636 auto p = tp.dummyArg();
643 if (p) 637 if (p)
644 ti.tiargs[i] = p; 638 ti.tiargs[i] = p;
645 else 639 else
770 memcpy(dedargs.ptr, targsi.ptr, n * (*dedargs.ptr).sizeof); 764 memcpy(dedargs.ptr, targsi.ptr, n * (*dedargs.ptr).sizeof);
771 765
772 for (size_t i = 0; i < n; i++) 766 for (size_t i = 0; i < n; i++)
773 { 767 {
774 assert(i < parameters.dim); 768 assert(i < parameters.dim);
775 auto tp2 = cast(TemplateParameter)parameters.data[i]; 769 auto tp2 = parameters[i];
776 MATCH m; 770 MATCH m;
777 Declaration sparam = null; 771 Declaration sparam = null;
778 772
779 m = tp2.matchArg(paramscope, dedargs, i, parameters, dedtypes, &sparam); 773 m = tp2.matchArg(paramscope, dedargs, i, parameters, dedtypes, &sparam);
780 //printf("\tdeduceType m = %d\n", m); 774 //printf("\tdeduceType m = %d\n", m);
888 // Match 'ethis' to any TemplateThisParameter's 882 // Match 'ethis' to any TemplateThisParameter's
889 if (ethis) 883 if (ethis)
890 { 884 {
891 for (size_t i = 0; i < parameters.dim; i++) 885 for (size_t i = 0; i < parameters.dim; i++)
892 { 886 {
893 TemplateParameter tp2 = cast(TemplateParameter)parameters.data[i]; 887 auto tp2 = parameters[i];
894 TemplateThisParameter ttp = tp2.isTemplateThisParameter(); 888 TemplateThisParameter ttp = tp2.isTemplateThisParameter();
895 if (ttp) 889 if (ttp)
896 { 890 {
897 MATCH m; 891 MATCH m;
898 892
1058 1052
1059 /* Fill in any missing arguments with their defaults. 1053 /* Fill in any missing arguments with their defaults.
1060 */ 1054 */
1061 for (size_t i = nargsi; i < dedargs.dim; i++) 1055 for (size_t i = nargsi; i < dedargs.dim; i++)
1062 { 1056 {
1063 auto tp2 = cast(TemplateParameter)parameters.data[i]; 1057 auto tp2 = parameters[i];
1064 //printf("tp2[%d] = %s\n", i, tp2.ident.toChars()); 1058 //printf("tp2[%d] = %s\n", i, tp2.ident.toChars());
1065 /* For T:T*, the dedargs is the T*, dedtypes is the T 1059 /* For T:T*, the dedargs is the T*, dedtypes is the T
1066 * But for function templates, we really need them to match 1060 * But for function templates, we really need them to match
1067 */ 1061 */
1068 Object oarg = dedargs[i]; 1062 Object oarg = dedargs[i];