ghc-internal-9.1001.0: src/GHC/Internal/InfoProv.hs
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeApplications #-}
-----------------------------------------------------------------------------
-- |
-- Module : GHC.Internal.InfoProv
-- Copyright : (c) The University of Glasgow 2011
-- License : see libraries/base/LICENSE
--
-- Maintainer : ghc-devs@haskell.org
-- Stability : internal
-- Portability : non-portable (GHC Extensions)
--
-- Access to GHC's info-table provenance metadata.
--
-- /The API of this module is unstable and not meant to be consumed by the general public./
-- If you absolutely must depend on it, make sure to use a tight upper
-- bound, e.g., @base < 4.X@ rather than @base < 5@, because the interface can
-- change rapidly without much warning.
--
-- @since base-4.18.0.0
-----------------------------------------------------------------------------
module GHC.Internal.InfoProv
( InfoProv(..)
, ipLoc
, whereFrom
-- * Internals
, InfoProvEnt
, ipeProv
, peekInfoProv
) where
import GHC.Internal.Base
import GHC.Internal.InfoProv.Types
-- | Get information about where a value originated from.
-- This information is stored statically in a binary when @-finfo-table-map@ is
-- enabled. The source positions will be greatly improved by also enabled debug
-- information with @-g3@. Finally you can enable @-fdistinct-constructor-tables@ to
-- get more precise information about data constructor allocations.
--
-- The information is collect by looking at the info table address of a specific closure and
-- then consulting a specially generated map (by @-finfo-table-map@) to find out where we think
-- the best source position to describe that info table arose from.
--
-- @since base-4.16.0.0
whereFrom :: a -> IO (Maybe InfoProv)
whereFrom obj = getIPE obj Nothing $ \p ->
Just `fmap` peekInfoProv (ipeProv p)