diff options
Diffstat (limited to 'src/lisp/expr.rs')
-rw-r--r-- | src/lisp/expr.rs | 11 |
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 @@ | |||
1 | use std::fmt; | 1 | use std::fmt; |
2 | 2 | ||
3 | use crate::lisp::number::LispNumber; | 3 | use crate::app::AppState; |
4 | use crate::lisp::{error::LispError, number::LispNumber}; | ||
4 | 5 | ||
5 | #[derive(Debug, PartialEq, Clone)] | 6 | #[derive(Clone)] |
6 | pub enum LispExpr { | 7 | pub 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 { | |||
56 | impl fmt::Display for LispExpr { | 59 | impl 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)] |
87 | struct LispFunction {} | 92 | enum LispFunction {} |