1 -----------------------------------------------------------------------------
2 -- $Id: PrelPtr.lhs,v 1.1 2001/01/11 17:25:57 simonmar Exp $
9 {-# OPTIONS -fno-implicit-prelude #-}
10 module PrelPtr{-everything-} where
14 ------------------------------------------------------------------------
17 data Ptr a = Ptr Addr# deriving (Eq, Ord)
20 nullPtr = Ptr (int2Addr# 0#)
22 castPtr :: Ptr a -> Ptr b
23 castPtr (Ptr addr) = Ptr addr
25 plusPtr :: Ptr a -> Int -> Ptr b
26 plusPtr (Ptr addr) (I# d) = Ptr (int2Addr# (addr2Int# addr +# d))
28 alignPtr :: Ptr a -> Int -> Ptr a
29 alignPtr addr@(Ptr a) (I# i)
30 = case addr2Int# a of { ai ->
31 case remInt# ai i of {
33 n -> Ptr (int2Addr# (ai +# (i -# n))) }}
35 minusPtr :: Ptr a -> Ptr b -> Int
36 minusPtr (Ptr a1) (Ptr a2) = I# (addr2Int# a1 -# addr2Int# a2)
38 instance CCallable (Ptr a)
39 instance CReturnable (Ptr a)
41 ------------------------------------------------------------------------
42 -- Function pointers for the default calling convention.
44 newtype FunPtr a = FunPtr (Ptr a) deriving (Eq, Ord)
46 nullFunPtr :: FunPtr a
47 nullFunPtr = FunPtr nullPtr
49 castFunPtr :: FunPtr a -> FunPtr b
50 castFunPtr (FunPtr a) = FunPtr (castPtr a)
52 castFunPtrToPtr :: FunPtr a -> Ptr b
53 castFunPtrToPtr (FunPtr a) = castPtr a
55 castPtrToFunPtr :: Ptr a -> FunPtr b
56 castPtrToFunPtr a = FunPtr (castPtr a)
58 instance CCallable (FunPtr a)
59 instance CReturnable (FunPtr a)