pub struct DebugInfo<Exec: Idx, Src: Idx> { /* private fields */ }Expand description
Represents debug information bound to a pending/finalized miden_core::mast::MastForest.
This includes all debug information needed for source-level debugging, and recovery of program state during execution (such as the types of local variables in the source program, and their location in memory or on the operand stack).
Implementations§
Source§impl DebugInfo<MastNodeId, DebugSourceNodeId>
impl DebugInfo<MastNodeId, DebugSourceNodeId>
Sourcepub fn read_from_unmetered<R: ByteReader>(
source: &mut R,
) -> Result<Self, DeserializationError>
pub fn read_from_unmetered<R: ByteReader>( source: &mut R, ) -> Result<Self, DeserializationError>
Reads package debug information without the fixed resource limits enforced by
Self::read_from.
Use this for data from a trusted producer or in analysis tooling where the caller accepts
its memory and processing costs. This method still checks the wire format and honors the
reader’s remaining input and allocation budget. Use Self::read_from for potentially
adversarial input with the standard fixed limits.
Sourcepub fn read_from_bytes_unmetered(
bytes: &[u8],
) -> Result<Self, DeserializationError>
pub fn read_from_bytes_unmetered( bytes: &[u8], ) -> Result<Self, DeserializationError>
Reads package debug information from bytes without the fixed resource limits enforced by
Self::read_from_bytes.
Use this only when the caller accepts the memory and processing costs of the encoded data.
The wire-format checks described by Self::read_from_unmetered still apply. Use
Self::read_from_bytes for potentially adversarial input with the standard fixed limits.
Source§impl<Exec: Idx, Src: Idx> DebugInfo<Exec, Src>
impl<Exec: Idx, Src: Idx> DebugInfo<Exec, Src>
Sourcepub fn strings(&self) -> &IndexVec<DebugStringIdx, Arc<str>>
pub fn strings(&self) -> &IndexVec<DebugStringIdx, Arc<str>>
Get access to the strings table in this debug info
Sourcepub fn get_string(&self, idx: DebugStringIdx) -> Option<Arc<str>>
pub fn get_string(&self, idx: DebugStringIdx) -> Option<Arc<str>>
Gets a string by index.
Sourcepub fn files(&self) -> &IndexVec<DebugFileIdx, DebugFileInfo>
pub fn files(&self) -> &IndexVec<DebugFileIdx, DebugFileInfo>
Get access to the files table in this debug info
Sourcepub fn get_file(&self, idx: DebugFileIdx) -> Option<&DebugFileInfo>
pub fn get_file(&self, idx: DebugFileIdx) -> Option<&DebugFileInfo>
Gets a file by index.
Sourcepub fn get_file_index_by_uri(&self, uri: &Uri) -> Option<DebugFileIdx>
pub fn get_file_index_by_uri(&self, uri: &Uri) -> Option<DebugFileIdx>
Gets the DebugFileIdx for a source file whose URI is uri, if it is recorded in the
debug info built so far.
Sourcepub fn trim_file_paths(&mut self, trimmer: impl FnMut(&str) -> Option<Arc<str>>)
pub fn trim_file_paths(&mut self, trimmer: impl FnMut(&str) -> Option<Arc<str>>)
Apply trimmer to every distinct file path referenced by the file table.
If trimmer returns None, the file path is left unmodified. Otherwise, the returned path
is interned and the corresponding file records are retargeted to it. Other debug records
which reference the original string are left unchanged.
Sourcepub fn types(&self) -> &IndexVec<DebugTypeIdx, DebugTypeInfo>
pub fn types(&self) -> &IndexVec<DebugTypeIdx, DebugTypeInfo>
Get access to the types table in this debug info
Sourcepub fn get_type(&self, idx: DebugTypeIdx) -> Option<&DebugTypeInfo>
pub fn get_type(&self, idx: DebugTypeIdx) -> Option<&DebugTypeInfo>
Gets a type by index.
Sourcepub fn locations(&self) -> &IndexVec<DebugLocIdx, DebugLoc>
pub fn locations(&self) -> &IndexVec<DebugLocIdx, DebugLoc>
Get access to the locatinos table in this debug info
Sourcepub fn get_location(&self, idx: DebugLocIdx) -> Option<Location>
pub fn get_location(&self, idx: DebugLocIdx) -> Option<Location>
Returns the deduplicated source locations referenced by assembly operation rows.
Sourcepub fn error_messages(&self) -> &[DebugErrorMessage]
pub fn error_messages(&self) -> &[DebugErrorMessage]
Get access to the error messages table in this debug info
Sourcepub fn error_message(&self, err_code: u64) -> Option<Arc<str>>
pub fn error_message(&self, err_code: u64) -> Option<Arc<str>>
Returns the assertion error message for err_code, if present.
Sourcepub fn nodes(&self) -> &IndexVec<Src, SourceNode<Exec, Src>>
pub fn nodes(&self) -> &IndexVec<Src, SourceNode<Exec, Src>>
Returns source/debug occurrence nodes.
Sourcepub fn source_node(&self, source_node: Src) -> Option<&SourceNode<Exec, Src>>
pub fn source_node(&self, source_node: Src) -> Option<&SourceNode<Exec, Src>>
Returns a source/debug occurrence by ID.
Sourcepub fn functions(&self) -> &[FunctionInfo<Src>]
pub fn functions(&self) -> &[FunctionInfo<Src>]
Get access to the functions table in this debug info
Sourcepub fn get_function(&self, idx: DebugFunctionIdx) -> Option<&FunctionInfo<Src>>
pub fn get_function(&self, idx: DebugFunctionIdx) -> Option<&FunctionInfo<Src>>
Gets the function info for idx
Sourcepub fn source_roots_for_exec_node(
&self,
exec_node: Exec,
) -> impl Iterator<Item = (Src, &SourceNode<Exec, Src>)>
pub fn source_roots_for_exec_node( &self, exec_node: Exec, ) -> impl Iterator<Item = (Src, &SourceNode<Exec, Src>)>
Returns all source/debug roots that point at exec_node.
Sourcepub fn unique_source_root_for_exec_node(
&self,
exec_node: Exec,
) -> Result<Option<Src>, SourceGraphLookupError<Exec, Src>>
pub fn unique_source_root_for_exec_node( &self, exec_node: Exec, ) -> Result<Option<Src>, SourceGraphLookupError<Exec, Src>>
Returns the unique source/debug root that points at exec_node.
Sourcepub fn child_source_node(
&self,
parent: Src,
child_index: usize,
) -> Result<Option<(Src, &SourceNode<Exec, Src>)>, SourceGraphLookupError<Exec, Src>>
pub fn child_source_node( &self, parent: Src, child_index: usize, ) -> Result<Option<(Src, &SourceNode<Exec, Src>)>, SourceGraphLookupError<Exec, Src>>
Returns parent’s source/debug child at child_index, if present.
Sourcepub fn asm_ops_for_source_node(
&self,
source_node: Src,
) -> impl Iterator<Item = &DebugSourceAsmOp>
pub fn asm_ops_for_source_node( &self, source_node: Src, ) -> impl Iterator<Item = &DebugSourceAsmOp>
Returns assembly operation rows for a source/debug occurrence.
Sourcepub fn first_asm_op_for_source_node(
&self,
source_node: Src,
) -> Option<&DebugSourceAsmOp>
pub fn first_asm_op_for_source_node( &self, source_node: Src, ) -> Option<&DebugSourceAsmOp>
Returns the first assembly operation row for source_node, if present.
Sourcepub fn asm_op_for_operation(
&self,
source_node: Src,
op_idx: u32,
) -> Option<&DebugSourceAsmOp>
pub fn asm_op_for_operation( &self, source_node: Src, op_idx: u32, ) -> Option<&DebugSourceAsmOp>
Returns the assembly operation row for source_node at or before op_idx, if present.
Sourcepub fn debug_vars_for_source_node(
&self,
source_node: Src,
) -> impl Iterator<Item = &DebugSourceVar>
pub fn debug_vars_for_source_node( &self, source_node: Src, ) -> impl Iterator<Item = &DebugSourceVar>
Returns debug variable rows for a source/debug occurrence.
Sourcepub fn debug_vars_for_operation(
&self,
source_node: Src,
op_idx: u32,
) -> impl Iterator<Item = &DebugSourceVar>
pub fn debug_vars_for_operation( &self, source_node: Src, op_idx: u32, ) -> impl Iterator<Item = &DebugSourceVar>
Returns debug variable rows for source_node at op_idx.
Sourcepub fn inline_calls_for_source_node(
&self,
source_node: Src,
) -> impl Iterator<Item = &DebugSourceInlineCall>
pub fn inline_calls_for_source_node( &self, source_node: Src, ) -> impl Iterator<Item = &DebugSourceInlineCall>
Returns inline-call rows for a source/debug occurrence.
Sourcepub fn inline_calls_for_operation(
&self,
source_node: Src,
op_idx: u32,
) -> impl Iterator<Item = &DebugSourceInlineCall>
pub fn inline_calls_for_operation( &self, source_node: Src, op_idx: u32, ) -> impl Iterator<Item = &DebugSourceInlineCall>
Returns inline-call rows for source_node at op_idx.
Source§impl<Exec: Idx, Src: Idx> DebugInfo<Exec, Src>
impl<Exec: Idx, Src: Idx> DebugInfo<Exec, Src>
Sourcepub fn merge_tables_into<TargetExec: Idx, TargetSrc: Idx>(
&self,
target: &mut DebugInfoBuilder<TargetExec, TargetSrc>,
) -> Result<DebugInfoTableRemapping, DebugInfoTableRemapError>
pub fn merge_tables_into<TargetExec: Idx, TargetSrc: Idx>( &self, target: &mut DebugInfoBuilder<TargetExec, TargetSrc>, ) -> Result<DebugInfoTableRemapping, DebugInfoTableRemapError>
Imports the shared string, type, file, location, and error-message tables into target.
The returned map translates every source table index to its destination index. Type rows are reserved as a complete batch before their payloads are rewritten, which preserves forward and cyclic references. Functions are imported with their source-node associations cleared; callers which also import source nodes must restore those associations after establishing the source-node mapping.
Source§impl<Src: SourceNodeIdMarker> DebugInfo<MastNodeId, Src>
impl<Src: SourceNodeIdMarker> DebugInfo<MastNodeId, Src>
Sourcepub fn merge_source_debug<'a>(
inputs: impl IntoIterator<Item = (usize, &'a Self)>,
root_map: &MastForestRootMap,
) -> Result<Self, DebugInfoMergeError<MastNodeId, Src>>where
Src: 'a,
pub fn merge_source_debug<'a>(
inputs: impl IntoIterator<Item = (usize, &'a Self)>,
root_map: &MastForestRootMap,
) -> Result<Self, DebugInfoMergeError<MastNodeId, Src>>where
Src: 'a,
Merges package-owned source/debug metadata after a miden_core::mast::MastForest merge.
miden_core::mast::MastForest::merge remains execution-only. This helper applies the
returned node mappings to package source/debug sections so callers can merge
(MastForest, PackageDebugInfo) pairs without reattaching debug metadata to the forest.
This also merges the type, source-file, and function tables referenced by source-map inline-call rows.
Trait Implementations§
impl<Exec: Eq + Idx, Src: Eq + Idx> Eq for DebugInfo<Exec, Src>
Source§impl<Exec: Idx, Src: Idx> Index<DebugFileIdx> for DebugInfo<Exec, Src>
impl<Exec: Idx, Src: Idx> Index<DebugFileIdx> for DebugInfo<Exec, Src>
Source§type Output = DebugFileInfo
type Output = DebugFileInfo
Source§impl<Exec: Idx, Src: Idx> Index<DebugFunctionIdx> for DebugInfo<Exec, Src>
impl<Exec: Idx, Src: Idx> Index<DebugFunctionIdx> for DebugInfo<Exec, Src>
Source§type Output = FunctionInfo<Src>
type Output = FunctionInfo<Src>
Source§impl<Exec: Idx, Src: Idx> Index<DebugTypeIdx> for DebugInfo<Exec, Src>
impl<Exec: Idx, Src: Idx> Index<DebugTypeIdx> for DebugInfo<Exec, Src>
Source§type Output = DebugTypeInfo
type Output = DebugTypeInfo
impl<Exec: PartialEq + Idx, Src: PartialEq + Idx> StructuralPartialEq for DebugInfo<Exec, Src>
Auto Trait Implementations§
impl<Exec, Src> Freeze for DebugInfo<Exec, Src>where
IndexVec<DebugFunctionIdx, FunctionInfo<Src>>: Freeze,
IndexVec<Src, SourceNode<Exec, Src>>: Freeze,
Vec<Src>: Freeze,
impl<Exec, Src> RefUnwindSafe for DebugInfo<Exec, Src>where
IndexVec<DebugFunctionIdx, FunctionInfo<Src>>: RefUnwindSafe,
IndexVec<Src, SourceNode<Exec, Src>>: RefUnwindSafe,
Vec<Src>: RefUnwindSafe,
impl<Exec, Src> Send for DebugInfo<Exec, Src>where
IndexVec<DebugFunctionIdx, FunctionInfo<Src>>: Send,
IndexVec<Src, SourceNode<Exec, Src>>: Send,
Vec<Src>: Send,
impl<Exec, Src> Sync for DebugInfo<Exec, Src>where
IndexVec<DebugFunctionIdx, FunctionInfo<Src>>: Sync,
IndexVec<Src, SourceNode<Exec, Src>>: Sync,
Vec<Src>: Sync,
impl<Exec, Src> Unpin for DebugInfo<Exec, Src>where
IndexVec<DebugFunctionIdx, FunctionInfo<Src>>: Unpin,
IndexVec<Src, SourceNode<Exec, Src>>: Unpin,
Vec<Src>: Unpin,
impl<Exec, Src> UnsafeUnpin for DebugInfo<Exec, Src>where
IndexVec<DebugFunctionIdx, FunctionInfo<Src>>: UnsafeUnpin,
IndexVec<Src, SourceNode<Exec, Src>>: UnsafeUnpin,
Vec<Src>: UnsafeUnpin,
impl<Exec, Src> UnwindSafe for DebugInfo<Exec, Src>where
IndexVec<DebugFunctionIdx, FunctionInfo<Src>>: UnwindSafe,
IndexVec<Src, SourceNode<Exec, Src>>: UnwindSafe,
Vec<Src>: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more