From c4333dc53f3d21996b74b9e573ca37bdb8cba653 Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Mon, 12 Mar 2012 15:26:01 +0000 Subject: [PATCH] Use aToInt# --- cbits/HeapViewPrim.cmm | 2 +- src/GHC/HeapView.hs | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/cbits/HeapViewPrim.cmm b/cbits/HeapViewPrim.cmm index f6f9b5c..3b3b10f 100644 --- a/cbits/HeapViewPrim.cmm +++ b/cbits/HeapViewPrim.cmm @@ -1,6 +1,6 @@ #include "Cmm.h" -aToInt +aToWordzh { W_ clos; clos = R1; diff --git a/src/GHC/HeapView.hs b/src/GHC/HeapView.hs index 3de0496..3c5d826 100644 --- a/src/GHC/HeapView.hs +++ b/src/GHC/HeapView.hs @@ -36,7 +36,7 @@ instance Show Box where -- unsafePerformIO (print "↓" >> pClosure any) `seq` pad_out (showHex addr "") ++ (if tag>0 then "/" ++ show tag else "") ++ rs where - ptr = W# (int2Word# (aToInt# any)) + ptr = W# (aToWord# any) tag = ptr .&. fromIntegral tAG_MASK -- ((1 `shiftL` TAG_BITS) -1) addr = ptr - tag -- want 0s prefixed to pad it out to a fixed length. @@ -287,24 +287,29 @@ allPtrs (MutArrClosure {..}) = mccPayload allPtrs (FunClosure {..}) = ptrArgs allPtrs (OtherClosure {..}) = hvalues + + #ifdef PRIM_SUPPORTS_ANY -foreign import prim "aToInt" aToInt# :: Any -> Int# +foreign import prim "aToWordzh" aToWord# :: Any -> Word# foreign import prim "slurpClosurezh" slurpClosure# :: Any -> (# Addr#, ByteArray#, Array# b #) #else -- Workd-around code until http://hackage.haskell.org/trac/ghc/ticket/5931 was -- accepted -foreign import prim "aToInt" aToInt'# :: Addr# -> Int# +foreign import prim "aToWordzh" aToWord'# :: Addr# -> Word# foreign import prim "slurpClosurezh" slurpClosure'# :: Addr# -> (# Addr#, ByteArray#, Array# b #) -- This is a datatype that has the same layout as Ptr, so that by -- unsafeCoerce'ing, we obtain the Addr of the wrapped value data Ptr' a = Ptr' a -aToInt# :: Any -> Int# -aToInt# a = case Ptr' a of mb@(Ptr' _) -> case unsafeCoerce# mb :: Ptr () of Ptr addr -> aToInt'# addr +addrOf# :: Any -> Addr# +addrOf# a = case Ptr' a of mb@(Ptr' _) -> case unsafeCoerce# mb :: Ptr () of Ptr addr -> addr + +aToWord# :: Any -> Word# +aToWord# a = aToWord'# (addrOf# a) slurpClosure# :: Any -> (# Addr#, ByteArray#, Array# b #) -slurpClosure# a = case Ptr' a of mb@(Ptr' _) -> case unsafeCoerce# mb :: Ptr () of Ptr addr -> slurpClosure'# addr +slurpClosure# a = slurpClosure'# (addrOf# a) #endif --pClosure x = do -- 2.20.1