1 % -----------------------------------------------------------------------------
2 % $Id: Stable.lhs,v 1.1 2001/06/28 14:15:03 simonmar Exp $
4 % (c) The GHC Team, 1992-2000
7 \section{Module @GHC.Stable@}
10 {-# OPTIONS -fno-implicit-prelude #-}
14 , newStablePtr -- :: a -> IO (StablePtr a)
15 , deRefStablePtr -- :: StablePtr a -> a
16 , freeStablePtr -- :: StablePtr a -> IO ()
17 , castStablePtrToPtr -- :: StablePtr a -> Ptr ()
18 , castPtrToStablePtr -- :: Ptr () -> StablePtr a
26 -----------------------------------------------------------------------------
29 data StablePtr a = StablePtr (StablePtr# a)
31 instance CCallable (StablePtr a)
32 instance CReturnable (StablePtr a)
34 newStablePtr :: a -> IO (StablePtr a)
35 newStablePtr a = IO $ \ s ->
36 case makeStablePtr# a s of (# s', sp #) -> (# s', StablePtr sp #)
38 deRefStablePtr :: StablePtr a -> IO a
39 deRefStablePtr (StablePtr sp) = IO $ \s -> deRefStablePtr# sp s
41 foreign import unsafe freeStablePtr :: StablePtr a -> IO ()
43 castStablePtrToPtr :: StablePtr a -> Ptr ()
44 castStablePtrToPtr (StablePtr s) = Ptr (unsafeCoerce# s)
46 castPtrToStablePtr :: Ptr () -> StablePtr a
47 castPtrToStablePtr (Ptr a) = StablePtr (unsafeCoerce# a)
49 instance Eq (StablePtr a) where
50 (StablePtr sp1) == (StablePtr sp2) =
51 case eqStablePtr# sp1 sp2 of