Implement EVAL for LISTs
[muddle-interpreter.git] / src / alloc.c
index 7209060bf612d300620c0679c9274da596496acf..24f102b2f7ca94585ea04154f81b015fcfcc74ad 100644 (file)
@@ -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