On Tuesday, 21 June 2016 at 19:42:54 UTC, Elie Morisse wrote:
On Monday, 20 June 2016 at 20:52:02 UTC, Guillaume Chatelet wrote:
[...]

The templated function is the child symbol of the TemplateDeclaration which shares the same name i.e

[...]

Thx Elie! It helps :)

I came up with this quick and dirty piece of code to get the parameters from the template declaration and the function declaration:

code:
auto declaration = cast(TemplateDeclaration)templateInstance.tempdecl;
assert(declaration);
printf("TemplateDeclaration %x\n", declaration);
foreach(parameter; *declaration.parameters) {
    printf("Parameter %s\n", parameter.ident.toChars());
}

if (declaration.onemember) {
FuncDeclaration fd = declaration.onemember.isFuncDeclaration();
    if (fd && fd.type) {
        TypeFunction tf = cast(TypeFunction)fd.type;
        assert(tf);
        printf("TypeFunction %x\n", tf);
if(tf.next) printf("Parameter return %s\n", tf.next.toChars());
        if(tf.parameters) foreach(parameter; *tf.parameters) {
            printf("Parameter %s\n", parameter.type.toChars());
        }
    }
}

input:
extern(C++) C foo(A, B, C)(B, A);

output:
TemplateDeclaration 764f76b0
Parameter A
Parameter B
Parameter C
TypeFunction 764f7370
Parameter return C
Parameter B
Parameter A

It works as expected. I still need to do the mapping and handle subtleties like this but I'm on the right track.
extern(C++) ref C foo(A, B, C)(B*, const(A)*);

Thx!

Reply via email to