diff --git a/src/ast/types.rs b/src/ast/types.rs index 2f777f8..31551f4 100644 --- a/src/ast/types.rs +++ b/src/ast/types.rs @@ -262,6 +262,47 @@ impl Vector { } } +impl std::fmt::Display for Expr { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut string = "".to_string(); + match self { + Expr::Value(value) => match value { + Value::Int(i) => string.push_str(&format!("{i}")), + Value::Float(f) => string.push_str(&format!("{f:2}")), + Value::String(s) => string.push_str(&format!("{s:?}")), + Value::Boolean(b) => string.push_str(&format!("{b}")), + Value::Closure { .. } => string.push_str(""), + _ => {} + }, + Expr::Func(_) => string.push_str(""), + Expr::Record(map) => { + string.push_str("{"); + for (key, val) in map { + string.push_str(&format!(" .{}: {},", key.0, val)); + } + if map.len() > 0 { + string.push_str(" }"); + } else { + string.push_str("}"); + } + } + Expr::Vector(vec) => { + string.push_str("["); + for val in vec { + string.push_str(&format!(" {},", val)); + } + if vec.len() > 0 { + string.push_str(" ]"); + } else { + string.push_str("]"); + } + } + _ => {} + } + f.write_str(&string) + } +} + pub const UNIT_VALUE: Value = Value::Record(Record(BTreeMap::new())); pub const UNIT: Expr = Expr::Value(UNIT_VALUE); diff --git a/src/ayin.rs b/src/ayin.rs index decf80d..bb2b1c1 100644 --- a/src/ayin.rs +++ b/src/ayin.rs @@ -6,7 +6,7 @@ fn main() { Err(err) => println!("Error: {err:#?}"), Ok(program) => match ayin::interpret::run(program, "main".into(), vec![]) { Err(err) => println!("Error: {err:#?}"), - Ok(e) => println!("{e:#?}"), + Ok(e) => println!("{e}"), }, } }