diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-03-29 07:00:42 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-03-29 07:00:42 -0700 |
commit | c2287bfb8bdf1648ec2683b1a8e96547fcb43513 (patch) | |
tree | 915655bc6822e187b3c7b70372d05a55dfa8b16c | |
parent | 206a772af57912cc510796bfc3611ad8e2f77777 (diff) | |
download | cppawk-c2287bfb8bdf1648ec2683b1a8e96547fcb43513.tar.gz cppawk-c2287bfb8bdf1648ec2683b1a8e96547fcb43513.tar.bz2 cppawk-c2287bfb8bdf1648ec2683b1a8e96547fcb43513.zip |
nargs: add splice macro.
-rw-r--r-- | cppawk-include/narg-priv.h | 3 | ||||
-rw-r--r-- | cppawk-include/narg.h | 1 | ||||
-rw-r--r-- | testcases-narg | 14 |
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] |