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