diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-08-20 21:50:58 +0100 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-08-20 21:50:58 +0100 |
commit | df558da7e1979a59b5207c323962aa59b61258e4 (patch) | |
tree | 99a69d572b536a5632a687a580db25e9735ffe3c | |
parent | 643896e2c8a2a9088819d3410f94008a83f575c6 (diff) | |
download | alisp-df558da7e1979a59b5207c323962aa59b61258e4.tar.gz alisp-df558da7e1979a59b5207c323962aa59b61258e4.tar.bz2 alisp-df558da7e1979a59b5207c323962aa59b61258e4.zip |
Use sv_t instead of raw char*
We're storing them as sv_t's anyway, we're fucked with regards to
indirection. Thus, let's be nice to ourselves, and deal with the
structures. We get the size of the structure for free anyway!
-rw-r--r-- | alisp.h | 6 | ||||
-rw-r--r-- | constructor.c | 4 | ||||
-rw-r--r-- | symtable.c | 6 | ||||
-rw-r--r-- | tag.c | 6 |
4 files changed, 11 insertions, 11 deletions
@@ -78,7 +78,7 @@ typedef struct u64 djb2(sv_t string); void sym_table_init(sym_table_t *table); -char *sym_table_find(sym_table_t *table, sv_t sv); +sv_t *sym_table_find(sym_table_t *table, sv_t sv); void sym_table_cleanup(sym_table_t *table); /// Basic defintions for a Lisp @@ -115,7 +115,7 @@ lisp_t *intern(sys_t *sys, sv_t sv); lisp_t *cons(sys_t *sys, lisp_t *car, lisp_t *cdr); i64 as_int(lisp_t *); -char *as_sym(lisp_t *); +sv_t *as_sym(lisp_t *); cons_t *as_cons(lisp_t *); void *as_vec(lisp_t *); @@ -160,7 +160,7 @@ enum Mask tag_t get_tag(lisp_t *lisp); lisp_t *tag_int(i64 i); -lisp_t *tag_sym(char *str); +lisp_t *tag_sym(sv_t *sv); lisp_t *tag_cons(cons_t *cons); lisp_t *tag_vec(lvec_t *lvec); diff --git a/constructor.c b/constructor.c index fd1e0d0..a2669ee 100644 --- a/constructor.c +++ b/constructor.c @@ -43,6 +43,6 @@ lisp_t *make_vec(sys_t *sys, u64 capacity) lisp_t *intern(sys_t *sys, sv_t sv) { - char *s = sym_table_find(&sys->symtable, sv); - return tag_sym(s); + sv_t *str = sym_table_find(&sys->symtable, sv); + return tag_sym(str); } @@ -32,9 +32,9 @@ void sym_table_init(sym_table_t *table) vec_make((void **)&table->entries, table->capacity * sizeof(*table->entries)); } -char *sym_table_find(sym_table_t *table, sv_t sv) +sv_t *sym_table_find(sym_table_t *table, sv_t sv) { - // TODO: Deal with resizing this when table->count > table->size / 2 + // WIP: Deal with resizing this when table->count > table->size / 2 u64 index = djb2(sv) & (table->capacity - 1); for (sv_t comp = table->entries[index]; comp.data; index += 1, @@ -51,7 +51,7 @@ char *sym_table_find(sym_table_t *table, sv_t sv) ++table->count; } - return table->entries[index].data; + return table->entries + index; } void sym_table_cleanup(sym_table_t *table) @@ -22,7 +22,7 @@ lisp_t *tag_int(i64 i) return TAG((u64)i, INT); } -lisp_t *tag_sym(char *str) +lisp_t *tag_sym(sv_t *str) { return TAG((u64)str, SYM); } @@ -57,10 +57,10 @@ i64 as_int(lisp_t *obj) ; } -char *as_sym(lisp_t *obj) +sv_t *as_sym(lisp_t *obj) { assert(IS_TAG(obj, SYM)); - return (char *)UNTAG(obj, SYM); + return (sv_t *)UNTAG(obj, SYM); } cons_t *as_cons(lisp_t *obj) |