aboutsummaryrefslogtreecommitdiff
path: root/tccpp.c
diff options
context:
space:
mode:
authorseyko <seyko2@gmail.com>2015-04-20 03:44:08 +0300
committerseyko <seyko2@gmail.com>2015-04-20 03:44:08 +0300
commit5ce2154c74d770b4e4c1fb0868f744418a90df80 (patch)
tree16ef3870ea2cd1b4ecb097fdf9c0efa9eafda3ee /tccpp.c
parent9336fa7ae50ef60cb0049136a7831e7e8d94a20a (diff)
downloadtinycc-5ce2154c74d770b4e4c1fb0868f744418a90df80.tar.gz
tinycc-5ce2154c74d770b4e4c1fb0868f744418a90df80.tar.bz2
-fdollar-in-identifiers addon
* disable a -fdollar-in-identifiers option in assembler files * a test is added This is a patch addon from Daniel Holden.
Diffstat (limited to 'tccpp.c')
-rw-r--r--tccpp.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/tccpp.c b/tccpp.c
index b0f4102..42ebf48 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -2313,9 +2313,11 @@ maybe_newline:
}
break;
- /* treat $ as allowed char in indentifier */
- case '$': if (!tcc_state->dollars_in_identifiers) goto parse_simple;
-
+ /* dollar is allowed to start identifiers when not parsing asm */
+ case '$':
+ if (!tcc_state->dollars_in_identifiers
+ || (parse_flags & PARSE_FLAG_ASM_FILE)) goto parse_simple;
+
case 'a': case 'b': case 'c': case 'd':
case 'e': case 'f': case 'g': case 'h':
case 'i': case 'j': case 'k': case 'l':
@@ -2338,7 +2340,8 @@ maybe_newline:
p++;
for(;;) {
c = *p;
- if (!isidnum_table[c-CH_EOF])
+ if (!isidnum_table[c-CH_EOF]
+ && (tcc_state->dollars_in_identifiers ? (c != '$') : 1))
break;
h = TOK_HASH_FUNC(h, c);
p++;
@@ -2373,7 +2376,8 @@ maybe_newline:
p--;
PEEKC(c, p);
parse_ident_slow:
- while (isidnum_table[c-CH_EOF]) {
+ while (isidnum_table[c-CH_EOF]
+ || (tcc_state->dollars_in_identifiers ? (c == '$') : 0)) {
cstr_ccat(&tokcstr, c);
PEEKC(c, p);
}
@@ -3202,9 +3206,9 @@ ST_FUNC void preprocess_new(void)
const char *p, *r;
/* init isid table */
+
for(i=CH_EOF;i<256;i++)
- isidnum_table[i-CH_EOF] = (isid(i) || isnum(i) ||
- (tcc_state->dollars_in_identifiers ? i == '$' : 0));
+ isidnum_table[i-CH_EOF] = isid(i) || isnum(i);
/* add all tokens */
if (table_ident) {