{-# LINE 1 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
module GHC.Internal.Heap.InfoTable
( module GHC.Internal.Heap.InfoTable.Types
, itblSize
, peekItbl
, pokeItbl
) where
import GHC.Internal.Base
import GHC.Internal.Real
import GHC.Internal.Enum
import GHC.Internal.Heap.InfoTable.Types
{-# LINE 21 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
import GHC.Internal.Data.Either
import GHC.Internal.Foreign.Marshal.Array
{-# LINE 24 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
import GHC.Internal.Foreign.Ptr
import GHC.Internal.Foreign.Storable
peekItbl :: Ptr StgInfoTable -> IO StgInfoTable
peekItbl :: Ptr StgInfoTable -> IO StgInfoTable
peekItbl Ptr StgInfoTable
a0 = do
{-# LINE 44 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
let ptr :: Ptr StgInfoTable
ptr = Ptr StgInfoTable
a0
entry' :: Maybe a
entry' = Maybe a
forall a. Maybe a
Nothing
{-# LINE 47 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
ptrs' <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) ptr
{-# LINE 48 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
nptrs' <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) ptr
{-# LINE 49 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
tipe' <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) ptr
{-# LINE 50 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
srtlen' <- ((\hsc_ptr -> peekByteOff hsc_ptr 12)) a0
{-# LINE 51 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
return StgInfoTable
{ entry = entry'
, ptrs = ptrs'
, nptrs = nptrs'
, tipe = toEnum (fromIntegral (tipe' :: HalfWord))
, srtlen = srtlen'
, code = Nothing
}
pokeItbl :: Ptr StgInfoTable -> StgInfoTable -> IO ()
pokeItbl :: Ptr StgInfoTable -> StgInfoTable -> IO ()
pokeItbl Ptr StgInfoTable
a0 StgInfoTable
itbl = do
{-# LINE 65 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
((\Ptr StgInfoTable
hsc_ptr -> Ptr StgInfoTable -> Int -> HalfWord -> IO ()
forall b. Ptr b -> Int -> HalfWord -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr StgInfoTable
hsc_ptr Int
0)) Ptr StgInfoTable
a0 (StgInfoTable -> HalfWord
ptrs StgInfoTable
itbl)
{-# LINE 66 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 4)) a0 (nptrs itbl)
{-# LINE 67 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) a0 (toHalfWord (fromEnum (tipe itbl)))
{-# LINE 68 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 12)) a0 (srtlen itbl)
{-# LINE 69 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
{-# LINE 70 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
let code_offset = a0 `plusPtr` ((16))
{-# LINE 71 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
case code itbl of
Nothing -> return ()
Just (Left xs) -> pokeArray code_offset xs
Just (Right xs) -> pokeArray code_offset xs
{-# LINE 76 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}
where
toHalfWord :: Int -> HalfWord
toHalfWord :: Int -> HalfWord
toHalfWord Int
i = Int -> HalfWord
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
i
itblSize :: Int
itblSize :: Int
itblSize = ((Int
16))
{-# LINE 83 "libraries/ghc-internal/src/GHC/Internal/Heap/InfoTable.hsc" #-}