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