X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Falloc.c;fp=src%2Falloc.c;h=ad55630b7a0c8ddb75174c8d476a771b442c3ebe;hb=3eadff410d2d08246d6f195ef209ed9d88c99be5;hp=413490c660b27ea43a06d32bc6dd919e261328f0;hpb=dc15bc8fe3c6bdfc54c7117ae8af0aaf7839690f;p=muddle-interpreter.git diff --git a/src/alloc.c b/src/alloc.c index 413490c..ad55630 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -22,6 +22,9 @@ License along with this file. If not, see extern pool_object *pool; extern pool_ptr ptop; +extern object *vhp_base; +extern heap_ptr vhp; + pool_ptr pool_alloc (uint32_t len) { @@ -55,13 +58,31 @@ pool_copy_array_rev (const pool_object * objs, uint32_t len) return p; } +object * +HEAP_OBJECT (heap_ptr p) +{ + assert (p > 0); + return &vhp_base[p]; +} + +heap_ptr +heap_alloc (uint32_t len) +{ + enum + { DOPE_LEN = 1 }; + heap_ptr p = vhp; + vhp += len + DOPE_LEN; + return p; +} + heap_ptr heap_copy_array_rev (const object * objs, uint32_t len) { - object *xs = heap_alloc (len); + heap_ptr p = heap_alloc (len); + object *xs = HEAP_OBJECT (p); for (int i = 0; i < (int) len; i++) { xs[i] = objs[len - 1 - (unsigned) i]; } - return HEAP_PTR_OF_OBJECT (xs); + return p; }