aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/expr.rs
diff options
context:
space:
mode:
authorAkshay <[email protected]>2021-03-23 07:39:15 +0000
committerAkshay <[email protected]>2021-03-23 07:39:15 +0000
commite2c2cc460052191439abec62c465f0a4430b5b8a (patch)
tree9ed51bd4a59813a5937b9cbbdc7ef3bd2e2fcf1f /src/lisp/expr.rs
parent66c427ef00014f5939ba23f00fbc7f8fd089b66b (diff)
add types for lisp primitives and functions
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 {}