From: simonpj@microsoft.com Date: Fri, 24 Nov 2006 10:06:39 +0000 (+0000) Subject: Move instance of Show Ptr to Ptr.hs (fewer orphans) X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=35e82a9b2f8245712675f93b2026400a8fe31e1c;p=ghc-base.git Move instance of Show Ptr to Ptr.hs (fewer orphans) --- diff --git a/GHC/ForeignPtr.hs b/GHC/ForeignPtr.hs index 603a8f3..bb74f0b 100644 --- a/GHC/ForeignPtr.hs +++ b/GHC/ForeignPtr.hs @@ -86,22 +86,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 diff --git a/GHC/Ptr.lhs b/GHC/Ptr.lhs index 222524c..391f925 100644 --- a/GHC/Ptr.lhs +++ b/GHC/Ptr.lhs @@ -18,6 +18,12 @@ module GHC.Ptr where import GHC.Base +import GHC.Show +import GHC.Num +import GHC.List ( length, replicate ) +import Numeric ( showHex ) + +#include "MachDeps.h" ------------------------------------------------------------------------ -- Data pointers. @@ -134,5 +140,25 @@ castFunPtrToPtr (FunPtr addr) = Ptr addr -- this assumption. castPtrToFunPtr :: Ptr a -> FunPtr b castPtrToFunPtr (Ptr addr) = FunPtr addr + + +------------------------------------------------------------------------ +-- Show instances for Ptr and FunPtr +-- I have absolutely no idea why the WORD_SIZE_IN_BITS stuff is here + +#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 \end{code}