From 3074ba5babaf39e4a177444a8ffb5f81b991440f Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Wed, 20 Aug 2025 21:12:46 +0100 Subject: 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. --- tag.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'tag.c') diff --git a/tag.c b/tag.c index dbc47ba..ebed8cb 100644 --- a/tag.c +++ b/tag.c @@ -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)); -- cgit v1.2.3-13-gbd6f