]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40614: Respect feature version for f-string debug expressions (GH-20196) (GH...
authorShantanu <hauntsaninja@users.noreply.github.com>
Sat, 6 Jun 2020 10:08:48 +0000 (03:08 -0700)
committerGitHub <noreply@github.com>
Sat, 6 Jun 2020 10:08:48 +0000 (11:08 +0100)
Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com>
Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
(cherry picked from commit c116c94ff119485761460f1033cdee425bed0310)

Lib/test/test_ast.py
Misc/NEWS.d/next/Library/2020-05-18-22-41-02.bpo-40614.8j3kmq.rst [new file with mode: 0644]
Python/ast.c

index 486f2aa707e83fbf1ca413f8ea6cc59129fbfbee..869346664499c11288057f45814892ed8912a576 100644 (file)
@@ -630,6 +630,12 @@ class AST_Tests(unittest.TestCase):
         attr_b = tree.body[0].decorator_list[0].value
         self.assertEqual(attr_b.end_col_offset, 4)
 
+    def test_issue40614_feature_version(self):
+        ast.parse('f"{x=}"', feature_version=(3, 8))
+        with self.assertRaises(SyntaxError):
+            ast.parse('f"{x=}"', feature_version=(3, 7))
+
+
 class ASTHelpers_Test(unittest.TestCase):
     maxDiff = None
 
diff --git a/Misc/NEWS.d/next/Library/2020-05-18-22-41-02.bpo-40614.8j3kmq.rst b/Misc/NEWS.d/next/Library/2020-05-18-22-41-02.bpo-40614.8j3kmq.rst
new file mode 100644 (file)
index 0000000..238b98c
--- /dev/null
@@ -0,0 +1 @@
+:func:`ast.parse` will not parse self documenting expressions in f-strings when passed ``feature_version`` is less than ``(3, 8)``.
index f70d48ba3a15daa289ff0c3f1033594589a53855..594879bd0ef0bd714a6148eba69879e6ae246780 100644 (file)
@@ -5202,6 +5202,12 @@ fstring_find_expr(const char **str, const char *end, int raw, int recurse_lvl,
     /* Check for =, which puts the text value of the expression in
        expr_text. */
     if (**str == '=') {
+        if (c->c_feature_version < 8) {
+            ast_error(c, n,
+                      "f-string: self documenting expressions are "
+                      "only supported in Python 3.8 and greater");
+            goto error;
+        }
         *str += 1;
 
         /* Skip over ASCII whitespace.  No need to test for end of string