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}
19
20impl crate::prettier::PrettyPrint for DebugOptions {
21 fn render(&self) -> crate::prettier::Document {
22 crate::prettier::display(self)
23 }
24}
25
26impl TryFrom<DebugOptions> for vm_core::DebugOptions {
27 type Error = ();
28
29 fn try_from(options: DebugOptions) -> Result<Self, Self::Error> {
30 match options {
31 DebugOptions::StackAll => Ok(Self::StackAll),
32 DebugOptions::StackTop(ImmU8::Value(n)) => Ok(Self::StackTop(n.into_inner())),
33 DebugOptions::MemAll => Ok(Self::MemAll),
34 DebugOptions::MemInterval(ImmU32::Value(start), ImmU32::Value(end)) => {
35 Ok(Self::MemInterval(start.into_inner(), end.into_inner()))
36 },
37 DebugOptions::LocalInterval(ImmU16::Value(start), ImmU16::Value(end)) => {
38 let start = start.into_inner();
39 let end = end.into_inner();
40 Ok(Self::LocalInterval(start, end, end - start))
41 },
42 _ => Err(()),
43 }
44 }
45}
46
47impl fmt::Display for DebugOptions {
48 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49 match self {
50 Self::StackAll => write!(f, "stack"),
51 Self::StackTop(n) => write!(f, "stack.{n}"),
52 Self::MemAll => write!(f, "mem"),
53 Self::MemInterval(n, m) => write!(f, "mem.{n}.{m}"),
54 Self::LocalAll => write!(f, "local"),
55 Self::LocalRangeFrom(start) => write!(f, "local.{start}"),
56 Self::LocalInterval(start, end) => {
57 write!(f, "local.{start}.{end}")
58 },
59 }
60 }
61}