diff options
author | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-02 17:53:09 +0300 |
---|---|---|
committer | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-02 17:53:09 +0300 |
commit | 9121a0b782d2cd6551a393f1d3a79c7b092e4873 (patch) | |
tree | dea5e6644131d76b4456296d30f60d9c846af919 /src/type/mod.rs | |
parent | 0f9542109275de75641185d4d94dbe7c35a49088 (diff) | |
download | myslip-9121a0b782d2cd6551a393f1d3a79c7b092e4873.tar.gz myslip-9121a0b782d2cd6551a393f1d3a79c7b092e4873.zip |
Added tests for type_check. Implemented std::fmt::Display for many enums. Added type variants List(Type), and UndefinedType for use in error messages. Implemented type utility arr(a, b).
Diffstat (limited to 'src/type/mod.rs')
-rw-r--r-- | src/type/mod.rs | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/type/mod.rs b/src/type/mod.rs index 623edc9..12d1132 100644 --- a/src/type/mod.rs +++ b/src/type/mod.rs @@ -1,34 +1,43 @@ -use crate::sexp::{SExp, SExp::*}; +pub mod util; +pub mod display; +pub mod check; + + +use crate::sexp::SExp; + + +#[derive(Debug,PartialEq)] pub enum Type { + Integer, + Arrow(Box<Type>, Box<Type>), + + List(Vec<Type>), + + UndefinedType, // only for errors + } + +#[derive(Debug,PartialEq)] pub enum TypeError { + UndefinedVariable(String), + InvalidOperator { operator: SExp, expected: Type, found: Type, }, + InvalidArgList { arglist: SExp, expected: Type, found: Type, }, - OtherError -} -impl SExp { - /// ```rust - /// use melisp::{ - /// r#type::{*, Type::*, TypeError::*}, - /// sexp::{SExp::*, SLeaf::*, util::*}, - /// }; - /// ``` - pub fn type_check(&self) -> Result<Type, TypeError> { - todo!() - } + OtherError } |