Support /* block comments */ in macro arguments

Fixes #746
This commit is contained in:
Rangi
2021-02-17 16:30:03 -05:00
committed by Rangi
parent e7d6ddf593
commit fad48326f8
4 changed files with 42 additions and 1 deletions

View File

@@ -903,7 +903,7 @@ restart:
char const *str = readMacroArg(c); char const *str = readMacroArg(c);
/* /*
* If the argument is an empty string, it cannot be * If the macro arg is an empty string, it cannot be
* expanded, so skip it and keep peeking. * expanded, so skip it and keep peeking.
*/ */
if (!str[0]) { if (!str[0]) {
@@ -2164,6 +2164,16 @@ static int yylex_RAW(void)
dbgPrint("Read raw string \"%s\"\n", yylval.tzString); dbgPrint("Read raw string \"%s\"\n", yylval.tzString);
return T_STRING; return T_STRING;
case '/': /* Block comments inside macro args */
shiftChars(1); /* Shift the slash */
if (peek(0) == '*') {
shiftChars(1);
discardBlockComment();
continue;
}
append_yylval_tzString(c); /* Append the slash */
break;
case '\\': /* Character escape */ case '\\': /* Character escape */
shiftChars(1); /* Shift the backslash */ shiftChars(1); /* Shift the backslash */
c = peek(0); c = peek(0);

View File

@@ -0,0 +1,16 @@
mac: MACRO
println "'mac \#':"
for i, _NARG
println strfmt("\\%d: <\1>", i+1)
shift
endr
println
ENDM
mac /* block
...comment */ ; comment
mac /*a*/ 1 , 2 /*b*/
mac \
c, d
mac 1, 2 + /* another ;
; comment */ 2, 3

View File

View File

@@ -0,0 +1,15 @@
'mac ':
'mac 1,2':
\1: < 1>
\2: <2>
'mac c,d':
\1: < c>
\2: <d>
'mac 1,2 + 2,3':
\1: <1>
\2: <2 + 2>
\3: <3>