X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FForeignPtr.hs;h=a824914ee0218c648d8f857d7db6ed2d505f6659;hb=27aaa04d21d82a77b4eca92883de3bb5b24a212c;hp=50db97d7f919bfddad6e9e452e3937114c7f7bec;hpb=aaf764b3ad8b1816d68b5f27299eac125f08e1a5;p=ghc-base.git diff --git a/Foreign/ForeignPtr.hs b/Foreign/ForeignPtr.hs index 50db97d..a824914 100644 --- a/Foreign/ForeignPtr.hs +++ b/Foreign/ForeignPtr.hs @@ -1,4 +1,4 @@ -{-# OPTIONS_GHC -fno-implicit-prelude #-} +{-# OPTIONS_GHC -XNoImplicitPrelude #-} ----------------------------------------------------------------------------- -- | -- Module : Foreign.ForeignPtr @@ -17,38 +17,38 @@ module Foreign.ForeignPtr ( - -- * Finalised data pointers - ForeignPtr - , FinalizerPtr -#ifdef __HUGS__ - , FinalizerEnvPtr + -- * Finalised data pointers + ForeignPtr + , FinalizerPtr +#if defined(__HUGS__) || defined(__GLASGOW_HASKELL__) + , FinalizerEnvPtr #endif - -- ** Basic operations + -- ** Basic operations , newForeignPtr , newForeignPtr_ , addForeignPtrFinalizer -#ifdef __HUGS__ - , newForeignPtrEnv - , addForeignPtrFinalizerEnv +#if defined(__HUGS__) || defined(__GLASGOW_HASKELL__) + , newForeignPtrEnv + , addForeignPtrFinalizerEnv #endif - , withForeignPtr + , withForeignPtr #ifdef __GLASGOW_HASKELL__ - , finalizeForeignPtr + , finalizeForeignPtr #endif - -- ** Low-level operations - , unsafeForeignPtrToPtr - , touchForeignPtr - , castForeignPtr + -- ** Low-level operations + , unsafeForeignPtrToPtr + , touchForeignPtr + , castForeignPtr - -- ** Allocating managed memory - , mallocForeignPtr - , mallocForeignPtrBytes - , mallocForeignPtrArray - , mallocForeignPtrArray0 + -- ** Allocating managed memory + , mallocForeignPtr + , mallocForeignPtrBytes + , mallocForeignPtrArray + , mallocForeignPtrArray0 ) - where + where import Foreign.Ptr @@ -73,23 +73,19 @@ import Hugs.ForeignPtr #endif #ifndef __NHC__ -import Foreign.Storable ( Storable(sizeOf) ) +import Foreign.Storable ( Storable(sizeOf) ) #endif #ifdef __GLASGOW_HASKELL__ import GHC.Base -import GHC.IOBase +-- import GHC.IO import GHC.Num -import GHC.Err ( undefined ) +import GHC.Err ( undefined ) import GHC.ForeignPtr #endif #if !defined(__NHC__) && !defined(__GLASGOW_HASKELL__) -import Foreign.Marshal.Alloc ( malloc, mallocBytes, finalizerFree ) -import Data.Typeable - -#include "Typeable.h" -INSTANCE_TYPEABLE1(ForeignPtr,foreignPtrTc,"ForeignPtr") +import Foreign.Marshal.Alloc ( malloc, mallocBytes, finalizerFree ) instance Eq (ForeignPtr a) where p == q = unsafeForeignPtrToPtr p == unsafeForeignPtrToPtr q @@ -105,12 +101,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. The only guarantee is that the finaliser runs before the program --- terminates. +-- 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 @@ -142,7 +136,7 @@ withForeignPtr fo io return r #endif /* ! __NHC__ */ -#ifdef __HUGS__ +#if defined(__HUGS__) || defined(__GLASGOW_HASKELL__) -- | This variant of 'newForeignPtr' adds a finalizer that expects an -- environment in addition to the finalized pointer. The environment -- that will be passed to the finalizer is fixed by the second argument to