From 5fbacce2db6e38384adb650ce32af7c2dcbcbe95 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 31 Mar 2015 06:18:20 -0700 Subject: Deal with spurious retention in function application. * gc.h (zap): New inline function. (z): New macro. * lib.c (generic_funcall, funcall1, funcall2, funcall4, do_not, do_dup, do_iff): Use z macro to burn funargs with no next use. * eval.c (apply, apply_frob_args, iapply, call, do_eval, op_dwim, mapcarv, mappendv, lazy_mapcarv_func, mapdov, do_apf, do_ipf, callf): Use z macro to burn funargs with no next use. --- gc.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gc.h') diff --git a/gc.h b/gc.h index a8070012..cf53f272 100644 --- a/gc.h +++ b/gc.h @@ -55,3 +55,6 @@ extern val break_obj; #define gc_hint(var) gc_hint_func(&var) #define REACHABLE 0x100 #define FREE 0x200 + +INLINE val zap(volatile val *loc) { val ret = *loc; *loc = nil; return ret; } +#define z(lvalue) zap(&lvalue) -- cgit v1.2.3