use crate::ir::{Builder, Link, Node, Op, Owner, Parent, Root, Singleton};
use miden_diagnostics::{SourceSpan, Spanned};
#[derive(Default, Clone, PartialEq, Eq, Debug, Hash, Builder, Spanned)]
#[enum_wrapper(Root)]
pub struct Evaluator {
pub parameters: Vec<Vec<Link<Op>>>,
pub body: Link<Vec<Link<Op>>>,
pub _node: Singleton<Node>,
pub _owner: Singleton<Owner>,
#[span]
pub span: SourceSpan,
}
impl Evaluator {
pub fn create(
parameters: Vec<Vec<Link<Op>>>,
body: Vec<Link<Op>>,
span: SourceSpan,
) -> Link<Root> {
Root::Evaluator(Self {
parameters,
body: Link::new(body),
span,
..Default::default()
})
.into()
}
}
impl Parent for Evaluator {
type Child = Op;
fn children(&self) -> Link<Vec<Link<Self::Child>>> {
self.body.clone()
}
}