do {
c = next_char();
- } while (c == '_' || isalnum(c));
+ } while (isgraph(c));
unput();
lexer.len = lexer.curr_pos - lexer.s;
return tok_identifier;
- } else if (isdigit(c)) {
+ } else if (isdigit(c) || c == '-') {
unsigned number = 0;
+ unsigned sign = 0;
+
+ /* we support negative numbers as well, so one can easily set all bits with -1 */
+ if (c == '-') {
+ sign = 1;
+ c = next_char();
+ }
if (c == '0') {
c = next_char();
for (;;) {
if (! isdigit(c))
break;
- number = (number << 4) | (c - '0');
+ number = number * 10 + (c - '0');
c = next_char();
}
unput();
- lexer.number = number;
+ lexer.number = sign ? 0 - number : number;
return tok_number;
}
else if (c == '\0')