2 % (c) The AQUA Project, Glasgow University, 1994-1998
5 \section[PrelAddr]{Module @PrelAddr@}
8 {-# OPTIONS -fno-implicit-prelude #-}
13 , plusAddr -- :: Addr -> Int -> Addr
14 , indexAddrOffAddr -- :: Addr -> Int -> Addr
31 data Addr = A# Addr# deriving (Eq, Ord)
32 data Word = W# Word# deriving (Eq, Ord)
35 nullAddr = A# (int2Addr# 0#)
37 plusAddr :: Addr -> Int -> Addr
38 plusAddr (A# addr) (I# off) = A# (int2Addr# (addr2Int# addr +# off))
40 instance CCallable Addr
41 instance CReturnable Addr
43 instance CCallable Word
44 instance CReturnable Word
46 wordToInt :: Word -> Int
47 wordToInt (W# w#) = I# (word2Int# w#)
49 intToWord :: Int -> Word
50 intToWord (I# i#) = W# (int2Word# i#)
52 #if WORD_SIZE_IN_BYTES == 8
53 data Word64 = W64# Word#
54 data Int64 = I64# Int#
56 data Word64 = W64# Word64# --deriving (Eq, Ord) -- Glasgow extension
57 data Int64 = I64# Int64# --deriving (Eq, Ord) -- Glasgow extension
60 instance CCallable Word64
61 instance CReturnable Word64
63 instance CCallable Int64
64 instance CReturnable Int64
66 indexAddrOffAddr :: Addr -> Int -> Addr
67 indexAddrOffAddr (A# addr#) n
68 = case n of { I# n# ->
69 case indexAddrOffAddr# addr# n# of { r# ->