commit cf5e98818f37f0bdafd10881d5538d80b8cd9ac7
parent 340fa4b70555fe29c3d0db26bdf58c2021cd7d79
Author: Ed van Bruggen <edvb@uw.edu>
Date:   Sun, 18 Oct 2020 00:16:16 -0700
Add max argument C macro for built-ins
Diffstat:
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/tib/io.c b/tib/io.c
@@ -64,8 +64,7 @@ static Val
 prim_read(Tsp st, Hash env, Val args)
 {
 	char *file, *fname = NULL; /* read from stdin by default */
-	if (list_len(args) > 1)
-		tsp_warnf("read: expected 0 or 1 argument, received %d", list_len(args));
+	tsp_arg_max(args, "read", 1);
 	if (list_len(args) == 1) { /* if file name given as string, read it */
 		tsp_arg_type(car(args), "read", TSP_STR);
 		fname = car(args)->v.s;
diff --git a/tisp.h b/tisp.h
@@ -34,6 +34,11 @@
 		tsp_warnf("%s: expected at least %d argument%s, received %d",  \
 		           NAME, NARGS, NARGS > 1 ? "s" : "", list_len(ARGS)); \
 } while(0)
+#define tsp_arg_max(ARGS, NAME, NARGS) do {                                          \
+	if (list_len(ARGS) > NARGS)                                                  \
+		tsp_warnf("%s: expected at no more than %d argument%s, received %d", \
+		           NAME, NARGS, NARGS > 1 ? "s" : "", list_len(ARGS));       \
+} while(0)
 #define tsp_arg_num(ARGS, NAME, NARGS) do {                                    \
 	if (list_len(ARGS) != NARGS && NARGS != -1)                            \
 		tsp_warnf("%s: expected %d argument%s, received %d",           \