aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cppawk-include/narg-priv.h98
-rw-r--r--cppawk-include/narg.h3
-rw-r--r--cppawk-narg.136
-rw-r--r--testcases-narg13
4 files changed, 150 insertions, 0 deletions
diff --git a/cppawk-include/narg-priv.h b/cppawk-include/narg-priv.h
index 2cacdaf..75fe226 100644
--- a/cppawk-include/narg-priv.h
+++ b/cppawk-include/narg-priv.h
@@ -247,6 +247,101 @@
a24, a25, a26, a27, a28, a29, a30, a31, a32) \
mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1), a2, 2), a3, 3), a4, 4), a5, 5), a6, 6), a7, 7), a8, 8), a9, 9), a10, 10), a11, 11), a12, 12), a13, 13), a14, 14), a15, 15), a16, 16), a17, 17), a18, 18), a19, 19), a20, 20), a21, 21), a22, 22), a23, 23), a24, 24), a25, 25), a26, 26), a27, 27), a28, 28), a29, 29), a30, 30), a31, 31), a32, 32)
+#define __repia_1(mac1, mac2, a, a1) \
+ mac1(a1, 1, a)
+#define __repia_2(mac1, mac2, a, a1, a2) \
+ mac2(mac1(a1, 1, a), a2, 2, a)
+#define __repia_3(mac1, mac2, a, a1, a2, a3) \
+ mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a)
+#define __repia_4(mac1, mac2, a, a1, a2, a3, a4) \
+ mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a)
+#define __repia_5(mac1, mac2, a, a1, a2, a3, a4, a5) \
+ mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a)
+#define __repia_6(mac1, mac2, a, a1, a2, a3, a4, a5, a6) \
+ mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a)
+#define __repia_7(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a)
+#define __repia_8(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a)
+#define __repia_9(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a)
+#define __repia_10(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a)
+#define __repia_11(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a)
+#define __repia_12(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a)
+#define __repia_13(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a)
+#define __repia_14(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a)
+#define __repia_15(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a)
+#define __repia_16(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a)
+#define __repia_17(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a)
+#define __repia_18(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a)
+#define __repia_19(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a)
+#define __repia_20(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a)
+#define __repia_21(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a)
+#define __repia_22(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a)
+#define __repia_23(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a)
+#define __repia_24(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a)
+#define __repia_25(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a)
+#define __repia_26(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a)
+#define __repia_27(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a)
+#define __repia_28(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a)
+#define __repia_29(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28, a29) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a), a29, 29, a)
+#define __repia_30(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28, a29, a30) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a), a29, 29, a), a30, 30, a)
+#define __repia_31(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28, a29, a30, a31) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a), a29, 29, a), a30, 30, a), a31, 31, a)
+#define __repia_32(mac1, mac2, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28, a29, a30, a31, a32) \
+ mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac2(mac1(a1, 1, a), a2, 2, a), a3, 3, a), a4, 4, a), a5, 5, a), a6, 6, a), a7, 7, a), a8, 8, a), a9, 9, a), a10, 10, a), a11, 11, a), a12, 12, a), a13, 13, a), a14, 14, a), a15, 15, a), a16, 16, a), a17, 17, a), a18, 18, a), a19, 19, a), a20, 20, a), a21, 21, a), a22, 22, a), a23, 23, a), a24, 24, a), a25, 25, a), a26, 26, a), a27, 27, a), a28, 28, a), a29, 29, a), a30, 30, a), a31, 31, a), a32, 32, a)
+
#define __varexpand(mac1, mac2, ...) \
__xcat(__repn_, __narg(__VA_ARGS__)) (mac1, mac2, __VA_ARGS__)
@@ -266,4 +361,7 @@
#define __variexpand(mac1, mac2, ...) \
__xcat(__repi_, __narg(__VA_ARGS__)) (mac1, mac2, __VA_ARGS__)
+#define __variaexpand(mac1, mac2, a, ...) \
+ __xcat(__repia_, __narg(__VA_ARGS__)) (mac1, mac2, a, __VA_ARGS__)
+
#endif
diff --git a/cppawk-include/narg.h b/cppawk-include/narg.h
index b5a6aa5..2ae0052 100644
--- a/cppawk-include/narg.h
+++ b/cppawk-include/narg.h
@@ -35,6 +35,9 @@
#define narg(...) __narg(__VA_ARGS__)
#define varexpand(first, rest, ...) __varexpand(first, rest, __VA_ARGS__)
#define variexpand(first, rest, ...) __variexpand(first, rest, __VA_ARGS__)
+#define variaexpand(first, rest, \
+ arg, ...) __variaexpand(first, rest, arg, \
+ __VA_ARGS__)
#define revarg(...) __revarg(__VA_ARGS__)
#define splice(args) __splice(args)
diff --git a/cppawk-narg.1 b/cppawk-narg.1
index 3c1d8a3..bd6c60e 100644
--- a/cppawk-narg.1
+++ b/cppawk-narg.1
@@ -12,6 +12,7 @@
#define splice(\fIargs\fP)
#define varexpand(\fIfirst_mac\fP, \fIrest_mac\fP, ...)
#define variexpand(\fIfirst_mac\fP, \fIrest_mac\fP, ...)
+ #define variaexpand(\fIfirst_mac\fP, \fIrest_mac\fP, \fIarg\fP, ...)
#define revarg(...)
.ft R
@@ -390,6 +391,41 @@ it with
.B __LINE__
and a prefix to generate unique variables.
+.IP \fBvariaexpand\fB
+One more macro in the
+.B varexpand
+family is
+.BR variaexpand .
+
+Like
+.BR variexpand ,
+.B variaexpand
+also passes the argument number to its child clauses.
+In addition to the argument number, it passes one more argument:
+a fixed argument specified in the
+.B variexpand
+invocation.
+
+For instance, suppose we wish to have a macro with the following properties:
+
+.ft B
+ series(\fIm\fP, \fIa\fP) \fI->\fP \fIm\fP(\fIa1\fP)
+ series(\fIm\fP, \fIa\fP, \fIb\fP) \fI->\fP \fIm\fP(\fIa1\fP) + \fIm\fP(\fIb2\fP)
+ series(\fIm\fP, \fIa\fP, \fIb\fP, \fIc\fP) \fI->\fP \fIm\fP(\fIa1\fP) + \fIm\fP(\fIb2\fP) + \fIm\fP(\fIc3\fP)
+.ft R
+
+In our expansion, we want the argument numbers to be put into correspondence
+with the arguments, and the argument
+.B x
+to be distributed into the terms:
+
+.ft B
+ #define series_first(\fIx\fP, \fIi\fP, \fIa\fP) \fIa\fP(\fIx\fP ## \fIi\fP)
+ #define series_next(\fIprev\fP, \fIx\fP, \fIi\fP, \fIa\fP) \fIprev\fP + \fIa\fP(\fIx\fP ## \fIi\fP)
+ #define series(\fIa\fP, ...) variaexpand(\fIseries_first\fP, \fIseries_next\fP, \e
+ \fIa\fP, __VA_ARGS__)
+.ft R
+
.SH BUGS
As noted in the DESCRIPTION, the
.BR narg ,
diff --git a/testcases-narg b/testcases-narg
index 97baac1..4babf22 100644
--- a/testcases-narg
+++ b/testcases-narg
@@ -83,3 +83,16 @@ $cppawk '
BEGIN { print scolonize(a), scolonize(a, b), scolonize(a, b, c) }'
:
[a1] [a1 : b2] [a1 : b2 : c3]
+--
+7:
+$cppawk '
+#include <narg.h>
+#define first(x, i, a) a-x ## i
+#define rest(prev, x, i, a) prev : a-x ## i
+#define colonize(a, ...) [variaexpand(first, rest, a, __VA_ARGS__)]
+#define str(x) #x
+#define xstr(x) str(x)
+#define scolonize(...) xstr(colonize(__VA_ARGS__))
+BEGIN { print scolonize(m, a), scolonize(n, a, b), scolonize(p, a, b, c) }'
+:
+[m-a1] [n-a1 : n-b2] [p-a1 : p-b2 : p-c3]