Add stack walking to _do_gc
diff --git a/src/lisp/lisp.h b/src/lisp/lisp.h
index 48de7d4..1424abe 100644
--- a/src/lisp/lisp.h
+++ b/src/lisp/lisp.h
@@ -39,18 +39,22 @@
struct cons
{
- int magic;
- int marked; // must be reserved
value_t car, cdr;
};
-struct alloc_list
+struct alloc
{
- int type;
- union {
- struct cons *cons_val;
- };
- struct alloc_list *next, *prev;
+ unsigned int type_tag;
+ struct alloc *prev, *next;
+ unsigned int marked;
+
+ // Whatever else
+};
+
+struct cons_alloc
+{
+ struct alloc alloc;
+ struct cons cons;
};
bool startswith(struct istream *s, char *pattern);
@@ -78,6 +82,7 @@
bool consp(value_t v);
bool listp(value_t v);
bool nilp(value_t v);
+bool heapp(value_t v);
int length(value_t v);
value_t elt(value_t v, int index);