Skip to main content

miden_assembly_syntax/ast/instruction/
advice.rs

1use core::fmt;
2
3use miden_core::events::SystemEvent;
4
5// SYSTEM EVENT NODE
6// ================================================================================================
7
8/// Instructions which inject data into the advice provider.
9///
10/// These instructions can be used to perform two broad sets of operations:
11/// - Push new data onto the advice stack.
12/// - Insert new data into the advice map.
13#[derive(Clone, PartialEq, Eq, Debug)]
14pub enum SystemEventNode {
15    PushMapVal,
16    PushMapValCount,
17    PushMapValN0,
18    PushMapValN4,
19    PushMapValN8,
20    HasMapKey,
21    PushMtNode,
22    InsertMem,
23    InsertHdword,
24    InsertHdwordWithDomain,
25    InsertHqword,
26    InsertHperm,
27    DeferredRegister,
28    DeferredRegisterData,
29    DeferredEvaluate,
30    DeferredEvaluateTag,
31    DeferredEvaluatePayload,
32}
33
34impl From<&SystemEventNode> for SystemEvent {
35    fn from(value: &SystemEventNode) -> Self {
36        use SystemEventNode::*;
37        match value {
38            PushMapVal => Self::MapValueToStack,
39            PushMapValCount => Self::MapValueCountToStack,
40            PushMapValN0 => Self::MapValueToStackN0,
41            PushMapValN4 => Self::MapValueToStackN4,
42            PushMapValN8 => Self::MapValueToStackN8,
43            HasMapKey => Self::HasMapKey,
44            PushMtNode => Self::MerkleNodeToStack,
45            InsertMem => Self::MemToMap,
46            InsertHdword => Self::HdwordToMap,
47            InsertHdwordWithDomain => Self::HdwordToMapWithDomain,
48            InsertHqword => Self::HqwordToMap,
49            InsertHperm => Self::HpermToMap,
50            DeferredRegister => Self::DeferredRegister,
51            DeferredRegisterData => Self::DeferredRegisterData,
52            DeferredEvaluate => Self::DeferredEvaluate,
53            DeferredEvaluateTag => Self::DeferredEvaluateTag,
54            DeferredEvaluatePayload => Self::DeferredEvaluatePayload,
55        }
56    }
57}
58
59impl crate::prettier::PrettyPrint for SystemEventNode {
60    fn render(&self) -> crate::prettier::Document {
61        crate::prettier::display(self)
62    }
63}
64
65impl fmt::Display for SystemEventNode {
66    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
67        match self {
68            Self::PushMapVal => write!(f, "push_mapval"),
69            Self::PushMapValCount => write!(f, "push_mapval_count"),
70            Self::PushMapValN0 => write!(f, "push_mapvaln.0"),
71            Self::PushMapValN4 => write!(f, "push_mapvaln.4"),
72            Self::PushMapValN8 => write!(f, "push_mapvaln.8"),
73            Self::HasMapKey => write!(f, "has_mapkey"),
74            Self::PushMtNode => write!(f, "push_mtnode"),
75            Self::InsertMem => write!(f, "insert_mem"),
76            Self::InsertHdword => write!(f, "insert_hdword"),
77            Self::InsertHdwordWithDomain => write!(f, "insert_hdword_d"),
78            Self::InsertHqword => write!(f, "insert_hqword"),
79            Self::InsertHperm => writeln!(f, "insert_hperm"),
80            Self::DeferredRegister => write!(f, "register_deferred"),
81            Self::DeferredRegisterData => write!(f, "register_deferred_data"),
82            Self::DeferredEvaluate => write!(f, "evaluate_deferred"),
83            Self::DeferredEvaluateTag => write!(f, "evaluate_deferred_tag"),
84            Self::DeferredEvaluatePayload => write!(f, "evaluate_deferred_payload"),
85        }
86    }
87}