miden_assembly_syntax/ast/instruction/
debug.rs

1use core::fmt;
2
3use crate::ast::{ImmU8, ImmU16, ImmU32};
4
5// DEBUG OPTIONS
6// ================================================================================================
7
8/// A proxy for [miden_core::DebugOptions], but with [super::Immediate] values.
9#[derive(Clone, Debug, Eq, PartialEq)]
10pub enum DebugOptions {
11    StackAll,
12    StackTop(ImmU8),
13    MemAll,
14    MemInterval(ImmU32, ImmU32),
15    LocalInterval(ImmU16, ImmU16),
16    LocalRangeFrom(ImmU16),
17    LocalAll,
18    AdvStackTop(ImmU16),
19}
20
21impl crate::prettier::PrettyPrint for DebugOptions {
22    fn render(&self) -> crate::prettier::Document {
23        crate::prettier::display(self)
24    }
25}
26
27impl fmt::Display for DebugOptions {
28    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29        match self {
30            Self::StackAll => write!(f, "stack"),
31            Self::StackTop(n) => write!(f, "stack.{n}"),
32            Self::MemAll => write!(f, "mem"),
33            Self::MemInterval(n, m) => write!(f, "mem.{n}.{m}"),
34            Self::LocalAll => write!(f, "local"),
35            Self::LocalRangeFrom(start) => write!(f, "local.{start}"),
36            Self::LocalInterval(start, end) => {
37                write!(f, "local.{start}.{end}")
38            },
39            Self::AdvStackTop(n) => write!(f, "adv_stack.{n}"),
40        }
41    }
42}