return poly & AO_LISP_CONST;
}
-#define AO_LISP_POOL_BASE (ao_lisp_pool - 4)
-#define AO_LISP_CONST_BASE (ao_lisp_const - 4)
-
#define AO_LISP_IS_CONST(a) (ao_lisp_const <= ((uint8_t *) (a)) && ((uint8_t *) (a)) < ao_lisp_const + AO_LISP_POOL_CONST)
#define AO_LISP_IS_POOL(a) (ao_lisp_pool <= ((uint8_t *) (a)) && ((uint8_t *) (a)) < ao_lisp_pool + AO_LISP_POOL)
#define AO_LISP_FRAME_MARK 0x80
static inline int ao_lisp_frame_num(struct ao_lisp_frame *f) {
- if (f->_num == 0xff)
- ao_lisp_abort();
return f->_num & AO_LISP_FRAME_NUM_MASK;
}
static inline int ao_lisp_frame_marked(struct ao_lisp_frame *f) {
- if (f->_num == 0xff)
- ao_lisp_abort();
return f->_num & AO_LISP_FRAME_MARK;
}
static inline struct ao_lisp_frame *
ao_lisp_poly_frame(ao_poly poly) {
- struct ao_lisp_frame *frame = ao_lisp_ref(poly);
- if (frame && frame->_num == 0xff)
- ao_lisp_abort();
return ao_lisp_ref(poly);
}
/* memory functions */
-extern int ao_lisp_collects;
+extern int ao_lisp_collects[2];
+extern int ao_lisp_freed[2];
+extern int ao_lisp_loops[2];
/* returns 1 if the object was already marked */
int
void *
ao_lisp_alloc(int size);
-void
-ao_lisp_collect(void);
+#define AO_LISP_COLLECT_FULL 1
+#define AO_LISP_COLLECT_INCREMENTAL 0
+
+int
+ao_lisp_collect(uint8_t style);
void
ao_lisp_cons_stash(int id, struct ao_lisp_cons *cons);