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)  | 
