cl-embed: Add an example, and a new sample-code (same file)

This commit is contained in:
2025-05-18 11:50:33 -04:00
parent 6ce27c522f
commit 47608668fa
4 changed files with 123 additions and 4 deletions

View File

@@ -0,0 +1 @@
../../../../sample-code/calculator.cl

View File

@@ -0,0 +1,25 @@
use cl_embed::*;
use repline::{Response, prebaked};
fn main() -> Result<(), repline::Error> {
prebaked::read_and("", "calc >", " ? >", |line| {
calc(line).map_err(Into::into)
})
}
fn calc(line: &str) -> Result<Response, EvalError> {
let mut env = Environment::new();
env.bind("line", line);
let res = conlang!(
mod expression;
use expression::{eval, parse};
let (expr, rest) = parse(line.chars(), 0);
eval(expr)
)(&mut env)?;
println!("{res}");
Ok(Response::Accept)
}

View File

@@ -162,10 +162,8 @@ impl Interpret for Enum {
let idx = idx.interpret(env)?;
env.insert(*name, Some(idx))
}
(StructKind::Tuple(_), None) => eprintln!("TODO: Enum-tuple variants: {kind}"),
(StructKind::Struct(_), None) => {
eprintln!("TODO: Enum-struct members: {kind}")
}
(StructKind::Tuple(_), None) => {}
(StructKind::Struct(_), None) => {}
_ => eprintln!("Well-formedness error in {self}"),
}
}