On 2016-06-20 22:52, Guillaume Chatelet wrote:
The TemplateInstance [1] gives me `tiargs` and `tdtypes`.
// Array of Types/Expressions of template
// instance arguments [int*, char, 10*10]
Objects* tiargs;
// Array of Types/Expressions corresponding
// to TemplateDeclaration.parameters
// [int, char, 100]
Objects tdtypes;
I'm using `tiargs` right now (I'm not really sure what `tdtypes` is).
A guess: "tiargs" is the types of the values passed to the template.
"tdtypes" is the types the template is instantiated with.
void foo(T)(T* a);
int b;
foo!(int)(&b*);
"tiargs" is "int*" and "tdtypes" is "int". But this can easily be
confirmed using some printf debugging.
AFAIU I can access TemplateDeclaration from TemplateInstance through
`tempdecl` even though it's stored as a Dsymbol.
I'll have a look at `parameters` from TemplateDeclaration [2] but I
still need to match it to the function arguments somehow. The following
example illustrates the process of pairing the int to the template
parameter.
extern(C++) B foo(A, B)(*B, ref const A);
foo!(int, int) => int foo(*int, ref const int);
^ ^ ^ ^ ^
1 2 2 1 2
1. https://github.com/dlang/dmd/blob/master/src/dtemplate.d#L5895
2. https://github.com/dlang/dmd/blob/master/src/dtemplate.d#L406
Are the types the same objects so you can compare by just comparing the
pointers?
--
/Jacob Carlborg