From 33f2e1eb161e03198e64a20b97b990e019b1f2df Mon Sep 17 00:00:00 2001 From: Aidan Date: Wed, 31 Mar 2021 23:01:22 -0700 Subject: [PATCH] more untested code --- src/eval.rs | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/eval.rs b/src/eval.rs index 62dcf0c..b8840f5 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -52,6 +52,34 @@ fn eval_inner( * (and set new.cdr to result) * 5. return new ast */ + let ret: Ast; + let mret = ret.clone().borrow_mut(); + let ret_inner = ast.clone().borrow_mut(); + mret.car = process_ctr( + ret_inner.car, + vars.clone(), + funcs.clone(), + sym_loose, + first_item + ); + + if let Ctr::Seg(s) = ret_inner.cdr { + mret.cdr = process_ctr( + ret_inner.cdr, + vars.clone(), + funcs.clone(), + sym_loose, + false + ); + } else { + mret.cdr = process_ctr( + ret_inner.cdr, + vars.clone(), + funcs.clone(), + sym_loose, + first_item + ); + } } fn process_ctr( @@ -73,13 +101,15 @@ fn process_ctr( Symbol(token) => { let mut tok = token; if let Some(s) = vt.borrow().get(token) { - if first_item { - if let String(t) = s { + // perhaps allow variable expansion here + // as a primitive stand in for function aliasing + if first_item && let String(t) = s { tok = t; - } // else improper var type so ignore } else { // TODO: DEEP COPY. return } + + // else call function } else if !first_item && !sym_loose { return Err("variable not found") }