aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/expr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lisp/expr.rs')
-rw-r--r--src/lisp/expr.rs11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lisp/expr.rs b/src/lisp/expr.rs
index 94e778f..4676a3e 100644
--- a/src/lisp/expr.rs
+++ b/src/lisp/expr.rs
@@ -1,14 +1,17 @@
1use std::fmt; 1use std::fmt;
2 2
3use crate::lisp::number::LispNumber; 3use crate::app::AppState;
4use crate::lisp::{error::LispError, number::LispNumber};
4 5
5#[derive(Debug, PartialEq, Clone)] 6#[derive(Clone)]
6pub enum LispExpr { 7pub enum LispExpr {
8 Unit,
7 Number(LispNumber), 9 Number(LispNumber),
8 List(Vec<LispExpr>), 10 List(Vec<LispExpr>),
9 StringLit(String), 11 StringLit(String),
10 BoolLit(bool), 12 BoolLit(bool),
11 Ident(String), 13 Ident(String),
14 PrimitiveFunc(fn(&[LispExpr], Option<&mut AppState>) -> Result<LispExpr, LispError>),
12 Function(LispFunction), 15 Function(LispFunction),
13 16
14 // none of these depths should be zero 17 // none of these depths should be zero
@@ -56,6 +59,7 @@ impl LispExpr {
56impl fmt::Display for LispExpr { 59impl fmt::Display for LispExpr {
57 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 60 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
58 match self { 61 match self {
62 LispExpr::Unit => write!(f, "()")?,
59 LispExpr::Number(n) => write!(f, "{}", n)?, 63 LispExpr::Number(n) => write!(f, "{}", n)?,
60 LispExpr::List(l) => { 64 LispExpr::List(l) => {
61 for expr in l.iter() { 65 for expr in l.iter() {
@@ -71,6 +75,7 @@ impl fmt::Display for LispExpr {
71 } 75 }
72 } 76 }
73 LispExpr::Ident(s) => write!(f, "{}", s)?, 77 LispExpr::Ident(s) => write!(f, "{}", s)?,
78 LispExpr::PrimitiveFunc(_) => write!(f, "<#primitive>")?,
74 LispExpr::Function(_) => write!(f, "<#procedure>")?, 79 LispExpr::Function(_) => write!(f, "<#procedure>")?,
75 LispExpr::Quasiquote(val, depth) => { 80 LispExpr::Quasiquote(val, depth) => {
76 write!(f, "{}{}", "`".repeat(*depth as usize), val)? 81 write!(f, "{}{}", "`".repeat(*depth as usize), val)?
@@ -84,4 +89,4 @@ impl fmt::Display for LispExpr {
84} 89}
85 90
86#[derive(Debug, PartialEq, Clone)] 91#[derive(Debug, PartialEq, Clone)]
87struct LispFunction {} 92enum LispFunction {}