prettyprint expressions for ayin.rs
This commit is contained in:
parent
6c0b63b95c
commit
9680ba75a0
2 changed files with 42 additions and 1 deletions
|
|
@ -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("<fn>"),
|
||||
_ => {}
|
||||
},
|
||||
Expr::Func(_) => string.push_str("<fn>"),
|
||||
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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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}"),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue