Trim macro arg whitespace after line continuations

This commit is contained in:
ISSOtm
2022-06-09 00:01:19 +02:00
parent 3a71910312
commit d51ab35203
5 changed files with 48 additions and 5 deletions

View File

@@ -2052,9 +2052,23 @@ static int yylex_RAW(void)
size_t i = 0;
int c;
/* Trim left whitespace (stops at a block comment or line continuation) */
while (isWhitespace(peek()))
/* Trim left whitespace (stops at a block comment) */
for (;;) {
c = peek();
if (isWhitespace(c)) {
shiftChar();
} else if (c == '\\') {
shiftChar();
c = peek();
// If not a line continuation, handle as a normal char
if (!isWhitespace(c) && c != '\n' && c != '\r')
goto backslash;
// Line continuations count as "whitespace"
readLineContinuation();
} else {
break;
}
}
for (;;) {
c = peek();
@@ -2103,6 +2117,7 @@ static int yylex_RAW(void)
shiftChar();
c = peek();
backslash:
switch (c) {
case ',': /* Escapes only valid inside a macro arg */
case '(':

View File

@@ -0,0 +1,19 @@
MACRO print_all
REPT _NARG
PRINTLN "{d:_NARG}: \"\1\""
SHIFT
ENDR
ENDM
print_all a, \
b \
, c
DEF EMPTY equs ""
print_all a, \
{EMPTY} b \
{EMPTY}, c
print_all a, \
/* . */ b \
/* . */, c

View File

View File

@@ -0,0 +1,9 @@
3: "a"
2: "b"
1: "c"
3: "a"
2: "b"
1: "c"
3: "a"
2: " b"
1: "c"