bpo-46820: Fix a SyntaxError in a numeric literal followed by "not in" (GH-31479)

Fix parsing a numeric literal immediately (without spaces) followed by
"not in" keywords, like in "1not in x". Now the parser only emits
a warning, not a syntax error.
This commit is contained in:
Serhiy Storchaka 2022-02-22 09:51:51 +02:00 committed by GitHub
parent 74127b89a8
commit 090e5c4b94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 0 deletions

View File

@ -251,6 +251,15 @@ class TokenTests(unittest.TestCase):
check("1e3in x") check("1e3in x")
check("1jin x") check("1jin x")
check("0xfnot in x")
check("0o7not in x")
check("0b1not in x")
check("9not in x")
check("0not in x")
check("1.not in x")
check("1e3not in x")
check("1jnot in x")
with warnings.catch_warnings(): with warnings.catch_warnings():
warnings.simplefilter('ignore', SyntaxWarning) warnings.simplefilter('ignore', SyntaxWarning)
check("0xfis x") check("0xfis x")

View File

@ -0,0 +1,3 @@
Fix parsing a numeric literal immediately (without spaces) followed by "not
in" keywords, like in ``1not in x``. Now the parser only emits a warning,
not a syntax error.

View File

@ -1253,6 +1253,9 @@ verify_end_of_number(struct tok_state *tok, int c, const char *kind)
else if (c == 'o') { else if (c == 'o') {
r = lookahead(tok, "r"); r = lookahead(tok, "r");
} }
else if (c == 'n') {
r = lookahead(tok, "ot");
}
if (r) { if (r) {
tok_backup(tok, c); tok_backup(tok, c);
if (parser_warn(tok, "invalid %s literal", kind)) { if (parser_warn(tok, "invalid %s literal", kind)) {