aboutsummaryrefslogtreecommitdiff
path: root/tccpp.c
diff options
context:
space:
mode:
Diffstat (limited to 'tccpp.c')
-rw-r--r--tccpp.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/tccpp.c b/tccpp.c
index 64c4919..cbc3707 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -1328,6 +1328,8 @@ ST_FUNC void parse_define(void)
parse_flags |= PARSE_FLAG_SPACES;
next_nomacro_spc();
if (tok == '(') {
+ /* must be able to parse TOK_DOTS (in asm mode '.' can be part of identifier) */
+ parse_flags &= ~PARSE_FLAG_ASM_FILE;
next_nomacro();
ps = &first;
if (tok != ')') for (;;) {
@@ -1355,6 +1357,7 @@ ST_FUNC void parse_define(void)
}
next_nomacro_spc();
t = MACRO_FUNC;
+ parse_flags |= (saved_parse_flags & PARSE_FLAG_ASM_FILE);
}
tok_str_new(&str);
spc = 2;
@@ -2460,7 +2463,8 @@ maybe_newline:
p1 = p;
h = TOK_HASH_INIT;
h = TOK_HASH_FUNC(h, c);
- while (c = *++p, isidnum_table[c - CH_EOF] & (IS_ID|IS_NUM))
+ while (c = *++p, (isidnum_table[c - CH_EOF] & (IS_ID|IS_NUM))
+ || (c == '.' && (parse_flags & PARSE_FLAG_ASM_FILE)))
h = TOK_HASH_FUNC(h, c);
if (c != '\\') {
TokenSym **pts;
@@ -2492,7 +2496,9 @@ maybe_newline:
p--;
PEEKC(c, p);
parse_ident_slow:
- while (isidnum_table[c - CH_EOF] & (IS_ID|IS_NUM)) {
+ while ((isidnum_table[c - CH_EOF] & (IS_ID|IS_NUM))
+ || (c == '.' && (parse_flags & PARSE_FLAG_ASM_FILE)))
+ {
cstr_ccat(&tokcstr, c);
PEEKC(c, p);
}
@@ -2551,7 +2557,7 @@ maybe_newline:
cstr_reset(&tokcstr);
cstr_ccat(&tokcstr, '.');
goto parse_num;
- } else if ((isidnum_table['.' - CH_EOF] & IS_ID) != 0) { /* asm mode */
+ } else if (parse_flags & PARSE_FLAG_ASM_FILE) {
*--p = c = '.';
goto parse_ident_fast;
} else if (c == '.') {