X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FForeignPtr.hs;h=a187570ad6ab539526c505803e76e0068c45e77d;hb=4ef39162b8ae3ab239009e6386b5787475f172d9;hp=b0850df81d167ad624680aa857f2b11c75af94f1;hpb=7239d7941b97be5da9bf04e900d06344aa6608f0;p=ghc-base.git diff --git a/GHC/ForeignPtr.hs b/GHC/ForeignPtr.hs index b0850df..a187570 100644 --- a/GHC/ForeignPtr.hs +++ b/GHC/ForeignPtr.hs @@ -1,4 +1,5 @@ {-# OPTIONS_GHC -fno-implicit-prelude #-} +{-# OPTIONS_HADDOCK hide #-} ----------------------------------------------------------------------------- -- | -- Module : GHC.ForeignPtr @@ -34,15 +35,13 @@ module GHC.ForeignPtr import Control.Monad ( sequence_ ) import Foreign.Storable -import Numeric ( showHex ) import GHC.Show -import GHC.Num -import GHC.List ( null, replicate, length ) +import GHC.List ( null ) import GHC.Base import GHC.IOBase import GHC.STRef ( STRef(..) ) -import GHC.Ptr ( Ptr(..), FunPtr, castFunPtrToPtr ) +import GHC.Ptr ( Ptr(..), FunPtr ) import GHC.Err -- |The type 'ForeignPtr' represents references to objects that are @@ -86,22 +85,6 @@ instance Ord (ForeignPtr a) where instance Show (ForeignPtr a) where showsPrec p f = showsPrec p (unsafeForeignPtrToPtr f) -#include "MachDeps.h" - -#if (WORD_SIZE_IN_BITS == 32 || WORD_SIZE_IN_BITS == 64) -instance Show (Ptr a) where - showsPrec p (Ptr a) rs = pad_out (showHex (word2Integer(int2Word#(addr2Int# a))) "") rs - where - -- want 0s prefixed to pad it out to a fixed length. - pad_out ls rs = - '0':'x':(replicate (2*SIZEOF_HSPTR - length ls) '0') ++ ls ++ rs - -- word2Integer :: Word# -> Integer (stolen from Word.lhs) - word2Integer w = case word2Integer# w of - (# s, d #) -> J# s d - -instance Show (FunPtr a) where - showsPrec p = showsPrec p . castFunPtrToPtr -#endif -- |A Finalizer is represented as a pointer to a foreign function that, at -- finalisation time, gets as an argument a plain pointer variant of the @@ -183,7 +166,7 @@ mallocForeignPtrBytes (I# size) = do -- mallocPlainForeignPtr. This is useful for ForeignPtrs that will live -- only inside Haskell (such as those created for packed strings). -- Attempts to add a finalizer to a ForeignPtr created this way, or to --- finalize such a pointer, will have no effect. +-- finalize such a pointer, will throw an exception. -- mallocPlainForeignPtr :: Storable a => IO (ForeignPtr a) mallocPlainForeignPtr = doMalloc undefined @@ -197,7 +180,8 @@ mallocPlainForeignPtr = doMalloc undefined -- | This function is similar to 'mallocForeignPtrBytes', except that -- the internally an optimised ForeignPtr representation with no --- finalizer is used. +-- finalizer is used. Attempts to add a finalizer will cause an +-- exception to be thrown. mallocPlainForeignPtrBytes :: Int -> IO (ForeignPtr a) mallocPlainForeignPtrBytes (I# size) = IO $ \s -> case newPinnedByteArray# size s of { (# s, mbarr# #) ->