Constructors and context -> sys

We can register memory we've allocated onto the heap into a ~sys_t~
instance for examination (read: garbage collection) later.  We can
also add items to the symbol table it has internally.
This commit is contained in:
2025-08-20 21:12:46 +01:00
parent 99396b0533
commit 3074ba5bab
6 changed files with 157 additions and 18 deletions

16
tag.c
View File

@@ -27,11 +27,27 @@ lisp_t *tag_sym(char *str)
return TAG((u64)str, SYM);
}
lisp_t *tag_vec(lvec_t *lvec)
{
return TAG((u64)lvec, VEC);
}
lisp_t *tag_cons(cons_t *cons)
{
return TAG((u64)cons, CONS);
}
tag_t get_tag(lisp_t *lisp)
{
static_assert(NUM_TAGS == 5);
if (!lisp)
return TAG_NIL;
else if (IS_TAG(lisp, INT))
return TAG_INT;
return (u64)lisp & 0xFF;
}
i64 as_int(lisp_t *obj)
{
assert(IS_TAG(obj, INT));