summaryrefslogtreecommitdiff
path: root/testsuite/tests/ffi/should_compile/cc005.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/ffi/should_compile/cc005.hs')
-rw-r--r--testsuite/tests/ffi/should_compile/cc005.hs108
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
+
+
+-}