diff options
Diffstat (limited to 'tag.c')
-rw-r--r-- | tag.c | 16 |
1 files changed, 16 insertions, 0 deletions
@@ -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)); |