pub struct LoopNode { /* private fields */ }
Expand description
A Loop node defines condition-controlled iterative execution. When the VM encounters a Loop node, it will keep executing the body of the loop as long as the top of the stack is `1``.
The loop is exited when at the end of executing the loop body the top of the stack is 0``. If the top of the stack is neither
0nor
1` when the condition is checked, the execution
fails.
Implementations§
Source§impl LoopNode
Constructors
impl LoopNode
Constructors
Sourcepub fn new(
body: MastNodeId,
mast_forest: &MastForest,
) -> Result<Self, MastForestError>
pub fn new( body: MastNodeId, mast_forest: &MastForest, ) -> Result<Self, MastForestError>
Returns a new LoopNode
instantiated with the specified body node.
Sourcepub fn new_unsafe(body: MastNodeId, digest: Word) -> Self
pub fn new_unsafe(body: MastNodeId, digest: Word) -> Self
Returns a new LoopNode
from values that are assumed to be correct.
Should only be used when the source of the inputs is trusted (e.g. deserialization).
Trait Implementations§
Source§impl MastNodeErrorContext for LoopNode
impl MastNodeErrorContext for LoopNode
Source§fn decorators(&self) -> impl Iterator<Item = (usize, DecoratorId)>
fn decorators(&self) -> impl Iterator<Item = (usize, DecoratorId)>
Source§fn get_assembly_op<'m>(
&self,
mast_forest: &'m MastForest,
target_op_idx: Option<usize>,
) -> Option<&'m AssemblyOp>
fn get_assembly_op<'m>( &self, mast_forest: &'m MastForest, target_op_idx: Option<usize>, ) -> Option<&'m AssemblyOp>
AssemblyOp
associated with this node and operation (if provided), if any. Read moreSource§impl MastNodeExt for LoopNode
impl MastNodeExt for LoopNode
Source§fn digest(&self) -> Word
fn digest(&self) -> Word
Returns a commitment to this Loop node.
The commitment is computed as a hash of the loop body and an empty word ([ZERO; 4]) in the domain defined by Self::DOMAIN - i..e,:
Hasher::merge_in_domain(&[body_digest, Word::default()], LoopNode::DOMAIN);
Source§fn before_enter(&self) -> &[DecoratorId]
fn before_enter(&self) -> &[DecoratorId]
Returns the decorators to be executed before this node is executed.
Source§fn after_exit(&self) -> &[DecoratorId]
fn after_exit(&self) -> &[DecoratorId]
Returns the decorators to be executed after this node is executed.
Source§fn append_before_enter(&mut self, decorator_ids: &[DecoratorId])
fn append_before_enter(&mut self, decorator_ids: &[DecoratorId])
Sets the list of decorators to be executed before this node.
Source§fn append_after_exit(&mut self, decorator_ids: &[DecoratorId])
fn append_after_exit(&mut self, decorator_ids: &[DecoratorId])
Sets the list of decorators to be executed after this node.
Source§fn remove_decorators(&mut self)
fn remove_decorators(&mut self)
Removes all decorators from this node.
Source§fn to_display<'a>(
&'a self,
mast_forest: &'a MastForest,
) -> Box<dyn Display + 'a>
fn to_display<'a>( &'a self, mast_forest: &'a MastForest, ) -> Box<dyn Display + 'a>
Source§fn to_pretty_print<'a>(
&'a self,
mast_forest: &'a MastForest,
) -> Box<dyn PrettyPrint + 'a>
fn to_pretty_print<'a>( &'a self, mast_forest: &'a MastForest, ) -> Box<dyn PrettyPrint + 'a>
Source§fn remap_children(&self, remapping: &Remapping) -> Self
fn remap_children(&self, remapping: &Remapping) -> Self
Remapping
.