Fix tokenization of TOK_DOTS

We really need to use PEEKC during tokenization so as to
skip line continuations automatically.
master
Michael Matz 2016-03-24 15:58:32 +01:00
parent f85db99ff0
commit 8fc5a6a2a4
2 changed files with 14 additions and 3 deletions

12
tccpp.c
View File

@ -2553,9 +2553,15 @@ maybe_newline:
} else if ((isidnum_table['.' - CH_EOF] & IS_ID) != 0) { /* asm mode */
*--p = c = '.';
goto parse_ident_fast;
} else if (c == '.' && p[1] == '.') {
p += 2;
tok = TOK_DOTS;
} else if (c == '.') {
PEEKC(c, p);
if (c == '.') {
p++;
tok = TOK_DOTS;
} else {
*--p = '.'; /* may underflow into file->unget[] */
tok = '.';
}
} else {
tok = '.';
}

View File

@ -114,6 +114,11 @@ void num(int n);
void forward_ref(void);
int isid(int c);
/* Line joining happens before tokenization, so the following
must be parsed as ellipsis. */
void funny_line_continuation (int, ..\
. );
#define A 2
#define N 1234 + A
#define pf printf