From c465c974d4d1fb028ff3a30e39dcfc5ccf183fba Mon Sep 17 00:00:00 2001 From: Aidan Hahn Date: Sun, 14 Nov 2021 22:55:52 -0800 Subject: [PATCH] var export works now lol --- src/vars.rs | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/vars.rs b/src/vars.rs index a5a15f7..f84056b 100644 --- a/src/vars.rs +++ b/src/vars.rs @@ -19,6 +19,7 @@ use std::cell::RefCell; use std::rc::Rc; use std::collections::HashMap; use crate::segment::{Ctr, Ast}; +use crate::eval::eval; use crate::func::{Function, Operation, Args, FTable}; /* Mapping between a string token and a tree of Segments * The string token can be found in any Ctr::Symbol value @@ -45,18 +46,28 @@ pub fn get_export(env_cfg: bool) -> Function { eval_lazy: true, args: Args::Lazy(2), function: Operation::Internal( - |a: Ast, b: Rc>, _c: Rc>| -> Ctr { + |a: Ast, b: Rc>, c: Rc>| -> Ctr { let inner = a.borrow_mut(); match &inner.car { Ctr::Symbol(identifier) => { - match eval(inner.cdr) { - Ctr::Seg(val) => { - let val_tmp = val.borrow().clone(); - define(b, identifier.to_string(), Rc::new(val_tmp.car)); + match &inner.cdr { + Ctr::Seg(tree) => { + if let Ok(seg) = eval(tree.clone(), b.clone(), c.clone(), false) { + match seg { + Ctr::Seg(val) => { + let val_tmp = val.borrow().clone(); + define(b, identifier.to_string(), Rc::new(val_tmp.car)); + }, + + _ => { + eprintln!("impossible args to export"); + } + } + } }, _ => { - eprintln!("impossible args to export"); + eprintln!("args not in standard form"); } } return Ctr::None;