summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsimonm <unknown>1997-11-18 10:41:40 +0000
committersimonm <unknown>1997-11-18 10:41:40 +0000
commit1d111ef169341e0689c29046de29be6ed75f7fc5 (patch)
tree7057b5c9e9a42dfe06bcb2c343e231ee983312a7
parent13bd5f8673faf47ecde030185e6361e1103905ad (diff)
downloadhaskell-1d111ef169341e0689c29046de29be6ed75f7fc5.tar.gz
[project @ 1997-11-18 10:41:40 by simonm]
implement plusAddr, and add a load of ToDos for the various offset functions.
-rw-r--r--ghc/lib/glaExts/Addr.lhs54
1 files changed, 52 insertions, 2 deletions
diff --git a/ghc/lib/glaExts/Addr.lhs b/ghc/lib/glaExts/Addr.lhs
index a63409415f..91056eea7e 100644
--- a/ghc/lib/glaExts/Addr.lhs
+++ b/ghc/lib/glaExts/Addr.lhs
@@ -8,7 +8,9 @@
{-# OPTIONS -fno-implicit-prelude #-}
module Addr (
- Addr(..), -- ToDo: nullAddr,
+ Addr(..),
+ nullAddr, -- :: Addr
+ plusAddr, -- :: Addr -> Int -> Addr
) where
import GHC
@@ -18,14 +20,62 @@ import CCall
\end{code}
\begin{code}
-data Addr = A# Addr# deriving (Eq, Ord) -- Glasgow extension
+data Addr = A# Addr# deriving (Eq, Ord)
nullAddr = ``NULL'' :: Addr
+plusAddr :: Addr -> Int -> Addr
+plusAddr (A# addr) (I# off) = A# (int2Addr# (addr2Int# addr +# off))
+
instance CCallable Addr
instance CCallable Addr#
instance CReturnable Addr
\end{code}
+ToDo:
+
+-- read value out of _immutable_ memory
+ indexCharOffAddr :: Addr -> Int -> Char
+ indexIntOffAddr :: Addr -> Int -> Int -- should we drop this?
+ indexAddrOffAddr :: Addr -> Int -> Addr
+ indexFloatOffAddr :: Addr -> Int -> Float
+ indexDoubleOffAddr :: Addr -> Int -> Double
+ indexWord8OffAddr :: Addr -> Int -> Word8
+ indexWord16OffAddr :: Addr -> Int -> Word16
+ indexWord32OffAddr :: Addr -> Int -> Word32
+ indexWord64OffAddr :: Addr -> Int -> Word64
+ indexInt8OffAddr :: Addr -> Int -> Int8
+ indexInt16OffAddr :: Addr -> Int -> Int16
+ indexInt32OffAddr :: Addr -> Int -> Int32
+ indexInt64OffAddr :: Addr -> Int -> Int64
+
+ -- read value out of mutable memory
+ readCharOffAddr :: Addr -> Int -> IO Char
+ readIntOffAddr :: Addr -> Int -> IO Int -- should we drop this?
+ readAddrOffAddr :: Addr -> Int -> IO Addr
+ readFloatOffAddr :: Addr -> Int -> IO Float
+ readDoubleOffAddr :: Addr -> Int -> IO Double
+ readWord8OffAddr :: Addr -> Int -> IO Word8
+ readWord16OffAddr :: Addr -> Int -> IO Word16
+ readWord32OffAddr :: Addr -> Int -> IO Word32
+ readWord64OffAddr :: Addr -> Int -> IO Word64
+ readInt8OffAddr :: Addr -> Int -> IO Int8
+ readInt16OffAddr :: Addr -> Int -> IO Int16
+ readInt32OffAddr :: Addr -> Int -> IO Int32
+ readInt64OffAddr :: Addr -> Int -> IO Int64
+ -- write value into mutable memory
+ writeCharOffAddr :: Addr -> Int -> Char -> IO ()
+ writeIntOffAddr :: Addr -> Int -> Int -> IO () -- should we drop this?
+ writeAddrOffAddr :: Addr -> Int -> Addr -> IO ()
+ writeFloatOffAddr :: Addr -> Int -> Float -> IO ()
+ writeDoubleOffAddr :: Addr -> Int -> Double -> IO ()
+ writeWord8OffAddr :: Addr -> Int -> Word8 -> IO ()
+ writeWord16OffAddr :: Addr -> Int -> Word16 -> IO ()
+ writeWord32OffAddr :: Addr -> Int -> Word32 -> IO ()
+ writeWord64OffAddr :: Addr -> Int -> Word64 -> IO ()
+ writeInt8OffAddr :: Addr -> Int -> Int8 -> IO ()
+ writeInt16OffAddr :: Addr -> Int -> Int16 -> IO ()
+ writeInt32OffAddr :: Addr -> Int -> Int32 -> IO ()
+ writeInt64OffAddr :: Addr -> Int -> Int64 -> IO ()