reflect 0.0.1

The "but I thought Rust doesn't have reflection?" memorial brand new way of defining procedural macros.
Documentation
use Array;
use Invoke;
use Push;
use Signature;
use Type;
use Value;
use ValueNode;

#[derive(Debug, Clone)]
pub struct Function {
    pub(crate) parent: Option<Type>,
    pub(crate) name: String,
    pub(crate) sig: Signature,
}

impl Function {
    pub fn invoke<'a, Args: Array<Value<'a>>>(&self, args: Args) -> Value<'a> {
        let wip = args.first().function;
        let invoke = wip.invokes.borrow_mut().index_push(Invoke {
            function: self.clone(),
            args: args.to_vec().into_iter().map(|value| value.index).collect(),
        });
        let node = ValueNode::Invoke(invoke);
        Value {
            function: wip,
            index: wip.values.borrow_mut().index_push(node),
        }
    }
}