use crate::runtime::{Object, ObjectPtr};
use tvm_macros::Object;
macro_rules! define_node {
($name:ident, $ref:expr, $typekey:expr; $node:ident { $($id:ident : $t:ty),*}) => {
#[repr(C)]
#[derive(Object, Debug)]
#[ref_name = $ref]
#[type_key = $typekey]
pub struct $node {
base: Object,
$(pub $id : $t),*
}
impl $name {
pub fn new($($id : $t,)*) -> $name {
let base = Object::base::<$node>();
let node = $node { base, $($id),* };
$name(Some(ObjectPtr::new(node)))
}
}
}
}
define_node!(ConstIntBound, "ConstIntBound", "arith.ConstIntBound";
ConstIntBoundNode { min_value: i64, max_value: i64 });