aboutsummaryrefslogtreecommitdiff
path: root/src/sexp/mod.rs
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-06 16:23:18 +0300
committerJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-06 16:23:18 +0300
commit313c044b4a878a425aaca6554576f5154ace8ff9 (patch)
tree706bf5e34678622111a23c7045f667c1acbe7c6d /src/sexp/mod.rs
parent23b2028bdce46d02209fc2df70fc5468a8beffa8 (diff)
downloadmyslip-313c044b4a878a425aaca6554576f5154ace8ff9.tar.gz
myslip-313c044b4a878a425aaca6554576f5154ace8ff9.zip
Implemented let-bindings
Diffstat (limited to 'src/sexp/mod.rs')
-rw-r--r--src/sexp/mod.rs12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/sexp/mod.rs b/src/sexp/mod.rs
index 4e3c11c..7aa517b 100644
--- a/src/sexp/mod.rs
+++ b/src/sexp/mod.rs
@@ -59,11 +59,19 @@ use SLeaf::*;
impl SExp {
+ /// Quick test that lets are values
+ /// ```rust
+ /// use myslip::sexp::{SExp::*, SLeaf::*, util::*};
+ /// assert!(scons(Let, scons(var("a"), scons(5, Nil))).is_value())
+ /// ```
pub fn is_value(&self) -> bool {
match self {
SCons(a, b) =>
- (**a == Atom(Quote) || **a == Atom(Vector))
- && b.consists_of_values(),
+ SCons(a.clone(), b.clone()).check_let().is_some() ||
+ (
+ (**a == Atom(Quote) || **a == Atom(Vector))
+ && b.consists_of_values()
+ ),
Atom(Var(_)) => false,
Atom(_) => true,
}