[][src]Macro egg::enode

macro_rules! enode {
    ($e:expr) => { ... };
    ($e:expr, $($child:expr),*$(,)?) => { ... };
}

Utility macro to create an ENode.

Basically enode!(op, arg1, arg2, ...) desugars to ENode::new(op.into(), vec![arg1, arg2, ...]). Note the conversion on op.

define_language! {
    enum SimpleLanguage {
        Num(i32),
        Add = "+",
        Mul = "*",
    }
}

use SimpleLanguage::*;

let mut egraph: EGraph<SimpleLanguage, ()> = Default::default();
let one = egraph.add(enode!(Num(1)));
let two = egraph.add(enode!(Num(2)));

let three = egraph.add(enode!(Add, one, two));
let three_manual = egraph.add(ENode::new(Add, vec![one, two]));
assert_eq!(three, three_manual);