Use explicit language extensions & remove extension fields from base.cabal
[ghc-base.git] / GHC / Ptr.lhs
index 222524c..bf78f71 100644 (file)
@@ -1,5 +1,7 @@
 \begin{code}
-{-# OPTIONS_GHC -fno-implicit-prelude #-}
+{-# LANGUAGE CPP, NoImplicitPrelude, MagicHash #-}
+{-# OPTIONS_HADDOCK hide #-}
+
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  GHC.Ptr
 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 +64,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)
@@ -72,7 +80,7 @@ data FunPtr a = FunPtr Addr# deriving (Eq, Ord)
 -- a function type with zero or more arguments where
 --
 -- * the argument types are /marshallable foreign types/,
---   i.e. 'Char', 'Int', 'Prelude.Double', 'Prelude.Float',
+--   i.e. 'Char', 'Int', 'Double', 'Float',
 --   'Bool', 'Data.Int.Int8', 'Data.Int.Int16', 'Data.Int.Int32',
 --   'Data.Int.Int64', 'Data.Word.Word8', 'Data.Word.Word16',
 --   'Data.Word.Word32', 'Data.Word.Word64', @'Ptr' a@, @'FunPtr' a@,
@@ -80,7 +88,7 @@ data FunPtr a = FunPtr Addr# deriving (Eq, Ord)
 --   using @newtype@.
 -- 
 -- * the return type is either a marshallable foreign type or has the form
---   @'Prelude.IO' t@ where @t@ is a marshallable foreign type or @()@.
+--   @'IO' t@ where @t@ is a marshallable foreign type or @()@.
 --
 -- A value of type @'FunPtr' a@ may be a pointer to a foreign function,
 -- either returned by another foreign function or imported with a
@@ -134,5 +142,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}