summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-02-17 11:30:14 +1100
committerDamien George <damien.p.george@gmail.com>2017-02-17 11:30:14 +1100
commit773278ec3030ea9ed809c5a248fde2278ce4b557 (patch)
treeb5a7824dee8dbd2b06acaed06116a7e56e6f03d4 /py
parentae436797927c3c9f7ccdc25dd78af3dd279ca7ff (diff)
downloadmicropython-773278ec3030ea9ed809c5a248fde2278ce4b557.tar.gz
micropython-773278ec3030ea9ed809c5a248fde2278ce4b557.zip
py/lexer: Simplify handling of line-continuation error.
Previous to this patch there was an explicit check for errors with line continuation (where backslash was not immediately followed by a newline). But this check is not necessary: if there is an error then the remaining logic of the tokeniser will reject the backslash and correctly produce a syntax error.
Diffstat (limited to 'py')
-rw-r--r--py/lexer.c14
-rw-r--r--py/lexer.h13
2 files changed, 9 insertions, 18 deletions
diff --git a/py/lexer.c b/py/lexer.c
index 5c942f9344..ad4fe3fcb8 100644
--- a/py/lexer.c
+++ b/py/lexer.c
@@ -290,18 +290,10 @@ void mp_lexer_to_next(mp_lexer_t *lex) {
next_char(lex);
}
// had_physical_newline will be set on next loop
- } else if (is_char(lex, '\\')) {
- // backslash (outside string literals) must appear just before a physical newline
+ } else if (is_char_and(lex, '\\', '\n')) {
+ // line-continuation, so don't set had_physical_newline
+ next_char(lex);
next_char(lex);
- if (!is_physical_newline(lex)) {
- // SyntaxError: unexpected character after line continuation character
- lex->tok_line = lex->line;
- lex->tok_column = lex->column;
- lex->tok_kind = MP_TOKEN_BAD_LINE_CONTINUATION;
- return;
- } else {
- next_char(lex);
- }
} else {
break;
}
diff --git a/py/lexer.h b/py/lexer.h
index d407192856..d5382fc6a3 100644
--- a/py/lexer.h
+++ b/py/lexer.h
@@ -39,18 +39,17 @@
*/
typedef enum _mp_token_kind_t {
- MP_TOKEN_END, // 0
+ MP_TOKEN_END,
MP_TOKEN_INVALID,
MP_TOKEN_DEDENT_MISMATCH,
MP_TOKEN_LONELY_STRING_OPEN,
- MP_TOKEN_BAD_LINE_CONTINUATION,
- MP_TOKEN_NEWLINE, // 5
- MP_TOKEN_INDENT, // 6
- MP_TOKEN_DEDENT, // 7
+ MP_TOKEN_NEWLINE,
+ MP_TOKEN_INDENT,
+ MP_TOKEN_DEDENT,
- MP_TOKEN_NAME, // 8
+ MP_TOKEN_NAME,
MP_TOKEN_INTEGER,
MP_TOKEN_FLOAT_OR_IMAG,
MP_TOKEN_STRING,
@@ -58,7 +57,7 @@ typedef enum _mp_token_kind_t {
MP_TOKEN_ELLIPSIS,
- MP_TOKEN_KW_FALSE, // 14
+ MP_TOKEN_KW_FALSE,
MP_TOKEN_KW_NONE,
MP_TOKEN_KW_TRUE,
MP_TOKEN_KW___DEBUG__,