Reduce binop args before reducing full expr

This commit is contained in:
greg 2015-08-07 02:09:52 -07:00
parent c27c900e7f
commit 5c79563e53

View File

@ -56,8 +56,10 @@ fn reduce(evr: EvalResult) -> EvalResult {
match ast {
BinOp(op, lhs, rhs) => {
let result: AST = reduce_binop(*op, *lhs, *rhs);
(result, env)
let (reduced_lhs, new_env) = reduce((*lhs, env));
let (reduced_rhs, new_env2) = reduce((*rhs, new_env));
let result: AST = reduce_binop(*op, reduced_lhs, reduced_rhs);
(result, new_env2)
},
Name(name) => {
let result = match env.lookup_binding(&name) {
@ -124,3 +126,10 @@ fn reduce_binop(op: AST, lhs: AST, rhs: AST) -> AST {
_ => Null
}
}
#[cfg(test)]
mod test {
use super::*;
}