Mercurial > projects > dwt-mac
diff dwt/internal/objc/runtime.d @ 155:e91dcbf77cc7
Fixes runtime problems with dmd and ldc. Changed a couple of floats to CGFloat
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Mon, 06 Jul 2009 21:17:03 +0200 |
parents | ad4e1fe71a5a |
children | 969e7de37c3d |
line wrap: on
line diff
--- a/dwt/internal/objc/runtime.d Sat Jun 13 00:25:05 2009 +0200 +++ b/dwt/internal/objc/runtime.d Mon Jul 06 21:17:03 2009 +0200 @@ -34,6 +34,9 @@ else version (X86_64) const int STRUCT_SIZE_LIMIT = 16; +else version (PPC64) + const int STRUCT_SIZE_LIMIT = 16; + struct objc_object { Class isa; @@ -189,38 +192,50 @@ id objc_msgSend (ARGS...) (id theReceiver, SEL theSelector, ARGS args) { - return (cast(id (*)(id, SEL, ARGS...))&dwt.internal.objc.bindings.objc_msgSend)(theReceiver, theSelector, args); + alias extern (C) id function (id, SEL, ARGS) fp; + return (cast(fp)&dwt.internal.objc.bindings.objc_msgSend)(theReceiver, theSelector, args); } void objc_msgSend_struct (T, ARGS...) (T* result, id theReceiver, SEL theSelector, ARGS args) { - result = cast(T*) dwt.internal.objc.bindings.objc_msgSend(theReceiver, theSelector, args); + alias extern (C) T* function (id, SEL, ARGS) fp; + result = (cast(fp)&dwt.internal.objc.bindings.objc_msgSend)(theReceiver, theSelector, args); + //result = cast(T*) dwt.internal.objc.bindings.objc_msgSend(theReceiver, theSelector, args); } void objc_msgSend_stret (T, ARGS...) (T* stretAddr, id theReceiver, SEL theSelector, ARGS args) { if (T.sizeof > STRUCT_SIZE_LIMIT) - (cast(void (*)(T *, id, SEL, ARGS...))&dwt.internal.objc.bindings.objc_msgSend_stret)(stretAddr, theReceiver, theSelector, args); + { + alias extern (C) void function (T *, id, SEL, ARGS) fp; + (cast(fp)&dwt.internal.objc.bindings.objc_msgSend_stret)(stretAddr, theReceiver, theSelector, args); + } else - *stretAddr = (*cast(T (*)(id, SEL, ARGS...))&dwt.internal.objc.bindings.objc_msgSend)(theReceiver, theSelector, args); + { + alias extern (C) T function (id, SEL, ARGS) fp; + *stretAddr = (*cast(fp)&dwt.internal.objc.bindings.objc_msgSend)(theReceiver, theSelector, args); + } } id objc_msgSendSuper (ARGS...) (objc_super* superr, SEL op, ARGS args) { - return (cast(id (*)(objc_super*, SEL, ARGS...))&dwt.internal.objc.bindings.objc_msgSendSuper)(superr, op, args); + alias extern (C) id function (objc_super*, SEL, ARGS) fp; + return (cast(fp)&dwt.internal.objc.bindings.objc_msgSendSuper)(superr, op, args); } bool objc_msgSend_bool (ARGS...) (id theReceiver, SEL theSelector, ARGS args) { - return (cast(bool (*)(id, SEL, ARGS...))&dwt.internal.objc.bindings.objc_msgSend)(theReceiver, theSelector, args); + alias extern (C) bool function (id, SEL, ARGS) fp; + return (cast(fp)&dwt.internal.objc.bindings.objc_msgSend)(theReceiver, theSelector, args); } version (X86) { double objc_msgSend_fpret(ARGS...) (id self, SEL op, ARGS args) { - return (cast(double (*)(id, SEL, ARGS...))&dwt.internal.objc.bindings.objc_msgSend_fpret)(self, op, args); + alias extern (C) double function (id, SEL, ARGS) fp; + return (cast(fp)&dwt.internal.objc.bindings.objc_msgSend_fpret)(self, op, args); } } @@ -228,6 +243,7 @@ { double objc_msgSend_fpret(ARGS...) (id self, SEL op, ARGS args) { - return (cast(double (*)(id, SEL, ARGS...))&dwt.internal.objc.bindings.objc_msgSend)(self, op, args); + alias extern (C) double function (id, SEL, ARGS) fp; + return (cast(fp)&dwt.internal.objc.bindings.objc_msgSend)(self, op, args); } } \ No newline at end of file