static int c;
token_t lexer_token;
+symbol_t *symbol_L;
static FILE *input;
static char buf[1024 + MAX_PUTBACK];
static const char *bufend;
lexer_token.source_position.linenr++; \
code;
-static inline void eat(char c_type)
-{
- assert(c == c_type);
- next_char();
-}
+#define eat(c_type) do { assert(c == c_type); next_char(); } while(0)
static void maybe_concat_lines(void)
{
{
next_real_char();
+#if 0
/* filter trigraphs */
if(UNLIKELY(c == '\\')) {
maybe_concat_lines();
}
end_of_next_char:
+#endif
+ (void) maybe_concat_lines;
#ifdef DEBUG_CHARS
printf("nchar '%c'\n", c);
#else
}
}
-static void parse_preprocessor_directive()
+static void parse_preprocessor_directive(void)
{
next_pp_token();
SYMBOL_CHARS
parse_symbol();
+ /* might be a wide string ( L"string" ) */
+ if(c == '"' && (lexer_token.type == T_IDENTIFIER &&
+ lexer_token.v.symbol == symbol_L)) {
+ parse_string_literal();
+ return;
+ }
return;
DIGITS
lexer_token.source_position.linenr = 0;
lexer_token.source_position.input_name = input_name;
+ symbol_L = symbol_table_insert("L");
+
/* place a virtual \n at the beginning so the lexer knows that we're
* at the beginning of a line */
c = '\n';