extern pool_object *pool;
extern pool_ptr ptop;
+extern object *vhp_base;
+extern heap_ptr vhp;
+
pool_ptr
pool_alloc (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;
}