X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FForeignPtr.hs;h=b91ffebf52b09f9916f351619400f0a624ceb43d;hb=f98950484a7cb01e43352e3d88277a2784cd58bf;hp=a240e9dc7c51f760fab17d6a7e5698e218bf18eb;hpb=10de2c656f74562b662c22928be85e1b3ccda796;p=ghc-base.git diff --git a/Foreign/ForeignPtr.hs b/Foreign/ForeignPtr.hs index a240e9d..b91ffeb 100644 --- a/Foreign/ForeignPtr.hs +++ b/Foreign/ForeignPtr.hs @@ -1,4 +1,5 @@ -{-# OPTIONS_GHC -XNoImplicitPrelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude #-} + ----------------------------------------------------------------------------- -- | -- Module : Foreign.ForeignPtr @@ -78,7 +79,7 @@ import Foreign.Storable ( Storable(sizeOf) ) #ifdef __GLASGOW_HASKELL__ import GHC.Base -import GHC.IOBase +-- import GHC.IO import GHC.Num import GHC.Err ( undefined ) import GHC.ForeignPtr @@ -101,13 +102,10 @@ instance Show (ForeignPtr a) where #ifndef __NHC__ newForeignPtr :: FinalizerPtr a -> Ptr a -> IO (ForeignPtr a) -- ^Turns a plain memory reference into a foreign pointer, and --- associates a finaliser with the reference. The finaliser will be executed --- after the last reference to the foreign object is dropped. Note that there --- is no guarantee on how soon the finaliser is executed after the last --- reference was dropped; this depends on the details of the Haskell storage --- manager. Indeed, there is no guarantee that the finalizer is executed at --- all; a program may exit with finalizers outstanding. (This is true --- of GHC, other implementations may give stronger guarantees). +-- associates a finalizer with the reference. The finalizer will be +-- executed after the last reference to the foreign object is dropped. +-- There is no guarantee of promptness, however the finalizer will be +-- executed before the program exits. newForeignPtr finalizer p = do fObj <- newForeignPtr_ p addForeignPtrFinalizer finalizer fObj @@ -152,24 +150,6 @@ newForeignPtrEnv finalizer env p return fObj #endif /* __HUGS__ */ -#ifdef __GLASGOW_HASKELL__ -type FinalizerEnvPtr env a = FunPtr (Ptr env -> Ptr a -> IO ()) - --- | like 'addForeignPtrFinalizerEnv' but allows the finalizer to be --- passed an additional environment parameter to be passed to the --- finalizer. The environment passed to the finalizer is fixed by the --- second argument to 'addForeignPtrFinalizerEnv' -addForeignPtrFinalizerEnv :: - FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO () -addForeignPtrFinalizerEnv finalizer env fptr = - addForeignPtrConcFinalizer fptr - (mkFinalizerEnv finalizer env (unsafeForeignPtrToPtr fptr)) - -foreign import ccall "dynamic" - mkFinalizerEnv :: FinalizerEnvPtr env a -> Ptr env -> Ptr a -> IO () -#endif - - #ifndef __GLASGOW_HASKELL__ mallocForeignPtr :: Storable a => IO (ForeignPtr a) mallocForeignPtr = do