From afc4281e7f1d496972c079525799c8c336b69526 Mon Sep 17 00:00:00 2001 From: greg Date: Sun, 13 May 2018 17:32:41 -0700 Subject: [PATCH] Evaluate function arguments in context before applying them --- schala-lang/src/eval.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/schala-lang/src/eval.rs b/schala-lang/src/eval.rs index f9dd7c3..7979e9b 100644 --- a/schala-lang/src/eval.rs +++ b/schala-lang/src/eval.rs @@ -417,6 +417,7 @@ impl<'a> State<'a> { } let mut func_state = State { values: self.values.new_frame(name.map(|n| format!("{}", n))) }; for (param, val) in params.into_iter().zip(args.into_iter()) { + let val = func_state.expression(val)?; func_state.values.insert(param, ValueEntry::Binding { constant: true, val }); } // TODO figure out function return semantics @@ -531,4 +532,9 @@ mod eval_tests { fresh_env!("var a = 1; a = 2; a", "2"); fresh_env!(r#"("a", 1 + 2)"#, r#"("a", 3)"#); } + + fn function_eval() { + fresh_env!("fn oi(x) { x + 1 }; oi(4)", "5"); + fresh_env!("fn oi(x) { x + 1 }; oi(1+2)", "4"); + } }