From 12ed2f5c8e4c52cc47c384259d51595df6012ad6 Mon Sep 17 00:00:00 2001 From: greg Date: Mon, 19 Aug 2019 19:38:24 -0700 Subject: [PATCH] Pass symbol table reference to `to_repl` --- schala-lang/language/src/eval.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/schala-lang/language/src/eval.rs b/schala-lang/language/src/eval.rs index cb5fcca..8116400 100644 --- a/schala-lang/language/src/eval.rs +++ b/schala-lang/language/src/eval.rs @@ -70,12 +70,12 @@ fn paren_wrapped_vec(terms: impl Iterator) -> String { impl Node { - fn to_repl(&self) -> String { + fn to_repl(&self, symbol_table: &SymbolTable) -> String { match self { - Node::Expr(e) => e.to_repl(), + Node::Expr(e) => e.to_repl(symbol_table), Node::PrimObject { name, items, .. } if items.len() == 0 => format!("{}", name), - Node::PrimObject { name, items, .. } => format!("{}{}", name, paren_wrapped_vec(items.iter().map(|x| x.to_repl()))), - Node::PrimTuple { items } => format!("{}", paren_wrapped_vec(items.iter().map(|x| x.to_repl()))), + Node::PrimObject { name, items, .. } => format!("{}{}", name, paren_wrapped_vec(items.iter().map(|x| x.to_repl(symbol_table)))), + Node::PrimTuple { items } => format!("{}", paren_wrapped_vec(items.iter().map(|x| x.to_repl(symbol_table)))), } } fn is_true(&self) -> bool { @@ -100,10 +100,12 @@ impl Expr { fn to_node(self) -> Node { Node::Expr(self) } - fn to_repl(&self) -> String { + fn to_repl(&self, symbol_table: &SymbolTable) -> String { use self::Lit::*; use self::Func::*; + let _ = symbol_table; + match self { Expr::Lit(ref l) => match l { Nat(n) => format!("{}", n), @@ -120,7 +122,7 @@ impl Expr { Expr::Constructor { type_name, arity, .. } => { format!("", type_name, arity) }, - Expr::Tuple(exprs) => paren_wrapped_vec(exprs.iter().map(|x| x.to_repl())), + Expr::Tuple(exprs) => paren_wrapped_vec(exprs.iter().map(|x| x.to_repl(symbol_table))), _ => format!("{:?}", self), } } @@ -154,7 +156,10 @@ impl<'a> State<'a> { for statement in ast.0 { match self.statement(statement) { - Ok(Some(ref output)) if repl => acc.push(Ok(output.to_repl())), + Ok(Some(ref output)) if repl => { + let ref symbol_table = self.symbol_table_handle.borrow(); + acc.push(Ok(output.to_repl(symbol_table))) + }, Ok(_) => (), Err(error) => { acc.push(Err(format!("Runtime error: {}", error))); @@ -338,11 +343,13 @@ impl<'a> State<'a> { /* builtin functions */ (IOPrint, &[ref anything]) => { - print!("{}", anything.to_repl()); + let ref symbol_table = self.symbol_table_handle.borrow(); + print!("{}", anything.to_repl(symbol_table)); Expr::Unit }, (IOPrintLn, &[ref anything]) => { - println!("{}", anything.to_repl()); + let ref symbol_table = self.symbol_table_handle.borrow(); + println!("{}", anything.to_repl(symbol_table)); Expr::Unit }, (IOGetLine, &[]) => {