mirror of
https://github.com/frida/tinycc
synced 2024-12-25 14:36:49 +03:00
Fix parsing function macro invocations
If a function macro name is separated from the parentheses in an macro invocation the substitution doesn't take place. Fix this by handling comments.
This commit is contained in:
parent
15f4ac2b1a
commit
4c0d70ab07
21
tccpp.c
21
tccpp.c
@ -2697,10 +2697,25 @@ static int macro_subst_tok(TokenString *tok_str,
|
||||
goto redo;
|
||||
}
|
||||
} else {
|
||||
/* XXX: incorrect with comments */
|
||||
ch = file->buf_ptr[0];
|
||||
while (is_space(ch) || ch == '\n')
|
||||
cinp();
|
||||
while (is_space(ch) || ch == '\n' || ch == '/')
|
||||
{
|
||||
if (ch == '/')
|
||||
{
|
||||
int c;
|
||||
uint8_t *p = file->buf_ptr;
|
||||
PEEKC(c, p);
|
||||
if (c == '*') {
|
||||
p = parse_comment(p);
|
||||
file->buf_ptr = p - 1;
|
||||
} else if (c == '/') {
|
||||
p = parse_line_comment(p);
|
||||
file->buf_ptr = p - 1;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
cinp();
|
||||
}
|
||||
t = ch;
|
||||
}
|
||||
if (t != '(') /* no macro subst */
|
||||
|
@ -288,6 +288,10 @@ comment
|
||||
/* test function macro substitution when the function name is
|
||||
substituted */
|
||||
TEST2();
|
||||
|
||||
/* And again when the name and parenthes are separated by a
|
||||
comment. */
|
||||
TEST2 /* the comment */ ();
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user