py/lexer: Support raw f-strings.
Support for raw str/bytes already exists, and extending that to raw f-strings is easy. It also reduces code size because it eliminates an error message. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
16
py/lexer.c
16
py/lexer.c
@@ -661,21 +661,19 @@ void mp_lexer_to_next(mp_lexer_t *lex) {
|
||||
}
|
||||
#if MICROPY_PY_FSTRINGS
|
||||
if (is_char_following(lex, 'f')) {
|
||||
// raw-f-strings unsupported, immediately return (invalid) token.
|
||||
lex->tok_kind = MP_TOKEN_FSTRING_RAW;
|
||||
break;
|
||||
is_fstring = true;
|
||||
n_char = 2;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if MICROPY_PY_FSTRINGS
|
||||
else if (is_char(lex, 'f')) {
|
||||
if (is_char_following(lex, 'r')) {
|
||||
// raw-f-strings unsupported, immediately return (invalid) token.
|
||||
lex->tok_kind = MP_TOKEN_FSTRING_RAW;
|
||||
break;
|
||||
}
|
||||
n_char = 1;
|
||||
is_fstring = true;
|
||||
n_char = 1;
|
||||
if (is_char_following(lex, 'r')) {
|
||||
is_raw = true;
|
||||
n_char = 2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ typedef enum _mp_token_kind_t {
|
||||
MP_TOKEN_LONELY_STRING_OPEN,
|
||||
#if MICROPY_PY_FSTRINGS
|
||||
MP_TOKEN_MALFORMED_FSTRING,
|
||||
MP_TOKEN_FSTRING_RAW,
|
||||
#endif
|
||||
|
||||
MP_TOKEN_NEWLINE,
|
||||
|
||||
@@ -1351,9 +1351,6 @@ mp_parse_tree_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) {
|
||||
} else if (lex->tok_kind == MP_TOKEN_MALFORMED_FSTRING) {
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
MP_ERROR_TEXT("malformed f-string"));
|
||||
} else if (lex->tok_kind == MP_TOKEN_FSTRING_RAW) {
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
MP_ERROR_TEXT("raw f-strings are not supported"));
|
||||
#endif
|
||||
} else {
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
|
||||
Reference in New Issue
Block a user