py/lexer: Process CR earlier to allow newlines checks on chr1.

Resolves an issue where lexer failed to accept CR after line continuation
character.  It also simplifies the code.
pull/1/head
Tom Collins 2017-05-09 13:19:46 -07:00 committed by Damien George
parent 5feeba8897
commit 6f56412ec3
1 changed files with 7 additions and 12 deletions

View File

@ -137,23 +137,18 @@ STATIC void next_char(mp_lexer_t *lex) {
lex->chr1 = lex->chr2;
lex->chr2 = lex->reader.readbyte(lex->reader.data);
if (lex->chr0 == '\r') {
if (lex->chr1 == '\r') {
// CR is a new line, converted to LF
lex->chr0 = '\n';
if (lex->chr1 == '\n') {
// CR LF is a single new line
lex->chr1 = lex->chr2;
lex->chr1 = '\n';
if (lex->chr2 == '\n') {
// CR LF is a single new line, throw out the extra LF
lex->chr2 = lex->reader.readbyte(lex->reader.data);
}
}
if (lex->chr2 == MP_LEXER_EOF) {
// EOF, check if we need to insert a newline at end of file
if (lex->chr1 != MP_LEXER_EOF && lex->chr1 != '\n') {
// if lex->chr1 == '\r' then this makes a CR LF which will be converted to LF above
// otherwise it just inserts a LF
lex->chr2 = '\n';
}
// check if we need to insert a newline at end of file
if (lex->chr2 == MP_LEXER_EOF && lex->chr1 != MP_LEXER_EOF && lex->chr1 != '\n') {
lex->chr2 = '\n';
}
}