diff options
-rw-r--r-- | lib.c | 29 |
1 files changed, 10 insertions, 19 deletions
@@ -1476,13 +1476,12 @@ val rmember_if(val pred, val list, val key) return found; } -val remq(val obj, val list) +val remq(val obj, val list_orig) { list_collect_decl (out, ptail); - val list_orig = list; + val list = tolist(list_orig); val lastmatch = cons(nil, list); - list = nullify(list); gc_hint(list); @@ -1496,14 +1495,12 @@ val remq(val obj, val list) return make_like(out, list_orig); } -val remql(val obj, val list) +val remql(val obj, val list_orig) { list_collect_decl (out, ptail); - val list_orig = list; + val list = tolist(list_orig); val lastmatch = cons(nil, list); - list = nullify(list); - gc_hint(list); for (; list; list = cdr(list)) { @@ -1516,14 +1513,12 @@ val remql(val obj, val list) return make_like(out, list_orig); } -val remqual(val obj, val list) +val remqual(val obj, val list_orig) { list_collect_decl (out, ptail); - val list_orig = list; + val list = tolist(list_orig); val lastmatch = cons(nil, list); - list = nullify(list); - gc_hint(list); for (; list; list = cdr(list)) { @@ -1536,16 +1531,14 @@ val remqual(val obj, val list) return make_like(out, list_orig); } -val remove_if(val pred, val list, val key) +val remove_if(val pred, val list_orig, val key) { list_collect_decl (out, ptail); - val list_orig = list; + val list = tolist(list_orig); val lastmatch = cons(nil, list); key = default_arg(key, identity_f); - list = nullify(list); - gc_hint(list); for (; list; list = cdr(list)) { @@ -1561,16 +1554,14 @@ val remove_if(val pred, val list, val key) return make_like(out, list_orig); } -val keep_if(val pred, val list, val key) +val keep_if(val pred, val list_orig, val key) { list_collect_decl (out, ptail); - val list_orig = list; + val list = tolist(list_orig); val lastmatch = cons(nil, list); key = default_arg(key, identity_f); - list = nullify(list); - gc_hint(list); for (; list; list = cdr(list)) { |