summaryrefslogtreecommitdiffstats
path: root/gc.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-03-31 06:18:20 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-03-31 06:18:20 -0700
commit5fbacce2db6e38384adb650ce32af7c2dcbcbe95 (patch)
tree0311c9d2c20936ce627a82f6db9b191cc81b526a /gc.h
parent34bc9081f5f95217b2bd544f6601d48b682297c6 (diff)
downloadtxr-5fbacce2db6e38384adb650ce32af7c2dcbcbe95.tar.gz
txr-5fbacce2db6e38384adb650ce32af7c2dcbcbe95.tar.bz2
txr-5fbacce2db6e38384adb650ce32af7c2dcbcbe95.zip
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.
Diffstat (limited to 'gc.h')
-rw-r--r--gc.h3
1 files changed, 3 insertions, 0 deletions
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)