From 0f68afd9a040256939ddd082a380bd37b0a3996b Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Thu, 21 Aug 2025 14:54:57 +0100 Subject: Make nicer primitive functions for car/cdr If it isn't a CONS, we return NIL instead of failing. This way, we can use it in our general iteration functions. Eventually the actual runtime would use this as well. The macros are mostly for internal use to do assignment etc. --- constructor.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'constructor.c') diff --git a/constructor.c b/constructor.c index 9db0330..e0fab52 100644 --- a/constructor.c +++ b/constructor.c @@ -46,3 +46,19 @@ lisp_t *intern(sys_t *sys, sv_t sv) char *str = sym_table_find(&sys->symtable, sv); return tag_sym(str); } + +lisp_t *car(lisp_t *lsp) +{ + if (!IS_TAG(lsp, CONS)) + return NIL; + else + return CAR(lsp); +} + +lisp_t *cdr(lisp_t *lsp) +{ + if (!IS_TAG(lsp, CONS)) + return NIL; + else + return CDR(lsp); +} -- cgit v1.2.3-13-gbd6f