use metadol::repl::{EvalResult, SpiritRepl};
fn main() {
let mut repl = SpiritRepl::new();
println!("=== DOL REPL Expression Evaluation Demo ===\n");
println!(">>> 42");
match repl.eval("42") {
Ok(EvalResult::Expression { value, .. }) => println!("=> {}\n", value),
other => println!("Error: {:?}\n", other),
}
println!(">>> 3.14159");
match repl.eval("3.14159") {
Ok(EvalResult::Expression { value, .. }) => println!("=> {}\n", value),
other => println!("Error: {:?}\n", other),
}
println!(">>> 10 + 20 * 2");
match repl.eval("10 + 20 * 2") {
Ok(EvalResult::Expression { value, .. }) => println!("=> {}\n", value),
other => println!("Error: {:?}\n", other),
}
println!(">>> 100 - 37");
match repl.eval("100 - 37") {
Ok(EvalResult::Expression { value, .. }) => println!("=> {}\n", value),
other => println!("Error: {:?}\n", other),
}
println!(">>> pub fun square(x: i64) -> i64 {{ x * x }}");
match repl.eval("pub fun square(x: i64) -> i64 { x * x }") {
Ok(EvalResult::Defined { name, kind, .. }) => println!("Defined {} '{}'\n", kind, name),
other => println!("Error: {:?}\n", other),
}
println!(">>> square(7)");
match repl.eval("square(7)") {
Ok(EvalResult::Expression { value, .. }) => println!("=> {}\n", value),
other => println!("Error: {:?}\n", other),
}
println!(">>> gen Point {{ has x: i64\\n has y: i64 }}");
match repl.eval("gen Point { has x: i64\n has y: i64 }") {
Ok(EvalResult::Defined { name, kind, .. }) => println!("Defined {} '{}'\n", kind, name),
other => println!("Error: {:?}\n", other),
}
println!(">>> pub fun getX() -> i64 {{ let p = Point {{ x: 42, y: 100 }}\\n p.x }}");
match repl.eval("pub fun getX() -> i64 { let p = Point { x: 42, y: 100 }\n p.x }") {
Ok(EvalResult::Defined { name, kind, .. }) => println!("Defined {} '{}'\n", kind, name),
other => println!("Error: {:?}\n", other),
}
println!(">>> getX()");
match repl.eval("getX()") {
Ok(EvalResult::Expression { value, .. }) => println!("=> {}\n", value),
other => println!("Error: {:?}\n", other),
}
println!(">>> 1.5 + 2.5");
match repl.eval("1.5 + 2.5") {
Ok(EvalResult::Expression { value, .. }) => println!("=> {}\n", value),
other => println!("Error: {:?}\n", other),
}
println!(">>> pub fun area(r: f64) -> f64 {{ 3.14159 * r * r }}");
match repl.eval("pub fun area(r: f64) -> f64 { 3.14159 * r * r }") {
Ok(EvalResult::Defined { name, kind, .. }) => println!("Defined {} '{}'\n", kind, name),
other => println!("Error: {:?}\n", other),
}
println!(">>> area(10.0)");
match repl.eval("area(10.0)") {
Ok(EvalResult::Expression { value, .. }) => println!("=> {}\n", value),
other => println!("Error: {:?}\n", other),
}
println!("=== Demo Complete ===");
}