X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Flisp%2Fao_lisp.h;h=bcefbabf76abeae8fb3b2fae8166bc48c362660d;hb=11c79167cdd56015bbd1645db2d4394dcb4f0fbb;hp=bcb0a17fa7dfd8ba102d52f295b0e79abe5a97fc;hpb=881161fe1c5fb0e2b1220c30572eb2c45bedbafe;p=fw%2Faltos diff --git a/src/lisp/ao_lisp.h b/src/lisp/ao_lisp.h index bcb0a17f..bcefbabf 100644 --- a/src/lisp/ao_lisp.h +++ b/src/lisp/ao_lisp.h @@ -118,9 +118,6 @@ ao_lisp_is_const(ao_poly poly) { 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) @@ -167,22 +164,15 @@ struct ao_lisp_frame { #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); } @@ -421,7 +411,9 @@ ao_lisp_builtin_poly(struct ao_lisp_builtin *b) /* 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 @@ -445,8 +437,11 @@ ao_lisp_move_memory(const struct ao_lisp_type *type, void **ref); 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);