aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-03-29 07:00:42 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-03-29 07:00:42 -0700
commitc2287bfb8bdf1648ec2683b1a8e96547fcb43513 (patch)
tree915655bc6822e187b3c7b70372d05a55dfa8b16c
parent206a772af57912cc510796bfc3611ad8e2f77777 (diff)
downloadcppawk-c2287bfb8bdf1648ec2683b1a8e96547fcb43513.tar.gz
cppawk-c2287bfb8bdf1648ec2683b1a8e96547fcb43513.tar.bz2
cppawk-c2287bfb8bdf1648ec2683b1a8e96547fcb43513.zip
nargs: add splice macro.
-rw-r--r--cppawk-include/narg-priv.h3
-rw-r--r--cppawk-include/narg.h1
-rw-r--r--testcases-narg14
3 files changed, 18 insertions, 0 deletions
diff --git a/cppawk-include/narg-priv.h b/cppawk-include/narg-priv.h
index 998fac5..6a96080 100644
--- a/cppawk-include/narg-priv.h
+++ b/cppawk-include/narg-priv.h
@@ -159,4 +159,7 @@
#define __rev_next(args, arg) arg, args
#define __revarg(...) __varexpand(__rev_first, __rev_next, __VA_ARGS__)
+#define __va_args(...) __VA_ARGS__
+#define __splice(args) __va_args args
+
#endif
diff --git a/cppawk-include/narg.h b/cppawk-include/narg.h
index ce38b37..8aa511a 100644
--- a/cppawk-include/narg.h
+++ b/cppawk-include/narg.h
@@ -35,5 +35,6 @@
#define narg(...) __narg(__VA_ARGS__)
#define varexpand(mac1, mac2, ...) __varexpand(mac1, mac2, __VA_ARGS__)
#define revarg(...) __revarg(__VA_ARGS__)
+#define splice(args) __splice(args)
#endif
diff --git a/testcases-narg b/testcases-narg
index c275e42..67ccee6 100644
--- a/testcases-narg
+++ b/testcases-narg
@@ -41,3 +41,17 @@ $cppawk '
BEGIN { print srev(1), srev(1,2), srev(1, 2, 3) }'
:
(1) (2, 1) (3, 2, 1)
+--
+5:
+$cppawk '
+#include <narg.h>
+#define first(x) x
+#define rest(prev, x) prev : x
+#define colonize(...) [varexpand(first, rest, __VA_ARGS__)]
+#define str(x) #x
+#define xstr(x) str(x)
+#define scolonize(...) xstr(colonize(__VA_ARGS__))
+#define scol(x, rest) scolonize(x, splice(rest))
+BEGIN { print scol(1, (2, 3)) }'
+:
+[1 : 2 : 3]