diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2022-02-22 07:51:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-22 07:51:51 (GMT) |
commit | 090e5c4b946b28f50fce445916c5d3ec45c8f45f (patch) | |
tree | 986dba79c0c56cdedf02de47aac01dcfd15860de | |
parent | 74127b89a8224d021fc76f679422b76510844ff9 (diff) | |
download | cpython-090e5c4b946b28f50fce445916c5d3ec45c8f45f.zip cpython-090e5c4b946b28f50fce445916c5d3ec45c8f45f.tar.gz cpython-090e5c4b946b28f50fce445916c5d3ec45c8f45f.tar.bz2 |
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.
-rw-r--r-- | Lib/test/test_grammar.py | 9 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2022-02-21-21-55-23.bpo-46820.4RfUZh.rst | 3 | ||||
-rw-r--r-- | Parser/tokenizer.c | 3 |
3 files changed, 15 insertions, 0 deletions
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index a2460ad..3f5a91a 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -251,6 +251,15 @@ class TokenTests(unittest.TestCase): check("1e3in 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(): warnings.simplefilter('ignore', SyntaxWarning) check("0xfis x") diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-02-21-21-55-23.bpo-46820.4RfUZh.rst b/Misc/NEWS.d/next/Core and Builtins/2022-02-21-21-55-23.bpo-46820.4RfUZh.rst new file mode 100644 index 0000000..117a84d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2022-02-21-21-55-23.bpo-46820.4RfUZh.rst @@ -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. diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index b14506a..6698d35 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1253,6 +1253,9 @@ verify_end_of_number(struct tok_state *tok, int c, const char *kind) else if (c == 'o') { r = lookahead(tok, "r"); } + else if (c == 'n') { + r = lookahead(tok, "ot"); + } if (r) { tok_backup(tok, c); if (parser_warn(tok, "invalid %s literal", kind)) { |