miden_assembly/ast/instruction/
debug.rs1use core::fmt;
2
3use crate::ast::{ImmU8, ImmU16, ImmU32};
4
5#[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 TryFrom<DebugOptions> for vm_core::DebugOptions {
28 type Error = ();
29
30 fn try_from(options: DebugOptions) -> Result<Self, Self::Error> {
31 match options {
32 DebugOptions::StackAll => Ok(Self::StackAll),
33 DebugOptions::StackTop(ImmU8::Value(n)) => Ok(Self::StackTop(n.into_inner())),
34 DebugOptions::MemAll => Ok(Self::MemAll),
35 DebugOptions::MemInterval(ImmU32::Value(start), ImmU32::Value(end)) => {
36 Ok(Self::MemInterval(start.into_inner(), end.into_inner()))
37 },
38 DebugOptions::LocalInterval(ImmU16::Value(start), ImmU16::Value(end)) => {
39 let start = start.into_inner();
40 let end = end.into_inner();
41 Ok(Self::LocalInterval(start, end, end - start))
42 },
43 DebugOptions::AdvStackTop(ImmU16::Value(n)) => Ok(Self::AdvStackTop(n.into_inner())),
44 _ => Err(()),
45 }
46 }
47}
48
49impl fmt::Display for DebugOptions {
50 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
51 match self {
52 Self::StackAll => write!(f, "stack"),
53 Self::StackTop(n) => write!(f, "stack.{n}"),
54 Self::MemAll => write!(f, "mem"),
55 Self::MemInterval(n, m) => write!(f, "mem.{n}.{m}"),
56 Self::LocalAll => write!(f, "local"),
57 Self::LocalRangeFrom(start) => write!(f, "local.{start}"),
58 Self::LocalInterval(start, end) => {
59 write!(f, "local.{start}.{end}")
60 },
61 Self::AdvStackTop(n) => write!(f, "adv_stack.{n}"),
62 }
63 }
64}