plans for interfacing to C++
Michel Fortin
michel.fortin at michelf.com
Tue Jan 10 04:09:14 PST 2012
On 2012-01-10 09:28:54 +0000, deadalnix <deadalnix at gmail.com> said:
> Le 09/01/2012 19:19, Trass3r a écrit :
>> On Monday, 9 January 2012 at 18:04:58 UTC, Michel Fortin wrote:
>>>> Hmm another difficulty is how to switch between mangling schemes.
>>>
>>> One thing that could be done is instead of the namespace argument,
>>> have a mangled name argument. Then use CTFE to build the mangled name
>>> (if you want to).
>>>
>>> This would also solve the problem we have on OS X where some C
>>> functions use a mangled name with a '$' in them thanks to the use of
>>> some GCC attribute in the system headers.
>>>
>>> Or maybe it should be a pragma instead.
>>
>> Interesting idea. But how to do it properly?
>> A namespace or a class may have lots of functions and I really wouldn't
>> want to be forced to write pragma(mangledName, gccmangle("Bla", ...))
>> before every declaration.
>
> @mangled("encrypted klingon here") void foo();
>
> Where encrypted klingon can be generated using CTFE.
Another idea which would be much less verbose:
extern(C++, gccmangle)
void foo();
Here, gccmangle is a CTFE-capable function that'd be called like this:
gccmangle("foo");
So if you need a namespace argument, just add one:
extern(C++, gccmangle, "bar::baz")
void foo();
which would call the function like this to get the mangled name:
gccmangle("foo","bar::baz");
The syntax doesn't sound quite right to me, hopefully someone can make
it better.
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list