-----------------------------------------------------------------------------
--- $Id: PrelPtr.lhs,v 1.1 2001/01/11 17:25:57 simonmar Exp $
+-- $Id: PrelPtr.lhs,v 1.4 2001/10/17 11:26:04 simonpj Exp $
--
-- (c) 2000
--
data Ptr a = Ptr Addr# deriving (Eq, Ord)
nullPtr :: Ptr a
-nullPtr = Ptr (int2Addr# 0#)
+nullPtr = Ptr nullAddr#
castPtr :: Ptr a -> Ptr b
castPtr (Ptr addr) = Ptr addr
plusPtr :: Ptr a -> Int -> Ptr b
-plusPtr (Ptr addr) (I# d) = Ptr (int2Addr# (addr2Int# addr +# d))
+plusPtr (Ptr addr) (I# d) = Ptr (plusAddr# addr d)
alignPtr :: Ptr a -> Int -> Ptr a
alignPtr addr@(Ptr a) (I# i)
- = case addr2Int# a of { ai ->
- case remInt# ai i of {
+ = case remAddr# a i of {
0# -> addr;
- n -> Ptr (int2Addr# (ai +# (i -# n))) }}
+ n -> Ptr (plusAddr# a (i -# n)) }
minusPtr :: Ptr a -> Ptr b -> Int
-minusPtr (Ptr a1) (Ptr a2) = I# (addr2Int# a1 -# addr2Int# a2)
+minusPtr (Ptr a1) (Ptr a2) = I# (minusAddr# a1 a2)
instance CCallable (Ptr a)
instance CReturnable (Ptr a)
------------------------------------------------------------------------
-- Function pointers for the default calling convention.
-newtype FunPtr a = FunPtr (Ptr a) deriving (Eq, Ord)
+data FunPtr a = FunPtr Addr# deriving (Eq, Ord)
nullFunPtr :: FunPtr a
-nullFunPtr = FunPtr nullPtr
+nullFunPtr = FunPtr nullAddr#
castFunPtr :: FunPtr a -> FunPtr b
-castFunPtr (FunPtr a) = FunPtr (castPtr a)
+castFunPtr (FunPtr addr) = FunPtr addr
castFunPtrToPtr :: FunPtr a -> Ptr b
-castFunPtrToPtr (FunPtr a) = castPtr a
+castFunPtrToPtr (FunPtr addr) = Ptr addr
castPtrToFunPtr :: Ptr a -> FunPtr b
-castPtrToFunPtr a = FunPtr (castPtr a)
+castPtrToFunPtr (Ptr addr) = FunPtr addr
instance CCallable (FunPtr a)
instance CReturnable (FunPtr a)
\end{code}
+