X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FPtr.lhs;h=8087c77ff3054918fbafa12bfc9f1acb2bc82af9;hb=e3e2159dbf55edd3124d66533ff2c598f53aa811;hp=222524c5c6339409bd4be124ac67f6b3eb6e7333;hpb=d9a0d6f44a930da4ae49678908e37793d693467c;p=ghc-base.git diff --git a/GHC/Ptr.lhs b/GHC/Ptr.lhs index 222524c..8087c77 100644 --- a/GHC/Ptr.lhs +++ b/GHC/Ptr.lhs @@ -1,5 +1,6 @@ \begin{code} -{-# OPTIONS_GHC -fno-implicit-prelude #-} +{-# OPTIONS_GHC -XNoImplicitPrelude #-} +{-# OPTIONS_HADDOCK hide #-} ----------------------------------------------------------------------------- -- | -- Module : GHC.Ptr @@ -18,6 +19,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. @@ -56,7 +63,7 @@ alignPtr addr@(Ptr a) (I# i) 0# -> addr; n -> Ptr (plusAddr# a (i -# n)) } --- |Computes the offset required to get from the first to the second +-- |Computes the offset required to get from the second to the first -- argument. We have -- -- > p2 == p1 `plusPtr` (p2 `minusPtr` p1) @@ -134,5 +141,19 @@ castFunPtrToPtr (FunPtr addr) = Ptr addr -- this assumption. castPtrToFunPtr :: Ptr a -> FunPtr b castPtrToFunPtr (Ptr addr) = FunPtr addr + + +------------------------------------------------------------------------ +-- Show instances for Ptr and FunPtr + +instance Show (Ptr a) where + showsPrec _ (Ptr a) rs = pad_out (showHex (wordToInteger(int2Word#(addr2Int# a))) "") + where + -- want 0s prefixed to pad it out to a fixed length. + pad_out ls = + '0':'x':(replicate (2*SIZEOF_HSPTR - length ls) '0') ++ ls ++ rs + +instance Show (FunPtr a) where + showsPrec p = showsPrec p . castFunPtrToPtr \end{code}