Simplify use sites by passing by value
This commit is contained in:
parent
5f1e49c4ce
commit
13b9324bc4
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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))
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user