]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46820: Fix a SyntaxError in a numeric literal followed by "not in" (GH-31479)
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 22 Feb 2022 07:51:51 +0000 (09:51 +0200)
committerGitHub <noreply@github.com>
Tue, 22 Feb 2022 07:51:51 +0000 (09:51 +0200)
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.

Lib/test/test_grammar.py
Misc/NEWS.d/next/Core and Builtins/2022-02-21-21-55-23.bpo-46820.4RfUZh.rst [new file with mode: 0644]
Parser/tokenizer.c

index a2460add4c9eed85e10d97eaea6a44c087f41110..3f5a91a851d8ed2e839f333d61fceb5fa913853c 100644 (file)
@@ -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 (file)
index 0000000..117a84d
--- /dev/null
@@ -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.
index b14506aaca35207e17698ca9a94eb0616bb5f94f..6698d35ea94276fa6eebbb1bd812b91482a8f070 100644 (file)
@@ -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)) {