From b01eda5e0e3df469b45ff91424f7ad6f806cbca3 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Tue, 19 Nov 2024 11:01:48 -0600 Subject: [PATCH 01/10] fixing types still using color_eyre --- src/types.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/types.rs b/src/types.rs index b553a70..a4fcc48 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,4 +1,4 @@ -use color_eyre::{eyre::eyre, Result}; +use miette::{miette, Result}; use std::{num::ParseIntError, rc::Rc}; #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)] @@ -46,7 +46,7 @@ impl Value { pub fn apply(&self, args: LispArgs) -> Result { match self { Self::Function(f, _) => f(args), - _ => Err(eyre!("No function here, shouldn't call apply")), + _ => Err(miette!("No function here, shouldn't call apply")), } } } From 5d30ca51ed0f6c859c9fc2cbe4add28121aff464 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Tue, 19 Nov 2024 15:25:47 -0600 Subject: [PATCH 02/10] adding moving to string --- src/types.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/types.rs b/src/types.rs index a4fcc48..e9a4cdb 100644 --- a/src/types.rs +++ b/src/types.rs @@ -100,6 +100,15 @@ impl From<&i64> for Value { } } +impl From for String { + fn from(value: Value) -> Self { + match value { + Value::String(str) => str, + _ => String::default(), + } + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct Symbol(pub String); From f630d138cbe8691a4a56e947be4dbc9b19779219 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Tue, 19 Nov 2024 17:44:51 -0600 Subject: [PATCH 03/10] proper library setup --- Cargo.toml | 2 +- src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5b002e9..735de93 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [lib] -crate-type = ["staticlib"] +name = "crisp" path = "src/lib.rs" [dependencies] diff --git a/src/lib.rs b/src/lib.rs index 0a8870f..ba57106 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,7 +11,7 @@ pub mod reader; pub mod types; use types::*; -pub fn main() -> Result<()> { +fn main() -> Result<()> { let mut rl = Editor::<(), rustyline::history::DefaultHistory>::new().unwrap(); if rl.load_history(".mal-history").is_err() { eprintln!("No previous history."); From b4a393cce7f4a6ec69db77d350f0bcb9d2249c53 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Wed, 20 Nov 2024 12:14:34 -0600 Subject: [PATCH 04/10] more conversions for values --- src/types.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/types.rs b/src/types.rs index e9a4cdb..89bdc43 100644 --- a/src/types.rs +++ b/src/types.rs @@ -109,6 +109,42 @@ impl From for String { } } +impl From for i32 { + fn from(value: Value) -> Self { + match value { + Value::Number(num) => num as i32, + _ => 0, + } + } +} + +impl From for i64 { + fn from(value: Value) -> Self { + match value { + Value::Number(num) => num, + _ => 0, + } + } +} + +impl From<&Value> for i32 { + fn from(value: &Value) -> Self { + match value { + Value::Number(num) => *num as i32, + _ => 0, + } + } +} + +impl From<&Value> for i64 { + fn from(value: &Value) -> Self { + match value { + Value::Number(num) => *num, + _ => 0, + } + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct Symbol(pub String); From c3abe2fe48dc891322548d4fa900062772486bd3 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Thu, 28 Nov 2024 06:50:03 -0600 Subject: [PATCH 05/10] adding Value to String --- src/types.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/types.rs b/src/types.rs index 89bdc43..481dfdc 100644 --- a/src/types.rs +++ b/src/types.rs @@ -109,6 +109,15 @@ impl From for String { } } +impl From<&Value> for String { + fn from(value: &Value) -> Self { + match value { + Value::String(str) => str.clone(), + _ => String::default(), + } + } +} + impl From for i32 { fn from(value: Value) -> Self { match value { From 2489bf56dcc2a9ba4733550f88a8dc59ae2a131a Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Fri, 29 Nov 2024 21:59:33 -0600 Subject: [PATCH 06/10] adding conversions for symbols and keywords to strings --- src/types.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/types.rs b/src/types.rs index 481dfdc..41ba975 100644 --- a/src/types.rs +++ b/src/types.rs @@ -49,6 +49,13 @@ impl Value { _ => Err(miette!("No function here, shouldn't call apply")), } } + + pub fn is_list(&self) -> bool { + match self { + Self::List(_) => true, + _ => false, + } + } } impl From> for Value { @@ -104,6 +111,8 @@ impl From for String { fn from(value: Value) -> Self { match value { Value::String(str) => str, + Value::Symbol(Symbol(str)) => str, + Value::Keyword(Keyword(str)) => str, _ => String::default(), } } @@ -113,6 +122,8 @@ impl From<&Value> for String { fn from(value: &Value) -> Self { match value { Value::String(str) => str.clone(), + Value::Symbol(Symbol(str)) => str.clone(), + Value::Keyword(Keyword(str)) => str.clone(), _ => String::default(), } } From 5340d5906f3ad7d6ae3d91a203fdca03565a1920 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Thu, 5 Dec 2024 17:25:16 -0600 Subject: [PATCH 07/10] adding some debug --- src/types.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/types.rs b/src/types.rs index 41ba975..eab1d5d 100644 --- a/src/types.rs +++ b/src/types.rs @@ -122,7 +122,10 @@ impl From<&Value> for String { fn from(value: &Value) -> Self { match value { Value::String(str) => str.clone(), - Value::Symbol(Symbol(str)) => str.clone(), + Value::Symbol(Symbol(str)) => { + dbg!(str); + str.clone() + } Value::Keyword(Keyword(str)) => str.clone(), _ => String::default(), } From fa078e8d3fa9c0916f5da950eee896d4fa67a4eb Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Thu, 5 Dec 2024 17:31:06 -0600 Subject: [PATCH 08/10] updates to cargo so builds work --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/types.rs | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d994b8d..a6e4a10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ dependencies = [ [[package]] name = "crisp" -version = "0.1.0" +version = "0.1.1" dependencies = [ "lazy_static", "miette", diff --git a/Cargo.toml b/Cargo.toml index 735de93..96db636 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "crisp" -version = "0.1.0" +version = "0.1.1" edition = "2021" [lib] diff --git a/src/types.rs b/src/types.rs index eab1d5d..edde73c 100644 --- a/src/types.rs +++ b/src/types.rs @@ -197,3 +197,17 @@ impl std::fmt::Display for Keyword { std::fmt::Display::fmt(&self.0, f) } } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_conversions() { + let value = Value::Symbol(Symbol("c1".to_owned())); + dbg!(&value); + let string = String::from("c1"); + let convert = String::from(value); + assert_eq!(string, convert); + } +} From f0dfa0c23819806ff67c6f14adf8802d58064336 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Thu, 5 Dec 2024 22:38:08 -0600 Subject: [PATCH 09/10] types are converting right --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/types.rs | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a6e4a10..e740f85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ dependencies = [ [[package]] name = "crisp" -version = "0.1.1" +version = "0.1.2" dependencies = [ "lazy_static", "miette", diff --git a/Cargo.toml b/Cargo.toml index 96db636..87d4712 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "crisp" -version = "0.1.1" +version = "0.1.2" edition = "2021" [lib] diff --git a/src/types.rs b/src/types.rs index edde73c..07e8e24 100644 --- a/src/types.rs +++ b/src/types.rs @@ -205,7 +205,6 @@ mod test { #[test] fn test_conversions() { let value = Value::Symbol(Symbol("c1".to_owned())); - dbg!(&value); let string = String::from("c1"); let convert = String::from(value); assert_eq!(string, convert); From 4e7e050bf6cb72f1112f18e4f2f55f1394688d4b Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Thu, 5 Dec 2024 22:39:20 -0600 Subject: [PATCH 10/10] grrrr --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/types.rs | 5 +---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e740f85..0245981 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ dependencies = [ [[package]] name = "crisp" -version = "0.1.2" +version = "0.1.3" dependencies = [ "lazy_static", "miette", diff --git a/Cargo.toml b/Cargo.toml index 87d4712..0c47f3e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "crisp" -version = "0.1.2" +version = "0.1.3" edition = "2021" [lib] diff --git a/src/types.rs b/src/types.rs index 07e8e24..96e0700 100644 --- a/src/types.rs +++ b/src/types.rs @@ -122,10 +122,7 @@ impl From<&Value> for String { fn from(value: &Value) -> Self { match value { Value::String(str) => str.clone(), - Value::Symbol(Symbol(str)) => { - dbg!(str); - str.clone() - } + Value::Symbol(Symbol(str)) => str.clone(), Value::Keyword(Keyword(str)) => str.clone(), _ => String::default(), }