projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2000-05-22 13:09:29 by simonmar]
[ghc-hetmet.git]
/
ghc
/
lib
/
std
/
PrelAddr.lhs
diff --git
a/ghc/lib/std/PrelAddr.lhs
b/ghc/lib/std/PrelAddr.lhs
index
dab7f89
..
3c9fb0a
100644
(file)
--- a/
ghc/lib/std/PrelAddr.lhs
+++ b/
ghc/lib/std/PrelAddr.lhs
@@
-9,10
+9,17
@@
module PrelAddr (
Addr(..)
module PrelAddr (
Addr(..)
+ , AddrOff(..)
+ , nullAddr -- :: Addr
+ , alignAddr -- :: Addr -> Int -> Addr
+ , plusAddr -- :: Addr -> AddrOff -> Addr
+ , minusAddr -- :: Addr -> Addr -> AddrOff
+
+ , indexAddrOffAddr -- :: Addr -> Int -> Addr
+
, Word(..)
, Word(..)
- , nullAddr -- :: Addr
- , plusAddr -- :: Addr -> Int -> Addr
- , indexAddrOffAddr -- :: Addr -> Int -> Addr
+ , wordToInt
+ , intToWord
, Word64(..)
, Int64(..)
, Word64(..)
, Int64(..)
@@
-20,38
+27,50
@@
module PrelAddr (
import PrelGHC
import PrelBase
import PrelGHC
import PrelBase
-import PrelCCall
+
+infixl 5 `plusAddr`, `minusAddr`
\end{code}
\begin{code}
data Addr = A# Addr# deriving (Eq, Ord)
data Word = W# Word# deriving (Eq, Ord)
\end{code}
\begin{code}
data Addr = A# Addr# deriving (Eq, Ord)
data Word = W# Word# deriving (Eq, Ord)
-instance Show Addr where
- showsPrec p (A# a) = showsPrec p (I# (addr2Int# a))
+newtype AddrOff = AddrOff# Int
+
+nullAddr :: Addr
+nullAddr = A# (int2Addr# 0#)
-nullAddr = ``NULL'' :: Addr
+alignAddr :: Addr -> Int -> Addr
+alignAddr addr@(A# a) (I# i)
+ = case addr2Int# a of { ai ->
+ case remInt# ai i of {
+ 0# -> addr;
+ n -> A# (int2Addr# (ai +# (i -# n))) }}
-plusAddr :: Addr -> Int -> Addr
-plusAddr (A# addr) (I# off) = A# (int2Addr# (addr2Int# addr +# off))
+plusAddr :: Addr -> AddrOff -> Addr
+plusAddr (A# addr) (AddrOff# (I# off)) = A# (int2Addr# (addr2Int# addr +# off))
+
+minusAddr :: Addr -> Addr -> AddrOff
+minusAddr (A# a1) (A# a2) = AddrOff# (I# (addr2Int# a1 -# addr2Int# a2))
instance CCallable Addr
instance CCallable Addr
-instance CCallable Addr#
instance CReturnable Addr
instance CCallable Word
instance CReturnable Addr
instance CCallable Word
-instance CCallable Word#
instance CReturnable Word
instance CReturnable Word
+wordToInt :: Word -> Int
+wordToInt (W# w#) = I# (word2Int# w#)
+
+intToWord :: Int -> Word
+intToWord (I# i#) = W# (int2Word# i#)
+
#if WORD_SIZE_IN_BYTES == 8
data Word64 = W64# Word#
data Int64 = I64# Int#
#else
data Word64 = W64# Word64# --deriving (Eq, Ord) -- Glasgow extension
data Int64 = I64# Int64# --deriving (Eq, Ord) -- Glasgow extension
#if WORD_SIZE_IN_BYTES == 8
data Word64 = W64# Word#
data Int64 = I64# Int#
#else
data Word64 = W64# Word64# --deriving (Eq, Ord) -- Glasgow extension
data Int64 = I64# Int64# --deriving (Eq, Ord) -- Glasgow extension
-
-instance CCallable Word64#
-instance CCallable Int64#
#endif
instance CCallable Word64
#endif
instance CCallable Word64