From a266b97829ebe698a4256890fdf1214e479fe1de Mon Sep 17 00:00:00 2001 From: ubq323 Date: Tue, 6 Aug 2024 16:44:49 +0100 Subject: rearrange and refactor compiler part 1/? of making compiler use badthing objects instead of separate ast --- mem.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'mem.h') diff --git a/mem.h b/mem.h index d13e02f..e7edb82 100644 --- a/mem.h +++ b/mem.h @@ -13,6 +13,21 @@ void *M(State *S, void *ptr, size_t old, size_t new); #define RENEW_ARR(S,p,ty,old,new) (ty*)M(S, (p), (old)*sizeof(ty), (new)*sizeof(ty)) #define NEW_OBJ(S,ty, oty) (ty*)alloc_obj(S, sizeof(ty), oty) +// needs len,cap,d fields +#define ENSURE_CAP(S, darr, type, needed) \ + if (darr.cap < needed) { \ + size_t __newsz = next_pwrof2(needed); \ + if (__newsz < 8) __newsz = 8; + darr.d = RENEW_ARR(S, darr.d, type, darr.cap, __newsz); \ + darr.cap = __newsz; \ + } + +inline size_t next_pwrof2(size_t x) { + size_t p = 1; + while (p < x) p <<= 1; + return p; +} + #define FREE(S,p,ty) M(S, p, sizeof(ty), 0) #define FREE_ARR(S,p,ty,old) M(S, p, (old)*sizeof(ty), 0) -- cgit v1.2.3