to_repl() doesn't need symbol table handle

This commit is contained in:
greg 2019-11-07 02:42:17 -08:00
parent 4c718ed977
commit b967fa1911

View File

@ -69,12 +69,12 @@ fn paren_wrapped_vec(terms: impl Iterator<Item=String>) -> String {
impl Node { impl Node {
fn to_repl(&self, symbol_table: &SymbolTable) -> String { fn to_repl(&self) -> String {
match self { match self {
Node::Expr(e) => e.to_repl(symbol_table), Node::Expr(e) => e.to_repl(),
Node::PrimObject { name, items, .. } if items.len() == 0 => format!("{}", name), 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(symbol_table)))), 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(symbol_table)))), Node::PrimTuple { items } => format!("{}", paren_wrapped_vec(items.iter().map(|x| x.to_repl()))),
} }
} }
fn is_true(&self) -> bool { fn is_true(&self) -> bool {
@ -99,12 +99,10 @@ impl Expr {
fn to_node(self) -> Node { fn to_node(self) -> Node {
Node::Expr(self) Node::Expr(self)
} }
fn to_repl(&self, symbol_table: &SymbolTable) -> String { fn to_repl(&self) -> String {
use self::Lit::*; use self::Lit::*;
use self::Func::*; use self::Func::*;
let _ = symbol_table;
match self { match self {
Expr::Lit(ref l) => match l { Expr::Lit(ref l) => match l {
Nat(n) => format!("{}", n), Nat(n) => format!("{}", n),
@ -121,7 +119,7 @@ impl Expr {
Expr::Constructor { type_name, arity, .. } => { Expr::Constructor { type_name, arity, .. } => {
format!("<constructor for `{}` arity {}>", type_name, arity) format!("<constructor for `{}` arity {}>", type_name, arity)
}, },
Expr::Tuple(exprs) => paren_wrapped_vec(exprs.iter().map(|x| x.to_repl(symbol_table))), Expr::Tuple(exprs) => paren_wrapped_vec(exprs.iter().map(|x| x.to_repl())),
_ => format!("{:?}", self), _ => format!("{:?}", self),
} }
} }
@ -156,8 +154,7 @@ impl<'a> State<'a> {
for statement in ast.0 { for statement in ast.0 {
match self.statement(statement) { match self.statement(statement) {
Ok(Some(ref output)) if repl => { Ok(Some(ref output)) if repl => {
let ref symbol_table = self.symbol_table_handle.borrow(); acc.push(Ok(output.to_repl()))
acc.push(Ok(output.to_repl(symbol_table)))
}, },
Ok(_) => (), Ok(_) => (),
Err(error) => { Err(error) => {
@ -342,13 +339,11 @@ impl<'a> State<'a> {
/* builtin functions */ /* builtin functions */
(IOPrint, &[ref anything]) => { (IOPrint, &[ref anything]) => {
let ref symbol_table = self.symbol_table_handle.borrow(); print!("{}", anything.to_repl());
print!("{}", anything.to_repl(symbol_table));
Expr::Unit.to_node() Expr::Unit.to_node()
}, },
(IOPrintLn, &[ref anything]) => { (IOPrintLn, &[ref anything]) => {
let ref symbol_table = self.symbol_table_handle.borrow(); println!("{}", anything.to_repl());
println!("{}", anything.to_repl(symbol_table));
Expr::Unit.to_node() Expr::Unit.to_node()
}, },
(IOGetLine, &[]) => { (IOGetLine, &[]) => {