]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-125008: Fix `tokenize.untokenize` roundtrip for `\n{{` (#125013)
authorTomas R. <tomas.roun8@gmail.com>
Sun, 6 Oct 2024 13:16:41 +0000 (15:16 +0200)
committerGitHub <noreply@github.com>
Sun, 6 Oct 2024 13:16:41 +0000 (15:16 +0200)
Lib/test/test_tokenize.py
Lib/tokenize.py
Misc/NEWS.d/next/Core_and_Builtins/2024-10-05-23-53-06.gh-issue-125008.ETANpd.rst [new file with mode: 0644]

index de0e0b430a21bf0cd298e4a0400473c4fff61467..75710db7d053756eae51070c8deef3f67366c012 100644 (file)
@@ -1919,6 +1919,26 @@ class TestRoundtrip(TestCase):
         self.check_roundtrip(r"f'\\\\N{{'")
         self.check_roundtrip(r"f'\\\\\\N{{'")
         self.check_roundtrip(r"f'\\\\\\\\N{{'")
+
+        self.check_roundtrip(r"f'\n{{foo}}'")
+        self.check_roundtrip(r"f'\\n{{foo}}'")
+        self.check_roundtrip(r"f'\\\n{{foo}}'")
+        self.check_roundtrip(r"f'\\\\n{{foo}}'")
+
+        self.check_roundtrip(r"f'\t{{foo}}'")
+        self.check_roundtrip(r"f'\\t{{foo}}'")
+        self.check_roundtrip(r"f'\\\t{{foo}}'")
+        self.check_roundtrip(r"f'\\\\t{{foo}}'")
+
+        self.check_roundtrip(r"rf'\t{{foo}}'")
+        self.check_roundtrip(r"rf'\\t{{foo}}'")
+        self.check_roundtrip(r"rf'\\\t{{foo}}'")
+        self.check_roundtrip(r"rf'\\\\t{{foo}}'")
+
+        self.check_roundtrip(r"rf'\{{foo}}'")
+        self.check_roundtrip(r"f'\\{{foo}}'")
+        self.check_roundtrip(r"rf'\\\{{foo}}'")
+        self.check_roundtrip(r"f'\\\\{{foo}}'")
         cases = [
     """
 if 1:
index 7f418bb7a1b37fc4a03cf62382890760f0f32b68..4b4c3cfe16999b5231076748b19e514e79bb7eaf 100644 (file)
@@ -200,7 +200,7 @@ class Untokenizer:
                         characters[-2::-1]
                     )
                 )
-                if n_backslashes % 2 == 0:
+                if n_backslashes % 2 == 0 or characters[-1] != "N":
                     characters.append(character)
                 else:
                     consume_until_next_bracket = True
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-10-05-23-53-06.gh-issue-125008.ETANpd.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-10-05-23-53-06.gh-issue-125008.ETANpd.rst
new file mode 100644 (file)
index 0000000..8971e05
--- /dev/null
@@ -0,0 +1,2 @@
+Fix :func:`tokenize.untokenize` producing invalid syntax for
+double braces preceded by certain escape characters.