static const char *bufend;
static const char *bufpos;
static strset_t stringset;
+bool allow_dollar_in_symbol = true;
/**
* Prints a parse error message at the current token.
}
#define SYMBOL_CHARS \
+ case '$': if (!allow_dollar_in_symbol) goto dollar_sign; \
case 'a': \
case 'b': \
case 'c': \
case 'X': \
case 'Y': \
case 'Z': \
- case '_': \
- case '$': // TODO add option to deactivate $ in identifers
+ case '_':
#define DIGITS \
case '0': \
break;
default:
+dollar_sign:
goto end_symbol;
}
}
int ec = c;
next_char();
- switch(ec) {
+ switch (ec) {
case '"': return '"';
case '\'': return '\'';
case '\\': return '\\';
case EOF:
parse_error("reached end of file while parsing escape sequence");
return EOF;
+ case 'e':
+ if (c_mode & _GNUC)
+ return 27; /* hopefully 27 is ALWAYS the code for ESACAPE */
+ /*fallthrough*/
default:
parse_error("unknown escape sequence");
return EOF;
return;
default:
+dollar_sign:
errorf(&lexer_token.source_position, "unknown character '%c' found", c);
next_char();
lexer_token.type = T_ERROR;