if (lex->peekpos) {
lex->peekpos--;
- if (!lex->push_line && lex->peek[lex->peekpos] == '\n')
+ if (!lex->push_line && lex->peek[lex->peekpos] == '\n') {
lex->line++;
+ lex->column = 0;
+ }
return lex->peek[lex->peekpos];
}
ch = lex_fgetc(lex);
- if (!lex->push_line && ch == '\n')
+ if (!lex->push_line && ch == '\n') {
lex->line++;
+ lex->column = 0;
+ }
else if (ch == '?')
return lex_try_trigraph(lex, ch);
else if (!lex->flags.nodigraphs && (ch == '<' || ch == ':' || ch == '%'))
}
if (ch == '+' || ch == '-' || /* ++, --, +=, -= and -> as well! */
- ch == '>' || ch == '<' || /* <<, >>, <=, >= */
+ ch == '>' || ch == '<' || /* <<, >>, <=, >= and >< as well! */
ch == '=' || ch == '!' || /* <=>, ==, != */
ch == '&' || ch == '|' || /* &&, ||, &=, |= */
ch == '~' || ch == '^' /* ~=, ~, ^ */
lex_tokench(lex, ch);
nextch = lex_getch(lex);
- if ((nextch == '=' && ch != '<') || (nextch == ch && ch != '!')) {
+ if ((nextch == '=' && ch != '<') ||
+ (nextch == ch && ch != '!') ||
+ (nextch == '<' && ch == '>')) {
lex_tokench(lex, nextch);
} else if (ch == '<' && nextch == '=') {
lex_tokench(lex, nextch);
return (lex->tok.ttype = ch);
}
- lexerror(lex, "unknown token: `%s`", lex->tok.value);
+ lexerror(lex, "unknown token: `%c`", ch);
return (lex->tok.ttype = TOKEN_ERROR);
}