Naddy told me about an app that wants a gnu-m4 extension that
requires >9 arguments to macros.
I wrote a very quick patch that seems to do the work. There are probably
lots of kinks to work out, it's been very lightly tested.
(in particular, I haven't looked at stuff like $* and friends yet, maybe
they work, maybe they won't)
But if anyone requires this type of functionality, I'd like them to chime
in.
Index: eval.c
===================================================================
RCS file: /cvs/src/usr.bin/m4/eval.c,v
retrieving revision 1.78
diff -u -p -r1.78 eval.c
--- eval.c 28 Jun 2019 05:35:34 -0000 1.78
+++ eval.c 8 Jun 2022 13:03:29 -0000
@@ -40,6 +40,7 @@
*/
#include <sys/types.h>
+#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <limits.h>
@@ -542,6 +543,21 @@ expand_macro(const char *argv[], int arg
p++;
p--; /* last character of defn */
while (p > t) {
+ if (mimic_gnu && isdigit(*p)) {
+ const char *pos = p;
+ int mult = 1;
+ argno = 0;
+ while (isdigit(*pos) && pos > t) {
+ argno += mult * (*pos - '0');
+ mult *= 10;
+ pos--;
+ }
+ if (*pos == ARGFLAG && argno < argc -1) {
+ pbstr(argv[argno + 1]);
+ p = pos-1;
+ continue;
+ }
+ }
if (*(p - 1) != ARGFLAG)
PUSHBACK(*p);
else {