summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib.c22
-rw-r--r--lib.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 98e80315..22135f89 100644
--- a/lib.c
+++ b/lib.c
@@ -6668,6 +6668,28 @@ val vectorv(struct args *args)
return vec;
}
+val vec(val first, ...)
+{
+ va_list vl;
+ val vec = vector(zero, nil);
+ val next;
+ int count;
+
+ va_start (vl, first);
+
+ for (next = first, count = 0;
+ next != nao && count < 32;
+ next = va_arg(vl, val), count++)
+ {
+ vec_push(vec, next);
+ }
+
+ if (count == 32 && next != nao)
+ internal_error("runaway arguments in vec function");
+
+ return vec;
+}
+
val vec_list(val list)
{
val vec = vector(zero, nil);
diff --git a/lib.h b/lib.h
index 5f44eb41..2e374e7c 100644
--- a/lib.h
+++ b/lib.h
@@ -893,6 +893,7 @@ val vec_push(val vec, val item);
val length_vec(val vec);
val size_vec(val vec);
val vectorv(struct args *);
+val vec(val first, ...);
val vec_list(val list);
val list_vec(val vector);
val copy_vec(val vec);