From e2c2cc460052191439abec62c465f0a4430b5b8a Mon Sep 17 00:00:00 2001 From: Akshay Date: Tue, 23 Mar 2021 13:09:15 +0530 Subject: add types for lisp primitives and functions --- src/lisp/expr.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/lisp/expr.rs') 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 @@ use std::fmt; -use crate::lisp::number::LispNumber; +use crate::app::AppState; +use crate::lisp::{error::LispError, number::LispNumber}; -#[derive(Debug, PartialEq, Clone)] +#[derive(Clone)] pub enum LispExpr { + Unit, Number(LispNumber), List(Vec), StringLit(String), BoolLit(bool), Ident(String), + PrimitiveFunc(fn(&[LispExpr], Option<&mut AppState>) -> Result), Function(LispFunction), // none of these depths should be zero @@ -56,6 +59,7 @@ impl LispExpr { impl fmt::Display for LispExpr { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { + LispExpr::Unit => write!(f, "()")?, LispExpr::Number(n) => write!(f, "{}", n)?, LispExpr::List(l) => { for expr in l.iter() { @@ -71,6 +75,7 @@ impl fmt::Display for LispExpr { } } LispExpr::Ident(s) => write!(f, "{}", s)?, + LispExpr::PrimitiveFunc(_) => write!(f, "<#primitive>")?, LispExpr::Function(_) => write!(f, "<#procedure>")?, LispExpr::Quasiquote(val, depth) => { write!(f, "{}{}", "`".repeat(*depth as usize), val)? @@ -84,4 +89,4 @@ impl fmt::Display for LispExpr { } #[derive(Debug, PartialEq, Clone)] -struct LispFunction {} +enum LispFunction {} -- cgit v1.2.3