| Safe Haskell | Ignore |
|---|---|
| Language | GHC2021 |
GHC.ByteCode.Breakpoints
Description
Breakpoint information constructed during ByteCode generation.
Specifically, code-generation breakpoints are referred to as "internal
breakpoints", the internal breakpoint data for a module is stored in
InternalModBreaks, and is uniquely identified at runtime by an
InternalBreakpointId.
See Note [ModBreaks vs InternalModBreaks] and Note [Breakpoint identifiers]
Synopsis
- data InternalModBreaks = InternalModBreaks {}
- data CgBreakInfo = CgBreakInfo {
- cgb_tyvars :: ![IfaceTvBndr]
- cgb_vars :: ![Maybe (IfaceIdBndr, Word)]
- cgb_resty :: !IfaceType
- cgb_tick_id :: !(Either InternalBreakLoc BreakpointId)
- mkInternalModBreaks :: Module -> IntMap CgBreakInfo -> ModBreaks -> InternalModBreaks
- imodBreaks_module :: InternalModBreaks -> Module
- data InternalBreakpointId = InternalBreakpointId {}
- type BreakInfoIndex = Int
- newtype InternalBreakLoc = InternalBreakLoc {}
- getInternalBreak :: InternalBreakpointId -> InternalModBreaks -> CgBreakInfo
- getBreakLoc :: (Module -> IO ModBreaks) -> InternalBreakpointId -> InternalModBreaks -> IO SrcSpan
- getBreakVars :: (Module -> IO ModBreaks) -> InternalBreakpointId -> InternalModBreaks -> IO [OccName]
- getBreakDecls :: (Module -> IO ModBreaks) -> InternalBreakpointId -> InternalModBreaks -> IO [String]
- getBreakCCS :: (Module -> IO ModBreaks) -> InternalBreakpointId -> InternalModBreaks -> IO (String, String)
- getBreakSourceId :: InternalBreakpointId -> InternalModBreaks -> BreakpointId
- getBreakSourceMod :: InternalBreakpointId -> InternalModBreaks -> Module
- seqInternalModBreaks :: InternalModBreaks -> ()
Internal Mod Breaks
data InternalModBreaks #
Internal mod breaks store the runtime-relevant information of breakpoints.
Importantly, it maps InternalBreakpointIds to CgBreakInfo.
InternalModBreaks are constructed during bytecode generation and stored in
CompiledByteCode afterwards.
Constructors
| InternalModBreaks | |
Fields
| |
data CgBreakInfo #
Information about a breakpoint that we know at code-generation time
In order to be used, this needs to be hydrated relative to the current HscEnv by
hydrateCgBreakInfo. Everything here can be fully forced and that's critical for
preventing space leaks (see #22530)
Constructors
| CgBreakInfo | |
Fields
| |
Instances
| Outputable CgBreakInfo # | |
Defined in GHC.ByteCode.Breakpoints Methods ppr :: CgBreakInfo -> SDoc # | |
mkInternalModBreaks :: Module -> IntMap CgBreakInfo -> ModBreaks -> InternalModBreaks #
Construct an InternalModBreaks.
INVARIANT: The given ModBreaks correspond to the same module as this
InternalModBreaks module (the first argument) and its breakpoint infos
(the IntMap CgBreakInfo argument)
imodBreaks_module :: InternalModBreaks -> Module #
Get the module to which these InternalModBreaks correspond
Internal breakpoint identifier
data InternalBreakpointId #
Internal breakpoint identifier
Indexes into the structures in the produced during ByteCode generation.
See Note [Breakpoint identifiers]InternalModBreaks
Constructors
| InternalBreakpointId | |
Fields
| |
Instances
| NFData InternalBreakpointId # | |
Defined in GHC.ByteCode.Breakpoints Methods rnf :: InternalBreakpointId -> () # | |
| Outputable InternalBreakpointId # | |
Defined in GHC.ByteCode.Breakpoints Methods ppr :: InternalBreakpointId -> SDoc # | |
| Eq InternalBreakpointId # | |
Defined in GHC.ByteCode.Breakpoints Methods (==) :: InternalBreakpointId -> InternalBreakpointId -> Bool # (/=) :: InternalBreakpointId -> InternalBreakpointId -> Bool # | |
| Ord InternalBreakpointId # | |
Defined in GHC.ByteCode.Breakpoints Methods compare :: InternalBreakpointId -> InternalBreakpointId -> Ordering # (<) :: InternalBreakpointId -> InternalBreakpointId -> Bool # (<=) :: InternalBreakpointId -> InternalBreakpointId -> Bool # (>) :: InternalBreakpointId -> InternalBreakpointId -> Bool # (>=) :: InternalBreakpointId -> InternalBreakpointId -> Bool # max :: InternalBreakpointId -> InternalBreakpointId -> InternalBreakpointId # min :: InternalBreakpointId -> InternalBreakpointId -> InternalBreakpointId # | |
type BreakInfoIndex = Int #
Internal breakpoint info index
newtype InternalBreakLoc #
Breakpoints created during code generation don't have a source-level tick location. Instead, we re-use an existing one.
Constructors
| InternalBreakLoc | |
Fields | |
Instances
| NFData InternalBreakLoc # | |
Defined in GHC.ByteCode.Breakpoints Methods rnf :: InternalBreakLoc -> () # | |
| Outputable InternalBreakLoc # | |
Defined in GHC.ByteCode.Breakpoints Methods ppr :: InternalBreakLoc -> SDoc # | |
| Eq InternalBreakLoc # | |
Defined in GHC.ByteCode.Breakpoints Methods (==) :: InternalBreakLoc -> InternalBreakLoc -> Bool # (/=) :: InternalBreakLoc -> InternalBreakLoc -> Bool # | |
Operations
Internal-level operations
getInternalBreak :: InternalBreakpointId -> InternalModBreaks -> CgBreakInfo #
Get an internal breakpoint info by InternalBreakpointId
Source-level information operations
getBreakLoc :: (Module -> IO ModBreaks) -> InternalBreakpointId -> InternalModBreaks -> IO SrcSpan #
Get the source span for this breakpoint
getBreakVars :: (Module -> IO ModBreaks) -> InternalBreakpointId -> InternalModBreaks -> IO [OccName] #
Get the vars for this breakpoint
getBreakDecls :: (Module -> IO ModBreaks) -> InternalBreakpointId -> InternalModBreaks -> IO [String] #
Get the decls for this breakpoint
getBreakCCS :: (Module -> IO ModBreaks) -> InternalBreakpointId -> InternalModBreaks -> IO (String, String) #
Get the decls for this breakpoint
getBreakSourceId :: InternalBreakpointId -> InternalModBreaks -> BreakpointId #
Get the source module and tick index for this breakpoint
(as opposed to the module where this breakpoint occurs, which is in InternalBreakpointId)
getBreakSourceMod :: InternalBreakpointId -> InternalModBreaks -> Module #
Get the source module for this breakpoint (where the breakpoint is defined)
Utils
seqInternalModBreaks :: InternalModBreaks -> () #
Fully force an InternalModBreaks value