From c636a168cd57ca5db253db7a0907f06621a6991e Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 20 Apr 2016 06:19:04 -0700 Subject: Mechanism for recycling conses outside of GC. * lib.c (recycled_conses): New static variable. (rcyc_pop, rcyc_cons, rcyc_list, rcyc_empty): New functions. (cons): Take a recycled cons, if available. * lib.h (rcyc_pop, rcyc_cons, rcyc_list, rcyc_empty): Declared. * gc.c (gc): Call rcyc_empty to make recycle_list unreachable. --- lib.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib.h') diff --git a/lib.h b/lib.h index 51d51fc6..e84e5eac 100644 --- a/lib.h +++ b/lib.h @@ -501,6 +501,7 @@ val nthcdr(val pos, val list); loc ltail(loc cons); val pop(val *plist); val upop(val *plist, val *pundo); +val rcyc_pop(val *plist); val push(val v, val *plist); val copy_list(val list); val make_like(val list, val thatobj); @@ -577,6 +578,9 @@ mem_t *chk_copy_obj(mem_t *orig, size_t size); val cons(val car, val cdr); val make_lazy_cons(val func); val make_half_lazy_cons(val func, val car); +void rcyc_cons(val cons); +void rcyc_list(val list); +void rcyc_empty(void); val lcons_fun(val lcons); val list(val first, ...); /* terminated by nao */ val listv(struct args *); -- cgit v1.2.3