{-# LINE 1 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
{-# Language CPP #-}
module Cryptol.Eval.FFI.Abstract.Call where
{-# LINE 6 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
import Foreign
import Foreign.C.Types(CSize(..))
import Cryptol.Eval.Type(TValue)
import Cryptol.Eval.FFI.ForeignSrc
import Cryptol.Eval.FFI.Abstract.Import
import Cryptol.Eval.FFI.Abstract.Export
foreign export ccall cry_bool :: Import Word8
foreign import ccall "&cry_bool" cry_bool_addr :: FunPtr (Import Word8)
foreign export ccall cry_small_uint :: Import Word64
foreign import ccall "&cry_small_uint" cry_small_uint_addr :: FunPtr (Import Word64)
foreign export ccall cry_small_sint :: Import Int64
foreign import ccall "&cry_small_sint" cry_small_sint_addr :: FunPtr (Import Int64)
foreign export ccall cry_double :: Import Double
foreign import ccall "&cry_double" cry_double_addr :: FunPtr (Import Double)
foreign export ccall cry_large_int :: LargeIntFun
foreign import ccall "&cry_large_int" cry_large_int_addr :: FunPtr LargeIntFun
foreign export ccall cry_sign :: Import Word8
foreign import ccall "&cry_sign" cry_sign_addr :: FunPtr (Import Word8)
foreign export ccall cry_tag :: Import CSize
foreign import ccall "&cry_tag" cry_tag_addr :: FunPtr (Import CSize)
foreign export ccall cry_recv_u8 :: Export Word8
foreign import ccall "&cry_recv_u8" cry_recv_u8_addr :: FunPtr (Export Word8)
foreign export ccall cry_recv_u64 :: Export Word64
foreign import ccall "&cry_recv_u64" cry_recv_u64_addr :: FunPtr (Export Word64)
foreign export ccall cry_recv_u64_digits :: Export Word64
foreign import ccall "&cry_recv_u64_digits" cry_recv_u64_digits_addr :: FunPtr (Export Word64)
foreign export ccall cry_recv_double :: Export Double
foreign import ccall "&cry_recv_double" cry_recv_double_addr :: FunPtr (Export Double)
runFFI ::
[ExportVal] ->
TValue ->
ForeignImpl ->
IO (Either ImportErrorMessage Value)
runFFI :: [ExportVal]
-> TValue -> ForeignImpl -> IO (Either ImportErrorMessage Value)
runFFI [ExportVal]
args TValue
ty ForeignImpl
k =
Int
-> (Ptr Any -> IO (Either ImportErrorMessage Value))
-> IO (Either ImportErrorMessage Value)
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes (Int
64) ((Ptr Any -> IO (Either ImportErrorMessage Value))
-> IO (Either ImportErrorMessage Value))
-> (Ptr Any -> IO (Either ImportErrorMessage Value))
-> IO (Either ImportErrorMessage Value)
forall a b. (a -> b) -> a -> b
$ \Ptr Any
robj ->
{-# LINE 59 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
allocaBytes (40) $ \aobj ->
{-# LINE 60 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
do expS <- cryStartExport args
(\hsc_ptr -> pokeByteOff hsc_ptr 0) aobj expS
{-# LINE 63 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) aobj cry_recv_u8_addr
{-# LINE 64 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 24) aobj cry_recv_u64_addr
{-# LINE 65 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) aobj cry_recv_double_addr
{-# LINE 66 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 32) aobj cry_recv_u64_digits_addr
{-# LINE 67 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
impS <- cryStartImport ty
(\hsc_ptr -> pokeByteOff hsc_ptr 0) robj impS
{-# LINE 69 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) robj cry_bool_addr
{-# LINE 70 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) robj cry_small_uint_addr
{-# LINE 71 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 24) robj cry_small_sint_addr
{-# LINE 72 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 32) robj cry_double_addr
{-# LINE 73 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 40) robj cry_tag_addr
{-# LINE 74 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 48) robj cry_large_int_addr
{-# LINE 75 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 56) robj cry_sign_addr
{-# LINE 76 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}
callForeignImpl k [SomeFFIArg aobj, SomeFFIArg robj] :: IO ()
cryEndExport expS
cryFinishImport impS
{-# LINE 97 "src/Cryptol/Eval/FFI/Abstract/Call.hsc" #-}