Skip to main content

DebugInfo

Struct DebugInfo 

Source
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>

Source

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.

Source

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>

Source

pub fn version(&self) -> u8

Get the version of this debug info instance

Source

pub fn strings(&self) -> &IndexVec<DebugStringIdx, Arc<str>>

Get access to the strings table in this debug info

Source

pub fn get_string(&self, idx: DebugStringIdx) -> Option<Arc<str>>

Gets a string by index.

Source

pub fn files(&self) -> &IndexVec<DebugFileIdx, DebugFileInfo>

Get access to the files table in this debug info

Source

pub fn get_file(&self, idx: DebugFileIdx) -> Option<&DebugFileInfo>

Gets a file by index.

Source

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.

Source

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.

Source

pub fn types(&self) -> &IndexVec<DebugTypeIdx, DebugTypeInfo>

Get access to the types table in this debug info

Source

pub fn get_type(&self, idx: DebugTypeIdx) -> Option<&DebugTypeInfo>

Gets a type by index.

Source

pub fn locations(&self) -> &IndexVec<DebugLocIdx, DebugLoc>

Get access to the locatinos table in this debug info

Source

pub fn get_location(&self, idx: DebugLocIdx) -> Option<Location>

Returns the deduplicated source locations referenced by assembly operation rows.

Source

pub fn error_messages(&self) -> &[DebugErrorMessage]

Get access to the error messages table in this debug info

Source

pub fn error_message(&self, err_code: u64) -> Option<Arc<str>>

Returns the assertion error message for err_code, if present.

Source

pub fn nodes(&self) -> &IndexVec<Src, SourceNode<Exec, Src>>

Returns source/debug occurrence nodes.

Source

pub fn roots(&self) -> &[Src]

Returns source/debug occurrence roots.

Source

pub fn source_node(&self, source_node: Src) -> Option<&SourceNode<Exec, Src>>

Returns a source/debug occurrence by ID.

Source

pub fn functions(&self) -> &[FunctionInfo<Src>]

Get access to the functions table in this debug info

Source

pub fn get_function(&self, idx: DebugFunctionIdx) -> Option<&FunctionInfo<Src>>

Gets the function info for idx

Source

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.

Source

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.

Source

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.

Source

pub fn asm_ops_for_source_node( &self, source_node: Src, ) -> impl Iterator<Item = &DebugSourceAsmOp>

Returns assembly operation rows for a source/debug occurrence.

Source

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.

Source

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.

Source

pub fn debug_vars_for_source_node( &self, source_node: Src, ) -> impl Iterator<Item = &DebugSourceVar>

Returns debug variable rows for a source/debug occurrence.

Source

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.

Source

pub fn inline_calls_for_source_node( &self, source_node: Src, ) -> impl Iterator<Item = &DebugSourceInlineCall>

Returns inline-call rows for a source/debug occurrence.

Source

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>

Source

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>

Source

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§

Source§

impl<Exec, Src> Clone for DebugInfo<Exec, Src>
where Exec: Idx + Clone, Src: Idx + Clone,

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<Exec, Src> Debug for DebugInfo<Exec, Src>
where Exec: Idx + Debug, Src: Idx + Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<Exec: Idx, Src: Idx> Default for DebugInfo<Exec, Src>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<Exec: Eq + Idx, Src: Eq + Idx> Eq for DebugInfo<Exec, Src>

Source§

impl<Exec: Idx, Src: Idx> From<Box<DebugInfo<Exec, Src>>> for DebugInfoBuilder<Exec, Src>

Source§

fn from(debug_info: Box<DebugInfo<Exec, Src>>) -> Self

Converts to this type from the input type.
Source§

impl<Exec: Idx, Src: Idx> Index<DebugFileIdx> for DebugInfo<Exec, Src>

Source§

type Output = DebugFileInfo

The returned type after indexing.
Source§

fn index(&self, index: DebugFileIdx) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<Exec: Idx, Src: Idx> Index<DebugFunctionIdx> for DebugInfo<Exec, Src>

Source§

type Output = FunctionInfo<Src>

The returned type after indexing.
Source§

fn index(&self, index: DebugFunctionIdx) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<Exec: Idx, Src: Idx> Index<DebugLocIdx> for DebugInfo<Exec, Src>

Source§

type Output = DebugLoc

The returned type after indexing.
Source§

fn index(&self, index: DebugLocIdx) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<Exec: Idx, Src: Idx> Index<DebugStringIdx> for DebugInfo<Exec, Src>

Source§

type Output = Arc<str>

The returned type after indexing.
Source§

fn index(&self, index: DebugStringIdx) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<Exec: Idx, Src: Idx> Index<DebugTypeIdx> for DebugInfo<Exec, Src>

Source§

type Output = DebugTypeInfo

The returned type after indexing.
Source§

fn index(&self, index: DebugTypeIdx) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<Exec: Idx, Src: SourceNodeIdMarker> Index<Src> for DebugInfo<Exec, Src>

Source§

type Output = SourceNode<Exec, Src>

The returned type after indexing.
Source§

fn index(&self, index: Src) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<Exec: PartialEq + Idx, Src: PartialEq + Idx> PartialEq for DebugInfo<Exec, Src>

Source§

fn eq(&self, other: &DebugInfo<Exec, Src>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<Exec: PartialEq + Idx, Src: PartialEq + Idx> StructuralPartialEq for DebugInfo<Exec, Src>

Auto Trait Implementations§

§

impl<Exec, Src> Freeze for DebugInfo<Exec, Src>

§

impl<Exec, Src> RefUnwindSafe for DebugInfo<Exec, Src>

§

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>

§

impl<Exec, Src> UnwindSafe for DebugInfo<Exec, Src>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more