summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-03-29 06:48:10 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-03-29 06:48:10 -0700
commit51b96e84cfa8be259cf42666d23c6dbd239ac44b (patch)
tree6935dad7d0bc156db19c29a2b11b516ea8ac8173
parent706e9bc7983ebb54cfbd7f95b1e98252dfd0d558 (diff)
downloadtxr-51b96e84cfa8be259cf42666d23c6dbd239ac44b.tar.gz
txr-51b96e84cfa8be259cf42666d23c6dbd239ac44b.tar.bz2
txr-51b96e84cfa8be259cf42666d23c6dbd239ac44b.zip
args: new args reversing function.
* args.c (args_copy_reverse): New function. * args.h (args_copy_reverse): Declared.
-rw-r--r--args.c11
-rw-r--r--args.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/args.c b/args.c
index aa2139a7..c93d8108 100644
--- a/args.c
+++ b/args.c
@@ -117,6 +117,17 @@ struct args *args_cat_zap_from(struct args *to, struct args *from, cnum index)
return to;
}
+struct args *args_copy_reverse(struct args *to, struct args *from, cnum nargs)
+{
+ cnum i, index = 0;
+
+ for (i = nargs - 1; i >= 0; i--)
+ to->arg[i] = args_get(from, &index);
+
+ to->fill = nargs;
+ return to;
+}
+
val args_copy_to_list(struct args *args)
{
list_collect_decl (out, ptail);
diff --git a/args.h b/args.h
index 76aa10a1..df244e3b 100644
--- a/args.h
+++ b/args.h
@@ -187,6 +187,7 @@ struct args *args_copy(struct args *to, struct args *from);
struct args *args_copy_zap(struct args *to, struct args *from);
struct args *args_cat_zap(struct args *to, struct args *from);
struct args *args_cat_zap_from(struct args *to, struct args *from, cnum index);
+struct args *args_copy_reverse(struct args *to, struct args *from, cnum nargs);
val args_copy_to_list(struct args *args);
void args_for_each(struct args *args,
int (*fn)(val arg, int ix, mem_t *ctx),