diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-11-16 20:16:27 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-11-20 16:17:18 -0800 |
commit | 709587d9f92d8c49be0a2c532776900bc41e1ff1 (patch) | |
tree | 89fc3fb33119f5a5e515abe900d8276f4b79f86c /args.h | |
parent | 8b0f773dad83e5d7bb07ae391352b6ffb7aa5937 (diff) | |
download | txr-709587d9f92d8c49be0a2c532776900bc41e1ff1.tar.gz txr-709587d9f92d8c49be0a2c532776900bc41e1ff1.tar.bz2 txr-709587d9f92d8c49be0a2c532776900bc41e1ff1.zip |
Combat spurious retention in args handling code.
* args.c (args_normalize): Zap the argument in the array
when moving it over to the list.
* args.h (args_atz): When zapping the argument in the list,
zap the actual car field, rather than the list itself. It seems there is a
copy of the list somewhere, so zapping it is not effective.
Diffstat (limited to 'args.h')
-rw-r--r-- | args.h | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -143,9 +143,12 @@ INLINE val args_at(struct args *args, cnum arg_index) INLINE val args_atz(struct args *args, cnum arg_index) { - if (arg_index < args->fill) + if (arg_index < args->fill) { return z(args->arg[arg_index]); - return car(z(args->list)); + } else { + loc l = car_l(args->list); + return zap(valptr(l)); + } } INLINE val args_get(struct args *args, cnum *arg_index) |