X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FPtr.hs;h=ad20da4a5a6fa294a70e81122532dc5a6f1e5b72;hb=052b9b84fff4bffabbd93d19cb17a2c6c6672128;hp=f4260fd0a4918d992396ac0fb15386cdfd0797fb;hpb=f7a485978f04e84b086f1974b88887cc72d832d0;p=ghc-base.git diff --git a/Foreign/Ptr.hs b/Foreign/Ptr.hs index f4260fd..ad20da4 100644 --- a/Foreign/Ptr.hs +++ b/Foreign/Ptr.hs @@ -1,4 +1,4 @@ -{-# OPTIONS -fno-implicit-prelude #-} +{-# OPTIONS_GHC -fno-implicit-prelude #-} ----------------------------------------------------------------------------- -- | -- Module : Foreign.Ptr @@ -9,7 +9,7 @@ -- Stability : provisional -- Portability : portable -- --- The "Ptr" module provides typed pointers to foreign data. It is part +-- This module provides typed pointers to foreign data. It is part -- of the Foreign Function Interface (FFI) and will normally be -- imported via the "Foreign" module. -- @@ -42,7 +42,6 @@ module Foreign.Ptr ( #ifdef __GLASGOW_HASKELL__ import GHC.Ptr import GHC.IOBase -import GHC.Err import GHC.Base import GHC.Num import GHC.List @@ -50,21 +49,49 @@ import GHC.Show import Numeric #endif -#include "MachDeps.h" +#ifdef __NHC__ +import NHC.FFI + ( Ptr + , nullPtr + , castPtr + , plusPtr + , alignPtr + , minusPtr + , FunPtr + , nullFunPtr + , castFunPtr + , castFunPtrToPtr + , castPtrToFunPtr + , freeHaskellFunPtr + ) +#endif + +#ifdef __HUGS__ +import Hugs.Ptr +#endif #ifdef __GLASGOW_HASKELL__ +#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 ('0':'x':ls) rs = + 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 -#endif + +instance Show (FunPtr a) where + showsPrec p = showsPrec p . castFunPtrToPtr #endif +-- | Release the storage associated with the given 'FunPtr', which +-- must have been obtained from a wrapper stub. This should be called +-- whenever the return value from a foreign import wrapper function is +-- no longer required; otherwise, the storage it uses will leak. foreign import ccall unsafe "freeHaskellFunctionPtr" freeHaskellFunPtr :: FunPtr a -> IO () +#endif