\begin{code}
{-# OPTIONS -optc-DNON_POSIX_SOURCE #-}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
module ByteCodeItbls ( ItblEnv, ItblPtr(..), itblCode, mkITbls
, StgInfoTable(..)
) where
import Constants ( mIN_PAYLOAD_SIZE, wORD_SIZE )
import CgHeapery ( mkVirtHeapOffsets )
import FastString ( FastString(..) )
-import Util ( lengthIs, listLengthCmp )
+import Util
+import Outputable
import Foreign
import Foreign.C
import GHC.Exts ( Int(I#), addr2Int# )
import GHC.Ptr ( Ptr(..) )
-import GHC.Prim
-import Outputable
+import Debug.Trace
+import Text.Printf
\end{code}
%************************************************************************
itblCode :: ItblPtr -> Ptr ()
itblCode (ItblPtr ptr)
- = (castPtr ptr)
-#ifdef GHCI_TABLES_NEXT_TO_CODE
- `plusPtr` (3 * wORD_SIZE)
-#endif
+ | ghciTablesNextToCode = castPtr ptr `plusPtr` conInfoTableSizeB
+ | otherwise = castPtr ptr
+
+-- XXX bogus
+conInfoTableSizeB = 3 * wORD_SIZE
type ItblEnv = NameEnv (Name, ItblPtr)
-- We need the Name in the range so we know which
, code = code
#endif
}
- qNameCString <- newCString $ dataConIdentity dcon
+ qNameCString <- newArray0 0 $ dataConIdentity dcon
let conInfoTbl = StgConInfoTable {
conDesc = qNameCString,
infoTable = itbl
#endif
data StgConInfoTable = StgConInfoTable {
- conDesc :: CString,
+ conDesc :: Ptr Word8,
infoTable :: StgInfoTable
}
alignment conInfoTable = SIZEOF_VOID_P
peek ptr
= runState (castPtr ptr) $ do
+#ifdef GHCI_TABLES_NEXT_TO_CODE
desc <- load
+#endif
itbl <- load
+#ifndef GHCI_TABLES_NEXT_TO_CODE
+ desc <- load
+#endif
return
StgConInfoTable
- { conDesc = desc
+ {
+#ifdef GHCI_TABLES_NEXT_TO_CODE
+ conDesc = castPtr $ ptr `plusPtr` conInfoTableSizeB `plusPtr` desc
+#else
+ conDesc = desc
+#endif
, infoTable = itbl
}
poke ptr itbl
= runState (castPtr ptr) $ do
- store (conDesc itbl)
+#ifdef GHCI_TABLES_NEXT_TO_CODE
+ store (conDesc itbl `minusPtr` (ptr `plusPtr` conInfoTableSizeB))
+#endif
store (infoTable itbl)
+#ifndef GHCI_TABLES_NEXT_TO_CODE
+ store (conDesc itbl)
+#endif
data StgInfoTable = StgInfoTable {
#ifndef GHCI_TABLES_NEXT_TO_CODE