X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FPtr.hs;h=7d75e69be1df691ceb466992dc35107538af9d57;hb=9fa9bc17072a58c0bae2cce4764d38677e96ac29;hp=ca6ed10b98f6024eba9e929e4b9f1e52af73208d;hpb=5545727d5a6a1fc6d5d00f32a92a8fdf0fb7ca77;p=ghc-base.git diff --git a/Foreign/Ptr.hs b/Foreign/Ptr.hs index ca6ed10..7d75e69 100644 --- a/Foreign/Ptr.hs +++ b/Foreign/Ptr.hs @@ -1,6 +1,6 @@ {-# OPTIONS -fno-implicit-prelude #-} ----------------------------------------------------------------------------- --- +-- | -- Module : Foreign.Ptr -- Copyright : (c) The FFI task force 2001 -- License : BSD-style (see the file libraries/core/LICENSE) @@ -9,7 +9,7 @@ -- Stability : provisional -- Portability : portable -- --- $Id: Ptr.hs,v 1.2 2001/07/03 11:37:50 simonmar Exp $ +-- $Id: Ptr.hs,v 1.7 2002/04/24 16:31:44 simonmar Exp $ -- -- Pointer types. -- @@ -40,16 +40,32 @@ module Foreign.Ptr ( ) where -import Data.Dynamic - #ifdef __GLASGOW_HASKELL__ import GHC.Ptr import GHC.IOBase import GHC.Err +import GHC.Base +import GHC.Num +import GHC.List +import GHC.Show +import Numeric #endif -foreign import "freeHaskellFunctionPtr" unsafe - freeHaskellFunPtr :: FunPtr a -> IO () +#include "MachDeps.h" + +#ifdef __GLASGOW_HASKELL__ +#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 = + '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 +#endif -#include "Dynamic.h" -INSTANCE_TYPEABLE1(Ptr,ptrTc,"Ptr") +foreign import ccall unsafe "freeHaskellFunctionPtr" + freeHaskellFunPtr :: FunPtr a -> IO ()