projects
/
cparser
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Warn about unreachable empty compound statements.
[cparser]
/
lexer.c
diff --git
a/lexer.c
b/lexer.c
index
7a906d4
..
f1b00e3
100644
(file)
--- a/
lexer.c
+++ b/
lexer.c
@@
-56,6
+56,7
@@
static char buf[1024 + MAX_PUTBACK];
static const char *bufend;
static const char *bufpos;
static strset_t stringset;
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.
/**
* Prints a parse error message at the current token.
@@
-194,6
+195,7
@@
end_of_next_char:;
}
#define SYMBOL_CHARS \
}
#define SYMBOL_CHARS \
+ case '$': if (!allow_dollar_in_symbol) goto dollar_sign; \
case 'a': \
case 'b': \
case 'c': \
case 'a': \
case 'b': \
case 'c': \
@@
-281,6
+283,7
@@
static void parse_symbol(void)
break;
default:
break;
default:
+dollar_sign:
goto end_symbol;
}
}
goto end_symbol;
}
}
@@
-749,7
+752,7
@@
static int parse_escape_sequence(void)
int ec = c;
next_char();
int ec = c;
next_char();
- switch(ec) {
+ switch
(ec) {
case '"': return '"';
case '\'': return '\'';
case '\\': return '\\';
case '"': return '"';
case '\'': return '\'';
case '\\': return '\\';
@@
-775,6
+778,10
@@
static int parse_escape_sequence(void)
case EOF:
parse_error("reached end of file while parsing escape sequence");
return EOF;
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;
default:
parse_error("unknown escape sequence");
return EOF;
@@
-1433,16
+1440,7
@@
void lexer_next_preprocessing_token(void)
case '.':
MAYBE_PROLOG
case '.':
MAYBE_PROLOG
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
+ DIGITS
put_back(c);
c = '.';
parse_number_dec();
put_back(c);
c = '.';
parse_number_dec();
@@
-1573,8
+1571,9
@@
void lexer_next_preprocessing_token(void)
return;
default:
return;
default:
+dollar_sign:
+ errorf(&lexer_token.source_position, "unknown character '%c' found", c);
next_char();
next_char();
- errorf(&lexer_token.source_position, "unknown character '%c' found\n", c);
lexer_token.type = T_ERROR;
return;
}
lexer_token.type = T_ERROR;
return;
}