diff options
| author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-08-20 22:43:23 +0100 | 
|---|---|---|
| committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-08-20 22:43:23 +0100 | 
| commit | 13142dc7f38e6b148efadc97edffca8664b9cde7 (patch) | |
| tree | 068eb442645caf65e2ac2ff0a4d5f44f158c5a88 | |
| parent | 6e2db6825d4ff4b57be3086f654a84cc9ff64bcf (diff) | |
| download | alisp-13142dc7f38e6b148efadc97edffca8664b9cde7.tar.gz alisp-13142dc7f38e6b148efadc97edffca8664b9cde7.tar.bz2 alisp-13142dc7f38e6b148efadc97edffca8664b9cde7.zip  | |
refactor lisp runtime to use vec_t* instead of ivec_t*
bit nicer to look at, should have about the same painful performance
hit anyway.
| -rw-r--r-- | alisp.h | 14 | ||||
| -rw-r--r-- | constructor.c | 6 | ||||
| -rw-r--r-- | sys.c | 6 | ||||
| -rw-r--r-- | tag.c | 12 | 
4 files changed, 15 insertions, 23 deletions
@@ -53,7 +53,9 @@ typedef struct Vector    void *data;  } vec_t; -#define VEC_MULT 2 +#define VEC_MULT             2 +#define VEC_DEFAULT_CAPACITY 8 +  void vec_free(vec_t *);  void vec_ensure_free(vec_t *, u64);  void vec_append(vec_t *, void *, u64); @@ -103,12 +105,6 @@ typedef struct    lisp_t *car, *cdr;  } cons_t; -typedef struct -{ -  // 2 levels of indirection... disgusting -  void *data; -} lvec_t; -  /// System context - essentially something to help with system management  typedef struct  { @@ -129,7 +125,7 @@ lisp_t *cons(sys_t *, lisp_t *, lisp_t *);  i64 as_int(lisp_t *);  sv_t *as_sym(lisp_t *);  cons_t *as_cons(lisp_t *); -void *as_vec(lisp_t *); +vec_t *as_vec(lisp_t *);  #define CAR(L) (as_cons(L)->car)  #define CDR(L) (as_cons(L)->cdr) @@ -174,6 +170,6 @@ tag_t get_tag(lisp_t *);  lisp_t *tag_int(i64);  lisp_t *tag_sym(sv_t *);  lisp_t *tag_cons(cons_t *); -lisp_t *tag_vec(lvec_t *); +lisp_t *tag_vec(vec_t *);  #endif diff --git a/constructor.c b/constructor.c index a20e66a..910ed2a 100644 --- a/constructor.c +++ b/constructor.c @@ -34,9 +34,9 @@ lisp_t *cons(sys_t *sys, lisp_t *car, lisp_t *cdr)  lisp_t *make_vec(sys_t *sys, u64 capacity)  { -  lvec_t *lvec = calloc(1, sizeof(*lvec)); -  ivec_make(&lvec->data, capacity); -  lisp_t *ptr = tag_vec(lvec); +  vec_t *vec = calloc(1, sizeof(*vec)); +  vec_ensure_free(vec, MAX(capacity, VEC_DEFAULT_CAPACITY)); +  lisp_t *ptr = tag_vec(vec);    sys_register(sys, ptr);    return ptr;  } @@ -57,9 +57,9 @@ void sys_cleanup(sys_t *sys)        break;      case TAG_VEC:      { -      lvec_t *lvec = as_vec(allocated); -      ivec_free(&lvec->data); -      free(lvec); +      vec_t *vec = as_vec(allocated); +      vec_free(vec); +      free(vec);        break;      }      case TAG_NIL: @@ -27,9 +27,9 @@ lisp_t *tag_sym(sv_t *str)    return TAG((u64)str, SYM);  } -lisp_t *tag_vec(lvec_t *lvec) +lisp_t *tag_vec(vec_t *vec)  { -  return TAG((u64)lvec, VEC); +  return TAG((u64)vec, VEC);  }  lisp_t *tag_cons(cons_t *cons) @@ -69,12 +69,8 @@ cons_t *as_cons(lisp_t *obj)    return (cons_t *)UNTAG(obj, CONS);  } -void *as_vec(lisp_t *obj) +vec_t *as_vec(lisp_t *obj)  {    assert(IS_TAG(obj, VEC)); -  lvec_t *vec = (lvec_t *)UNTAG(obj, VEC); -  if (vec) -    return vec->data; -  else -    return NULL; +  return (vec_t *)UNTAG(obj, VEC);  }  | 
