X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FPtr.hs;h=514de593cef38c4b573898b13f5c340e7af1e572;hb=9805a212e2b0182b86866c38dd33b6f2e1f2771c;hp=7d75e69be1df691ceb466992dc35107538af9d57;hpb=9fa9bc17072a58c0bae2cce4764d38677e96ac29;p=haskell-directory.git diff --git a/Foreign/Ptr.hs b/Foreign/Ptr.hs index 7d75e69..514de59 100644 --- a/Foreign/Ptr.hs +++ b/Foreign/Ptr.hs @@ -3,33 +3,32 @@ -- | -- Module : Foreign.Ptr -- Copyright : (c) The FFI task force 2001 --- License : BSD-style (see the file libraries/core/LICENSE) +-- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : ffi@haskell.org -- Stability : provisional -- Portability : portable -- --- $Id: Ptr.hs,v 1.7 2002/04/24 16:31:44 simonmar Exp $ --- --- Pointer types. +-- 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. -- ----------------------------------------------------------------------------- module Foreign.Ptr ( - -------------------------------------------------------------------- - -- Data pointers. + + -- * Data pointers - Ptr(..), -- data Ptr a + Ptr, -- data Ptr a nullPtr, -- :: Ptr a castPtr, -- :: Ptr a -> Ptr b plusPtr, -- :: Ptr a -> Int -> Ptr b alignPtr, -- :: Ptr a -> Int -> Ptr a minusPtr, -- :: Ptr a -> Ptr b -> Int - -------------------------------------------------------------------- - -- Function pointers. + -- * Function pointers - FunPtr(..), -- data FunPtr a + FunPtr, -- data FunPtr a nullFunPtr, -- :: FunPtr a castFunPtr, -- :: FunPtr a -> FunPtr b castFunPtrToPtr, -- :: FunPtr a -> Ptr b @@ -51,21 +50,45 @@ 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 foreign import ccall unsafe "freeHaskellFunctionPtr" freeHaskellFunPtr :: FunPtr a -> IO () +#endif