Use fixed-width integers
Even though `Int` and `isize` should be the same in practice, we can't cleanly convert, as the type information isn't quite there. And anyway, strictly speaking per the report, `Int` is only guaranteed to hold 30 bits. Note that this is essentially unchanged even if we specify `usize_is_size_t = true` for `cbindgen`.
This commit is contained in:
parent
024b6aec87
commit
5907a064a7
@ -16,7 +16,6 @@ import Foreign.C
|
|||||||
import GarnetRs qualified as Raw
|
import GarnetRs qualified as Raw
|
||||||
import GarnetRs.Safe qualified as Raw
|
import GarnetRs.Safe qualified as Raw
|
||||||
import HsBindgen.Runtime.PtrConst
|
import HsBindgen.Runtime.PtrConst
|
||||||
import Unsafe.Coerce
|
|
||||||
|
|
||||||
data T = T
|
data T = T
|
||||||
{ a :: Bool
|
{ a :: Bool
|
||||||
@ -42,9 +41,5 @@ helloStruct = Raw.hello_struct . convertT
|
|||||||
helloShape :: Shape -> IO ()
|
helloShape :: Shape -> IO ()
|
||||||
helloShape = Raw.hello_shape . convertShape
|
helloShape = Raw.hello_shape . convertShape
|
||||||
|
|
||||||
add :: Int -> Int -> IO Int
|
add :: Int64 -> Int64 -> IO Int64
|
||||||
add a b = from <$> Raw.add (to a) (to b)
|
add = Raw.add
|
||||||
where
|
|
||||||
-- these types should be the same in practice - both are pointer-sized
|
|
||||||
to = unsafeCoerce @Int @CIntPtr
|
|
||||||
from = unsafeCoerce @CIntPtr @Int
|
|
||||||
|
|||||||
@ -44,9 +44,9 @@ $(HsBindgen.Runtime.Internal.CAPI.addCSource (HsBindgen.Runtime.Internal.CAPI.un
|
|||||||
, "}"
|
, "}"
|
||||||
, "/* com_garnet_GarnetRs_get_add */"
|
, "/* com_garnet_GarnetRs_get_add */"
|
||||||
, "__attribute__ ((const))"
|
, "__attribute__ ((const))"
|
||||||
, "intptr_t (*hs_bindgen_bbabdbe61cd1eeb2 (void)) ("
|
, "int64_t (*hs_bindgen_bbabdbe61cd1eeb2 (void)) ("
|
||||||
, " intptr_t arg1,"
|
, " int64_t arg1,"
|
||||||
, " intptr_t arg2"
|
, " int64_t arg2"
|
||||||
, ")"
|
, ")"
|
||||||
, "{"
|
, "{"
|
||||||
, " return &add;"
|
, " return &add;"
|
||||||
@ -118,17 +118,17 @@ foreign import ccall unsafe "hs_bindgen_bbabdbe61cd1eeb2" hs_bindgen_bbabdbe61cd
|
|||||||
IO (Ptr.FunPtr Void)
|
IO (Ptr.FunPtr Void)
|
||||||
|
|
||||||
-- __unique:__ @com_garnet_GarnetRs_get_add@
|
-- __unique:__ @com_garnet_GarnetRs_get_add@
|
||||||
hs_bindgen_bbabdbe61cd1eeb2 :: IO (Ptr.FunPtr (HsBindgen.Runtime.LibC.CIntPtr -> HsBindgen.Runtime.LibC.CIntPtr -> IO HsBindgen.Runtime.LibC.CIntPtr))
|
hs_bindgen_bbabdbe61cd1eeb2 :: IO (Ptr.FunPtr (HsBindgen.Runtime.LibC.Int64 -> HsBindgen.Runtime.LibC.Int64 -> IO HsBindgen.Runtime.LibC.Int64))
|
||||||
hs_bindgen_bbabdbe61cd1eeb2 =
|
hs_bindgen_bbabdbe61cd1eeb2 =
|
||||||
HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_bbabdbe61cd1eeb2_base
|
HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_bbabdbe61cd1eeb2_base
|
||||||
|
|
||||||
{-# NOINLINE add #-}
|
{-# NOINLINE add #-}
|
||||||
{-| __C declaration:__ @add@
|
{-| __C declaration:__ @add@
|
||||||
|
|
||||||
__defined at:__ @garnet_rs.h 38:10@
|
__defined at:__ @garnet_rs.h 38:9@
|
||||||
|
|
||||||
__exported by:__ @garnet_rs.h@
|
__exported by:__ @garnet_rs.h@
|
||||||
-}
|
-}
|
||||||
add :: Ptr.FunPtr (HsBindgen.Runtime.LibC.CIntPtr -> HsBindgen.Runtime.LibC.CIntPtr -> IO HsBindgen.Runtime.LibC.CIntPtr)
|
add :: Ptr.FunPtr (HsBindgen.Runtime.LibC.Int64 -> HsBindgen.Runtime.LibC.Int64 -> IO HsBindgen.Runtime.LibC.Int64)
|
||||||
add =
|
add =
|
||||||
GHC.IO.Unsafe.unsafePerformIO hs_bindgen_bbabdbe61cd1eeb2
|
GHC.IO.Unsafe.unsafePerformIO hs_bindgen_bbabdbe61cd1eeb2
|
||||||
|
|||||||
@ -37,9 +37,9 @@ $(HsBindgen.Runtime.Internal.CAPI.addCSource (HsBindgen.Runtime.Internal.CAPI.un
|
|||||||
, "{"
|
, "{"
|
||||||
, " hello_shape(*arg1);"
|
, " hello_shape(*arg1);"
|
||||||
, "}"
|
, "}"
|
||||||
, "intptr_t hs_bindgen_1c0c71fa74c428a9 ("
|
, "int64_t hs_bindgen_1c0c71fa74c428a9 ("
|
||||||
, " intptr_t arg1,"
|
, " int64_t arg1,"
|
||||||
, " intptr_t arg2"
|
, " int64_t arg2"
|
||||||
, ")"
|
, ")"
|
||||||
, "{"
|
, "{"
|
||||||
, " return add(arg1, arg2);"
|
, " return add(arg1, arg2);"
|
||||||
@ -130,22 +130,22 @@ foreign import ccall safe "hs_bindgen_1c0c71fa74c428a9" hs_bindgen_1c0c71fa74c42
|
|||||||
|
|
||||||
-- __unique:__ @com_garnet_GarnetRs_Safe_add@
|
-- __unique:__ @com_garnet_GarnetRs_Safe_add@
|
||||||
hs_bindgen_1c0c71fa74c428a9 ::
|
hs_bindgen_1c0c71fa74c428a9 ::
|
||||||
HsBindgen.Runtime.LibC.CIntPtr
|
HsBindgen.Runtime.LibC.Int64
|
||||||
-> HsBindgen.Runtime.LibC.CIntPtr
|
-> HsBindgen.Runtime.LibC.Int64
|
||||||
-> IO HsBindgen.Runtime.LibC.CIntPtr
|
-> IO HsBindgen.Runtime.LibC.Int64
|
||||||
hs_bindgen_1c0c71fa74c428a9 =
|
hs_bindgen_1c0c71fa74c428a9 =
|
||||||
HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_1c0c71fa74c428a9_base
|
HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_1c0c71fa74c428a9_base
|
||||||
|
|
||||||
{-| __C declaration:__ @add@
|
{-| __C declaration:__ @add@
|
||||||
|
|
||||||
__defined at:__ @garnet_rs.h 38:10@
|
__defined at:__ @garnet_rs.h 38:9@
|
||||||
|
|
||||||
__exported by:__ @garnet_rs.h@
|
__exported by:__ @garnet_rs.h@
|
||||||
-}
|
-}
|
||||||
add ::
|
add ::
|
||||||
HsBindgen.Runtime.LibC.CIntPtr
|
HsBindgen.Runtime.LibC.Int64
|
||||||
-- ^ __C declaration:__ @a@
|
-- ^ __C declaration:__ @a@
|
||||||
-> HsBindgen.Runtime.LibC.CIntPtr
|
-> HsBindgen.Runtime.LibC.Int64
|
||||||
-- ^ __C declaration:__ @b@
|
-- ^ __C declaration:__ @b@
|
||||||
-> IO HsBindgen.Runtime.LibC.CIntPtr
|
-> IO HsBindgen.Runtime.LibC.Int64
|
||||||
add = hs_bindgen_1c0c71fa74c428a9
|
add = hs_bindgen_1c0c71fa74c428a9
|
||||||
|
|||||||
@ -37,9 +37,9 @@ $(HsBindgen.Runtime.Internal.CAPI.addCSource (HsBindgen.Runtime.Internal.CAPI.un
|
|||||||
, "{"
|
, "{"
|
||||||
, " hello_shape(*arg1);"
|
, " hello_shape(*arg1);"
|
||||||
, "}"
|
, "}"
|
||||||
, "intptr_t hs_bindgen_20eb651f0a8faf48 ("
|
, "int64_t hs_bindgen_20eb651f0a8faf48 ("
|
||||||
, " intptr_t arg1,"
|
, " int64_t arg1,"
|
||||||
, " intptr_t arg2"
|
, " int64_t arg2"
|
||||||
, ")"
|
, ")"
|
||||||
, "{"
|
, "{"
|
||||||
, " return add(arg1, arg2);"
|
, " return add(arg1, arg2);"
|
||||||
@ -130,22 +130,22 @@ foreign import ccall unsafe "hs_bindgen_20eb651f0a8faf48" hs_bindgen_20eb651f0a8
|
|||||||
|
|
||||||
-- __unique:__ @com_garnet_GarnetRs_Unsafe_add@
|
-- __unique:__ @com_garnet_GarnetRs_Unsafe_add@
|
||||||
hs_bindgen_20eb651f0a8faf48 ::
|
hs_bindgen_20eb651f0a8faf48 ::
|
||||||
HsBindgen.Runtime.LibC.CIntPtr
|
HsBindgen.Runtime.LibC.Int64
|
||||||
-> HsBindgen.Runtime.LibC.CIntPtr
|
-> HsBindgen.Runtime.LibC.Int64
|
||||||
-> IO HsBindgen.Runtime.LibC.CIntPtr
|
-> IO HsBindgen.Runtime.LibC.Int64
|
||||||
hs_bindgen_20eb651f0a8faf48 =
|
hs_bindgen_20eb651f0a8faf48 =
|
||||||
HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_20eb651f0a8faf48_base
|
HsBindgen.Runtime.Internal.HasFFIType.fromFFIType hs_bindgen_20eb651f0a8faf48_base
|
||||||
|
|
||||||
{-| __C declaration:__ @add@
|
{-| __C declaration:__ @add@
|
||||||
|
|
||||||
__defined at:__ @garnet_rs.h 38:10@
|
__defined at:__ @garnet_rs.h 38:9@
|
||||||
|
|
||||||
__exported by:__ @garnet_rs.h@
|
__exported by:__ @garnet_rs.h@
|
||||||
-}
|
-}
|
||||||
add ::
|
add ::
|
||||||
HsBindgen.Runtime.LibC.CIntPtr
|
HsBindgen.Runtime.LibC.Int64
|
||||||
-- ^ __C declaration:__ @a@
|
-- ^ __C declaration:__ @a@
|
||||||
-> HsBindgen.Runtime.LibC.CIntPtr
|
-> HsBindgen.Runtime.LibC.Int64
|
||||||
-- ^ __C declaration:__ @b@
|
-- ^ __C declaration:__ @b@
|
||||||
-> IO HsBindgen.Runtime.LibC.CIntPtr
|
-> IO HsBindgen.Runtime.LibC.Int64
|
||||||
add = hs_bindgen_20eb651f0a8faf48
|
add = hs_bindgen_20eb651f0a8faf48
|
||||||
|
|||||||
@ -35,4 +35,4 @@ void hello_struct(struct T t);
|
|||||||
|
|
||||||
void hello_shape(struct Shape s);
|
void hello_shape(struct Shape s);
|
||||||
|
|
||||||
intptr_t add(intptr_t a, intptr_t b);
|
int64_t add(int64_t a, int64_t b);
|
||||||
|
|||||||
@ -35,6 +35,6 @@ extern "C" fn hello_shape(s: Shape) -> () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
extern "C" fn add(a: isize, b: isize) -> isize {
|
extern "C" fn add(a: i64, b: i64) -> i64 {
|
||||||
a + b
|
a + b
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user