stutter-rs 0.1.1

A lisp made by Jacob Wunder to learn how to make programming languages
macro_rules! run_program {
    ($program:expr) => {
        let mut stack = eval::types::CallStack::new();
        let parse_result = debug_expr($program);

        println!("{}\n{}\n", "Program:".cyan(), String::from_utf8($program.to_vec()).unwrap());

        println!("{}\n{:?}", "Parse Result:".cyan(), parse_result);

        if let Ok((_a, b)) = parse_result {
            println!("\n{}", "Evaluating:".cyan());
            eval::eval::eval(b, &mut stack);
            println!("\n{}\n{:?}", "Returns:".cyan(), stack.pop_return());
        }

        println!("{}", DASHES);
    };
}

macro_rules! lisp_tests {
    ($($name:ident: $value:expr,)*) => {
    $(
        #[test]
        fn $name() {
            let (program, expected) = $value;

            let mut stack = eval::types::CallStack::new();
            let parse_result = debug_expr(program);

            if let Ok((_a, b)) = parse_result {
                eval::eval::eval(b, &mut stack);
            }

            assert_eq!(stack.pop_return(), expected);
        }
    )*
    }
}