projects
/
muddle-interpreter.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Change pointers for heap allocation
[muddle-interpreter.git]
/
src
/
alloc.c
diff --git
a/src/alloc.c
b/src/alloc.c
index 413490c660b27ea43a06d32bc6dd919e261328f0..ad55630b7a0c8ddb75174c8d476a771b442c3ebe 100644
(file)
--- 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 pool_object *pool;
extern pool_ptr ptop;
+extern object *vhp_base;
+extern heap_ptr vhp;
+
pool_ptr
pool_alloc (uint32_t len)
{
pool_ptr
pool_alloc (uint32_t len)
{
@@
-55,13
+58,31
@@
pool_copy_array_rev (const pool_object * objs, uint32_t len)
return p;
}
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)
{
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];
}
for (int i = 0; i < (int) len; i++)
{
xs[i] = objs[len - 1 - (unsigned) i];
}
- return
HEAP_PTR_OF_OBJECT (xs)
;
+ return
p
;
}
}