Browse Source

eval_ast on alloc

ada 5 years ago
parent
commit
3e502427af
1 changed files with 7 additions and 4 deletions
  1. 7 4
      lisp/lisp.rs

+ 7 - 4
lisp/lisp.rs

@@ -312,10 +312,10 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet {
                     Sym(ref a0sym) if a0sym == "alloc-input" => Ok(MalVal::Nil),
                     Sym(ref a0sym) if a0sym == "alloc" => {
                         let a1 = l[1].clone();
-                        let value = eval(l[2].clone(), env.clone());
-                        let result = eval(value.clone(), env.clone());
-                        println!("result {:?} \n value {:?}", result, value);
-                        env_set(&env, MalVal::Sym(a1.pr_str(false)), value)
+                        let value = eval(l[2].clone(), env.clone())?;
+                        let result = eval(value.clone(), env.clone())?;
+                        let symbol = MalVal::Sym(a1.pr_str(false));
+                        env_set(&env, symbol,  result)
                     }
                     //Sym(ref a0sym) if a0sym == "verify" => {
                     Sym(ref a0sym) if a0sym == "enforce" => {
@@ -324,6 +324,9 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet {
                         let right = l[2].clone();
                         let out = l[3].clone();
                         println!("left {:?} \n  right {:?} \n out {:?}", left, right, out);
+                        // let left_eval =eval(left.clone(), env.clone())?;
+                        let left_eval = eval_ast(&left.clone(), &env.clone())?;
+                       println!("{:?}", left_eval); 
                         Ok(Nil)
                     }
                     _ => match eval_ast(&ast, &env)? {