Linux 64bit branch

Jacob Carlborg doob at
Mon Jan 13 01:38:31 PST 2014

On 2014-01-13 05:29, Jesse Phillips wrote:

> I'm not sure that there is anything specific needed where /*64*/
> comments exist, the tool would have a lot of work to translate many
> types and not just a single cast.

Yes, it needs to translate signatures as well, as you mention below.

> But I did find where there is more work. The segfault pointed to:
>      org.eclipse.swt.widgets.Display.Display.windowProcFunc3()

It also good to verify that the snippet work for 32bit as well.

> Which is defined as:
>      private static extern(C) int /*long*/ windowProcFunc3 (int /*long*/
> handle, int /*long*/ arg0, int /*long*/ user_data) {
> which is assigned as:
>      GCallback windowProc3 = cast(GCallback)&windowProcFunc3;
> Where GCallback is defined as:
> internal.gtk.OS.d
>      public alias org.eclipse.swt.internal.c.glib_object.GCallback
> GCallback;
>      alias _BCD_func__2331 GCallback;
>      alias void function() _BCD_func__2331;
> I don't understand why it is cast to a function which takes no
> arguments, but suspect that fixing the signatures for /*long*/ is a good
> direction.

The original type GCallback[1] is defined to take no arguments and 
return "void". Although I see that it doesn't mean the callback must 
take no arguments and return "void".

I have not worked with the Linux port, but in the Mac OS X port they 
basically merge all callbacks with the same amounts of arguments to a 
single function. In this case "windowProcFunc3", would handle all 
callbacks taking three arguments.

Technically I don't think the signature matters, as long as the correct 
calling convention is used. Where "correct" is whatever is expected from 
the callback and/or the function invoking the callback.

I don't know which type here is best to use. In the Mac OS X port there 
is a single type that covers all types except for structs.

/Jacob Carlborg

More information about the Digitalmars-d-dwt mailing list