From 92b32ff2df22af2b0735278f72e2f1c726549295 Mon Sep 17 00:00:00 2001 From: Roman Godmaire Date: Sat, 4 May 2024 17:10:51 -0400 Subject: [PATCH] feat: basic string coercion --- src/env/core.rs | 10 ++++++++++ src/evaluator.rs | 3 +++ 2 files changed, 13 insertions(+) diff --git a/src/env/core.rs b/src/env/core.rs index 5212b9a..7272c52 100644 --- a/src/env/core.rs +++ b/src/env/core.rs @@ -300,6 +300,16 @@ pub(super) fn core() -> HashMap { }) }), ), + // Strings + ( + "str", + Node::NativeFunc(|_env, args| { + arg_count!(1, args.len()); + + let val = args[0].borrow(); + Ok(Node::String(val.to_string())) + }), + ), // IO ( "display", diff --git a/src/evaluator.rs b/src/evaluator.rs index a75142c..15be10f 100644 --- a/src/evaluator.rs +++ b/src/evaluator.rs @@ -156,6 +156,9 @@ mod test { #[case("(>= 2 1)", "true")] #[case("(>= 1 1)", "true")] #[case("(>= 1 2)", "false")] + // Strings + #[case("(str (+ 1 2))", "3")] + #[case("(str (list 1 2 3))", "(1 2 3)")] fn test_evaluator(#[case] input: &str, #[case] expected: &str) { let env = Environment::new(); let ast = parser::parse_str(input).unwrap();