mirror of
https://github.com/open-simh/simtools.git
synced 2026-01-13 23:36:03 +00:00
A trailing comma in a macro call is an empty argument
which should also be counted for the purposes of .NARG.
This commit is contained in:
parent
2488e02aae
commit
b45cf742f7
7
macros.c
7
macros.c
@ -414,14 +414,16 @@ STREAM *expandmacro(
|
||||
STREAM *str;
|
||||
BUFFER *buf;
|
||||
int nargs;
|
||||
int onemore;
|
||||
|
||||
args = NULL;
|
||||
arg = NULL;
|
||||
nargs = 0; /* for the .NARG directive */
|
||||
onemore = 0;
|
||||
|
||||
/* Parse the arguments */
|
||||
|
||||
while (!EOL(*cp)) {
|
||||
while (!EOL(*cp) || onemore) {
|
||||
char *nextcp;
|
||||
|
||||
/* Check for named argument */
|
||||
@ -464,7 +466,8 @@ STREAM *expandmacro(
|
||||
|
||||
eval_arg(refstr, arg); /* Check for expression evaluation */
|
||||
|
||||
cp = skipdelim(nextcp);
|
||||
/* If there is a trailing comma, there is an empty last argument */
|
||||
cp = skipdelim_comma(nextcp, &onemore);
|
||||
}
|
||||
|
||||
/* Now go back and fill in defaults */ {
|
||||
|
||||
15
parse.c
15
parse.c
@ -35,6 +35,21 @@ char *skipdelim(
|
||||
return cp;
|
||||
}
|
||||
|
||||
/* skipdelim_comma - used to advance between tokens. Whitespace
|
||||
and one comma are allowed delims.
|
||||
Set *comma depending on whether a comma was skipped. */
|
||||
|
||||
char *skipdelim_comma(
|
||||
char *cp,
|
||||
int *comma)
|
||||
{
|
||||
cp = skipwhite(cp);
|
||||
if (*comma = (*cp == ',')) {
|
||||
cp = skipwhite(cp + 1);
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
/* Parses a string from the input stream. */
|
||||
/* If not bracketed by <...> or ^/.../, then */
|
||||
/* the string is delimited by trailing comma or whitespace. */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user