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);