diff --git a/haskell/exe/Main.hs b/haskell/exe/Main.hs index e4250fe..0b25177 100644 --- a/haskell/exe/Main.hs +++ b/haskell/exe/Main.hs @@ -1,22 +1,14 @@ module Main (main) where import Data.ByteString -import Foreign import Foreign.C import GarnetRs import GarnetRs.Safe -import HsBindgen.Runtime.Marshal import HsBindgen.Runtime.PtrConst main :: IO () main = do useAsCString "Haskell" $ hello . unsafeFromPtr - alloca \ptr -> do - writeRaw ptr T{a = CBool 1, b = 42} - hello_struct (unsafeFromPtr ptr) - alloca \ptr -> do - writeRaw ptr (Shape (Shape_Tag 0) (set_shape_body_circle (Circle_Body 3.14))) - hello_shape (unsafeFromPtr ptr) - alloca \ptr -> do - writeRaw ptr (Shape (Shape_Tag 1) (set_shape_body_rectangle (Rectangle_Body 10.0 5.0))) - hello_shape (unsafeFromPtr ptr) + hello_struct T{a = CBool 1, b = 42} + hello_shape $ Shape (Shape_Tag 0) $ set_shape_body_circle $ Circle_Body 3.14 + hello_shape $ Shape (Shape_Tag 1) $ set_shape_body_rectangle $ Rectangle_Body 10.0 5.0 diff --git a/haskell/generated/GarnetRs/FunPtr.hs b/haskell/generated/GarnetRs/FunPtr.hs index 432fe38..13f202f 100644 --- a/haskell/generated/GarnetRs/FunPtr.hs +++ b/haskell/generated/GarnetRs/FunPtr.hs @@ -28,7 +28,7 @@ $(HsBindgen.Runtime.Internal.CAPI.addCSource (HsBindgen.Runtime.Internal.CAPI.un , "/* com_garnet_GarnetRs_get_hello_struct */" , "__attribute__ ((const))" , "void (*hs_bindgen_0f8c37ef19b17a6d (void)) (" - , " struct T const *arg1" + , " struct T arg1" , ")" , "{" , " return &hello_struct;" @@ -36,7 +36,7 @@ $(HsBindgen.Runtime.Internal.CAPI.addCSource (HsBindgen.Runtime.Internal.CAPI.un , "/* com_garnet_GarnetRs_get_hello_shape */" , "__attribute__ ((const))" , "void (*hs_bindgen_287ff3ac660f333b (void)) (" - , " struct Shape const *arg1" + , " struct Shape arg1" , ")" , "{" , " return &hello_shape;" @@ -68,7 +68,7 @@ foreign import ccall unsafe "hs_bindgen_0f8c37ef19b17a6d" hs_bindgen_0f8c37ef19b IO (Ptr.FunPtr Void) -- __unique:__ @com_garnet_GarnetRs_get_hello_struct@ -hs_bindgen_0f8c37ef19b17a6d :: IO (Ptr.FunPtr ((HsBindgen.Runtime.PtrConst.PtrConst T) -> IO ())) +hs_bindgen_0f8c37ef19b17a6d :: IO (Ptr.FunPtr (T -> IO ())) hs_bindgen_0f8c37ef19b17a6d = HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_0f8c37ef19b17a6d_base @@ -79,7 +79,7 @@ hs_bindgen_0f8c37ef19b17a6d = __exported by:__ @garnet_rs.h@ -} -hello_struct :: Ptr.FunPtr ((HsBindgen.Runtime.PtrConst.PtrConst T) -> IO ()) +hello_struct :: Ptr.FunPtr (T -> IO ()) hello_struct = GHC.IO.Unsafe.unsafePerformIO hs_bindgen_0f8c37ef19b17a6d @@ -88,7 +88,7 @@ foreign import ccall unsafe "hs_bindgen_287ff3ac660f333b" hs_bindgen_287ff3ac660 IO (Ptr.FunPtr Void) -- __unique:__ @com_garnet_GarnetRs_get_hello_shape@ -hs_bindgen_287ff3ac660f333b :: IO (Ptr.FunPtr ((HsBindgen.Runtime.PtrConst.PtrConst Shape) -> IO ())) +hs_bindgen_287ff3ac660f333b :: IO (Ptr.FunPtr (Shape -> IO ())) hs_bindgen_287ff3ac660f333b = HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_287ff3ac660f333b_base @@ -99,6 +99,6 @@ hs_bindgen_287ff3ac660f333b = __exported by:__ @garnet_rs.h@ -} -hello_shape :: Ptr.FunPtr ((HsBindgen.Runtime.PtrConst.PtrConst Shape) -> IO ()) +hello_shape :: Ptr.FunPtr (Shape -> IO ()) hello_shape = GHC.IO.Unsafe.unsafePerformIO hs_bindgen_287ff3ac660f333b diff --git a/haskell/generated/GarnetRs/Safe.hs b/haskell/generated/GarnetRs/Safe.hs index de1581a..202fdf0 100644 --- a/haskell/generated/GarnetRs/Safe.hs +++ b/haskell/generated/GarnetRs/Safe.hs @@ -5,6 +5,7 @@ module GarnetRs.Safe where +import qualified Foreign as F import qualified Foreign.C as FC import qualified GHC.Ptr as Ptr import qualified HsBindgen.Runtime.Internal.CAPI @@ -23,16 +24,16 @@ $(HsBindgen.Runtime.Internal.CAPI.addCSource (HsBindgen.Runtime.Internal.CAPI.un , " hello(arg1);" , "}" , "void hs_bindgen_51157946af5519c9 (" - , " struct T const *arg1" + , " struct T *arg1" , ")" , "{" - , " hello_struct(arg1);" + , " hello_struct(*arg1);" , "}" , "void hs_bindgen_7de06f1fd827ca60 (" - , " struct Shape const *arg1" + , " struct Shape *arg1" , ")" , "{" - , " hello_shape(arg1);" + , " hello_shape(*arg1);" , "}" ])) @@ -67,7 +68,7 @@ foreign import ccall safe "hs_bindgen_51157946af5519c9" hs_bindgen_51157946af551 -- __unique:__ @com_garnet_GarnetRs_Safe_hello_struct@ hs_bindgen_51157946af5519c9 :: - HsBindgen.Runtime.PtrConst.PtrConst T + Ptr.Ptr T -> IO () hs_bindgen_51157946af5519c9 = HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_51157946af5519c9_base @@ -79,10 +80,12 @@ hs_bindgen_51157946af5519c9 = __exported by:__ @garnet_rs.h@ -} hello_struct :: - HsBindgen.Runtime.PtrConst.PtrConst T + T -- ^ __C declaration:__ @t@ -> IO () -hello_struct = hs_bindgen_51157946af5519c9 +hello_struct = + \t0 -> + F.with t0 (\t1 -> hs_bindgen_51157946af5519c9 t1) -- __unique:__ @com_garnet_GarnetRs_Safe_hello_shape@ foreign import ccall safe "hs_bindgen_7de06f1fd827ca60" hs_bindgen_7de06f1fd827ca60_base :: @@ -91,7 +94,7 @@ foreign import ccall safe "hs_bindgen_7de06f1fd827ca60" hs_bindgen_7de06f1fd827c -- __unique:__ @com_garnet_GarnetRs_Safe_hello_shape@ hs_bindgen_7de06f1fd827ca60 :: - HsBindgen.Runtime.PtrConst.PtrConst Shape + Ptr.Ptr Shape -> IO () hs_bindgen_7de06f1fd827ca60 = HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_7de06f1fd827ca60_base @@ -103,7 +106,9 @@ hs_bindgen_7de06f1fd827ca60 = __exported by:__ @garnet_rs.h@ -} hello_shape :: - HsBindgen.Runtime.PtrConst.PtrConst Shape + Shape -- ^ __C declaration:__ @s@ -> IO () -hello_shape = hs_bindgen_7de06f1fd827ca60 +hello_shape = + \s0 -> + F.with s0 (\s1 -> hs_bindgen_7de06f1fd827ca60 s1) diff --git a/haskell/generated/GarnetRs/Unsafe.hs b/haskell/generated/GarnetRs/Unsafe.hs index 2aec563..bc0034d 100644 --- a/haskell/generated/GarnetRs/Unsafe.hs +++ b/haskell/generated/GarnetRs/Unsafe.hs @@ -5,6 +5,7 @@ module GarnetRs.Unsafe where +import qualified Foreign as F import qualified Foreign.C as FC import qualified GHC.Ptr as Ptr import qualified HsBindgen.Runtime.Internal.CAPI @@ -23,16 +24,16 @@ $(HsBindgen.Runtime.Internal.CAPI.addCSource (HsBindgen.Runtime.Internal.CAPI.un , " hello(arg1);" , "}" , "void hs_bindgen_29d823ada2bc7302 (" - , " struct T const *arg1" + , " struct T *arg1" , ")" , "{" - , " hello_struct(arg1);" + , " hello_struct(*arg1);" , "}" , "void hs_bindgen_b3f40a03f07eaa85 (" - , " struct Shape const *arg1" + , " struct Shape *arg1" , ")" , "{" - , " hello_shape(arg1);" + , " hello_shape(*arg1);" , "}" ])) @@ -67,7 +68,7 @@ foreign import ccall unsafe "hs_bindgen_29d823ada2bc7302" hs_bindgen_29d823ada2b -- __unique:__ @com_garnet_GarnetRs_Unsafe_hello_struct@ hs_bindgen_29d823ada2bc7302 :: - HsBindgen.Runtime.PtrConst.PtrConst T + Ptr.Ptr T -> IO () hs_bindgen_29d823ada2bc7302 = HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_29d823ada2bc7302_base @@ -79,10 +80,12 @@ hs_bindgen_29d823ada2bc7302 = __exported by:__ @garnet_rs.h@ -} hello_struct :: - HsBindgen.Runtime.PtrConst.PtrConst T + T -- ^ __C declaration:__ @t@ -> IO () -hello_struct = hs_bindgen_29d823ada2bc7302 +hello_struct = + \t0 -> + F.with t0 (\t1 -> hs_bindgen_29d823ada2bc7302 t1) -- __unique:__ @com_garnet_GarnetRs_Unsafe_hello_shape@ foreign import ccall unsafe "hs_bindgen_b3f40a03f07eaa85" hs_bindgen_b3f40a03f07eaa85_base :: @@ -91,7 +94,7 @@ foreign import ccall unsafe "hs_bindgen_b3f40a03f07eaa85" hs_bindgen_b3f40a03f07 -- __unique:__ @com_garnet_GarnetRs_Unsafe_hello_shape@ hs_bindgen_b3f40a03f07eaa85 :: - HsBindgen.Runtime.PtrConst.PtrConst Shape + Ptr.Ptr Shape -> IO () hs_bindgen_b3f40a03f07eaa85 = HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_b3f40a03f07eaa85_base @@ -103,7 +106,9 @@ hs_bindgen_b3f40a03f07eaa85 = __exported by:__ @garnet_rs.h@ -} hello_shape :: - HsBindgen.Runtime.PtrConst.PtrConst Shape + Shape -- ^ __C declaration:__ @s@ -> IO () -hello_shape = hs_bindgen_b3f40a03f07eaa85 +hello_shape = + \s0 -> + F.with s0 (\s1 -> hs_bindgen_b3f40a03f07eaa85 s1) diff --git a/rust/garnet_rs.h b/rust/garnet_rs.h index 80da9bd..92cfeeb 100644 --- a/rust/garnet_rs.h +++ b/rust/garnet_rs.h @@ -31,6 +31,6 @@ typedef struct Shape { void hello(const char *c); -void hello_struct(const struct T *t); +void hello_struct(struct T t); -void hello_shape(const struct Shape *s); +void hello_shape(struct Shape s); diff --git a/rust/lib.rs b/rust/lib.rs index e84bdbc..533a443 100644 --- a/rust/lib.rs +++ b/rust/lib.rs @@ -16,7 +16,7 @@ struct T { b: u8, } #[unsafe(no_mangle)] -extern "C" fn hello_struct(t: &T) -> () { +extern "C" fn hello_struct(t: T) -> () { say_hello(&format!("{:?}", t)) } @@ -29,6 +29,6 @@ enum Shape { } #[unsafe(no_mangle)] -extern "C" fn hello_shape(s: &Shape) -> () { +extern "C" fn hello_shape(s: Shape) -> () { say_hello(&format!("{:?}", s)) }