X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Falloc.c;h=24f102b2f7ca94585ea04154f81b015fcfcc74ad;hb=6c1eef40f411ff4eec7a3f7599a81be7fae07e2a;hp=7209060bf612d300620c0679c9274da596496acf;hpb=e4ebdd89c0374cc420bc404298ff50f2c64ea328;p=muddle-interpreter.git diff --git a/src/alloc.c b/src/alloc.c index 7209060..24f102b 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -19,20 +19,40 @@ License along with this file. If not, see #include "alloc.h" #include "object.h" +extern pool_object *pool; +extern pool_ptr ptop; + +pool_ptr +pool_alloc (uint32_t len) +{ + pool_ptr p = ptop; + ptop += len; + return p; +} + +pool_object * +POOL_OBJECT (pool_ptr p) +{ + if (!p) + return (pool_object *) 0; + return &pool[p]; +} + pool_ptr pool_copy_array_rev (const pool_object * objs, uint32_t len) { if (!len) return 0; - pool_object *xs = pool_alloc (len); - for (int i = 0; i < (int) len; i++) + pool_ptr p = pool_alloc (len); + for (int i = 0; i < len; i++) { - xs[i].type = objs[len - 1 - (unsigned) i].type; - xs[i].rest = POOL_PTR (&xs[i + 1]); - xs[i].val = objs[len - 1 - (unsigned) i].val; + pool[p + i] = (pool_object) + { + .type = objs[len - i - 1].type,.rest = p + i + 1,.val = + objs[len - i - 1].val}; } - xs[len - 1].rest = 0; - return POOL_PTR (xs); + pool[p + len - 1].rest = 0; + return p; } heap_ptr