diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-04-12 23:00:11 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-04-12 23:00:11 -0700 |
commit | a82b2fbeaa96e3e9531f929bb067448260495d19 (patch) | |
tree | 29a9de3a6ebfddee7a15a1ec809956f0ad80d0f3 /cppawk-narg.1 | |
parent | 768e1ae91c76af878dbbd93833ad49ae98da6260 (diff) | |
download | cppawk-a82b2fbeaa96e3e9531f929bb067448260495d19.tar.gz cppawk-a82b2fbeaa96e3e9531f929bb067448260495d19.tar.bz2 cppawk-a82b2fbeaa96e3e9531f929bb067448260495d19.zip |
narg: new variaexpand macro.
Diffstat (limited to 'cppawk-narg.1')
-rw-r--r-- | cppawk-narg.1 | 36 |
1 files changed, 36 insertions, 0 deletions
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 , |