diff options
Diffstat (limited to 'testsuite/tests/ffi/should_compile/cc005.hs')
-rw-r--r-- | testsuite/tests/ffi/should_compile/cc005.hs | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/testsuite/tests/ffi/should_compile/cc005.hs b/testsuite/tests/ffi/should_compile/cc005.hs new file mode 100644 index 0000000000..e057cfd233 --- /dev/null +++ b/testsuite/tests/ffi/should_compile/cc005.hs @@ -0,0 +1,108 @@ +-- !!! cc005 -- foreign export declarations +module ShouldCompile (d8) where + +import Foreign.Ptr --import Foreign + --import GlaExts + --import Int + --import Word +type Addr = Ptr () +foreign import ccall "wrapper" d8 :: (Int -> IO ()) -> IO Addr + +-- exporting functions +{- +m_stdcall :: Int -> IO Int +m_stdcall x = return x + +x = putChar + +foreign export ccall "m1" doo :: Int -> IO Int + +doo :: Eq a => a -> IO Int +doo _ = return 2 + +foreign export ccall "listAppend" plusplus :: StablePtr [a] -> StablePtr [a] -> IO (StablePtr [a]) + +plusplus :: StablePtr [a] -> StablePtr [a] -> IO (StablePtr [a]) +plusplus x y = do + l1 <- deRefStablePtr x + l2 <- deRefStablePtr y + makeStablePtr (l1 ++ l2) + +foreign export ccall "m11" m_stdcall :: Int -> IO Int + +m_ccall :: Int -> Int -> IO Int +m_ccall x y = return (x-y) + +foreign export ccall "m2" m_ccall :: Int -> Int -> IO Int + +foreign export ccall "putcha" putChar :: Char -> IO () + +foreign export stdcall "Math" "sin" my_sin :: Double -> IO Double +foreign export stdcall "Math" "cos" my_cos :: Double -> IO Double + +my_sin = undefined +my_cos = undefined + +foreign export stdcall "m111" m8 :: IO Int8 +foreign export stdcall "m22" m16 :: IO Int16 +foreign export stdcall "m3" m32 :: IO Int32 +foreign export stdcall "m4" m64 :: IO Int64 + +m8 = undefined +m16 = undefined +m32 = undefined +m64 = undefined + +foreign export stdcall dynamic d8 :: (Addr -> IO Int8) -> IO Addr +foreign export stdcall dynamic d16 :: (Addr -> IO Int16) -> IO Addr +foreign export stdcall dynamic d32 :: (Addr -> IO Int32) -> IO Addr +foreign export stdcall dynamic d64 :: (Addr -> IO Int64) -> IO Addr + + +d8 = undefined +d16 = undefined +d32 = undefined +d64 = undefined + + +foreign export ccall "kitchen" + sink :: --ForeignObj +-- -> ByteArray Int +-- -> MutableByteArray Int RealWorld + Int + -> Int8 + -> Int16 + -> Int32 + -> Int64 + -> Word8 + -> Word16 + -> Word32 + -> Word64 + -> Float + -> Double + -> IO Int + +sink = undefined +sink2 = undefined + +foreign export ccall dynamic + sink2 :: (--ForeignObj +-- -> ByteArray Int +-- -> MutableByteArray Int RealWorld + StablePtr a + -> Int + -> Int8 + -> Int16 + -> Int32 + -> Int64 + -> Word8 + -> Word16 + -> Word32 + -> Word64 + -> Float + -> Double + -> IO ()) + -> IO Addr + + +-} |