aboutsummaryrefslogtreecommitdiff
path: root/src/parse/parsetree.rs
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-05 18:07:50 +0300
committerJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-05 18:07:50 +0300
commitd64165e9e6af92bfe350e5d2cc46545b28dbb5c0 (patch)
treed7a6abb03a83ad08194b94db7b82a6c5f32b4819 /src/parse/parsetree.rs
parent1e712e91edea0735c5eb440af26ac6d4454e70a9 (diff)
downloadmyslip-d64165e9e6af92bfe350e5d2cc46545b28dbb5c0.tar.gz
myslip-d64165e9e6af92bfe350e5d2cc46545b28dbb5c0.zip
Added vectors and tests for their evaluation and typing
Diffstat (limited to 'src/parse/parsetree.rs')
-rw-r--r--src/parse/parsetree.rs39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/parse/parsetree.rs b/src/parse/parsetree.rs
index 3cdc6fe..13d73ea 100644
--- a/src/parse/parsetree.rs
+++ b/src/parse/parsetree.rs
@@ -94,25 +94,26 @@ fn tokens_to_ast_inner(
loop {
elements.push(match current_token {
- Some(Num(x)) => Ok(Atom(Int(x))),
- Some(Sym(s)) if s == "+" => Ok(Atom(Add)),
- Some(Sym(s)) if s == "*" => Ok(Atom(Mul)),
- Some(Sym(s)) if s == "/" => Ok(Atom(Div)),
- Some(Sym(s)) if s == "-" => Ok(Atom(Sub)),
- Some(Sym(s)) if s == ">" => Ok(Atom(Gt)),
- Some(Sym(s)) if s == "<" => Ok(Atom(Lt)),
- Some(Sym(s)) if s == ">=" => Ok(Atom(Ge)),
- Some(Sym(s)) if s == "<=" => Ok(Atom(Le)),
- Some(Sym(s)) if s == "=" => Ok(Atom(Eq)),
- Some(Sym(s)) if s == "!=" => Ok(Atom(Neq)),
- Some(Sym(s)) if s == "and" => Ok(Atom(And)),
- Some(Sym(s)) if s == "or" => Ok(Atom(Or)),
- Some(Sym(s)) if s == "not" => Ok(Atom(Not)),
- Some(Sym(s)) if s == "xor" => Ok(Atom(Xor)),
- Some(Sym(s)) if s == "true" => Ok(Atom(True)),
- Some(Sym(s)) if s == "false" => Ok(Atom(False)),
- Some(Sym(s)) if s == "quote" => Ok(Atom(Quote)),
- Some(Sym(s)) => Ok(Atom(Var(s))),
+ Some(Num(x)) => Ok(Atom(Int(x))),
+ Some(Sym(s)) if s == "+" => Ok(Atom(Add)),
+ Some(Sym(s)) if s == "*" => Ok(Atom(Mul)),
+ Some(Sym(s)) if s == "/" => Ok(Atom(Div)),
+ Some(Sym(s)) if s == "-" => Ok(Atom(Sub)),
+ Some(Sym(s)) if s == ">" => Ok(Atom(Gt)),
+ Some(Sym(s)) if s == "<" => Ok(Atom(Lt)),
+ Some(Sym(s)) if s == ">=" => Ok(Atom(Ge)),
+ Some(Sym(s)) if s == "<=" => Ok(Atom(Le)),
+ Some(Sym(s)) if s == "=" => Ok(Atom(Eq)),
+ Some(Sym(s)) if s == "!=" => Ok(Atom(Neq)),
+ Some(Sym(s)) if s == "and" => Ok(Atom(And)),
+ Some(Sym(s)) if s == "or" => Ok(Atom(Or)),
+ Some(Sym(s)) if s == "not" => Ok(Atom(Not)),
+ Some(Sym(s)) if s == "xor" => Ok(Atom(Xor)),
+ Some(Sym(s)) if s == "true" => Ok(Atom(True)),
+ Some(Sym(s)) if s == "false" => Ok(Atom(False)),
+ Some(Sym(s)) if s == "quote" => Ok(Atom(Quote)),
+ Some(Sym(s)) if s == "vector" => Ok(Atom(Vector)),
+ Some(Sym(s)) => Ok(Atom(Var(s))),
Some(ParClose) => break,
Some(ParOpen) => {
let subexp = tokens_to_ast_inner(