Context:

I'm working on a more correct implementation of the C++ name mangling for Linux/OSX. This is needed for the integration with C++/STL.

------------------------------------------------------------

Problem 1:
----------
In the following D code 'Expression' is a D class, 'foo' is a C++ function, its argument must be mangled as a pointer to Expression because D has reference semantic (whereas C++ has value semantic).

class Expression;
extern(C++) void foo(Expression);

Question:
---------
- How to I get the linkage for Expression from a FunDeclaration? This will ensure the added indirection is put only for the D classes, not the C++ ones. I tried looking at Parameter, ClassDeclaration or TypeClass but couldn't find it.

------------------------------------------------------------

Problem 2:
----------
Template arguments that are of basic types are mangled in a special way which requires to understand which 'int' is which.

extern(C++) A foo(A, B)(B, A, B);
static assert(foo!(int,int).mangleof == "_Z3fooIiiET_T0_S0_S1_");

In the example above the first 'int' is not the same as the second one, it's a distinct substitution.

Question:
---------
- How can I know which is which since from the AST perspective, the FunDeclaration's Parameters are just TypeBasic 'int'?

------------------------------------------------------------

Thx in advance!

Reply via email to