From cb8d1b1139006a8e5e03c0d147b1d6e522a167c3 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Thu, 5 Mar 2026 19:59:23 +0000 Subject: [PATCH] sys: make_list constructor Takes a fixed array of lisp_t pointers, and makes a cons list out of them. --- include/alisp/sys.h | 1 + src/sys.c | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/include/alisp/sys.h b/include/alisp/sys.h index dff8b35..6813a12 100644 --- a/include/alisp/sys.h +++ b/include/alisp/sys.h @@ -30,6 +30,7 @@ u64 sys_cost(sys_t *); lisp_t *make_int(i64); lisp_t *intern(sys_t *, sv_t); lisp_t *cons(sys_t *, lisp_t *, lisp_t *); +lisp_t *make_list(sys_t *, lisp_t **, u64); lisp_t *make_vec(sys_t *, u64); lisp_t *make_str(sys_t *, u64); diff --git a/src/sys.c b/src/sys.c index 2569065..6bc8965 100644 --- a/src/sys.c +++ b/src/sys.c @@ -59,6 +59,17 @@ lisp_t *cons(sys_t *sys, lisp_t *car, lisp_t *cdr) return cons; } +lisp_t *make_list(sys_t *sys, lisp_t **lisps, u64 size) +{ + lisp_t *root = NIL; + for (u64 i = size; i > 0; --i) + { + lisp_t *node = lisps[i - 1]; + root = cons(sys, node, root); + } + return root; +} + lisp_t *make_vec(sys_t *sys, u64 capacity) { lisp_t *vec = sys_alloc(sys, TAG_VEC);