[3.12] gh-129093: Fix f-string debug text sometimes getting cut off when expression contains ! (#129164)

This commit is contained in:
Pablo Galindo Salgado 2025-01-22 00:47:20 +00:00 committed by GitHub
parent b849a1b751
commit e577ff4ce4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 3 deletions

View file

@ -1875,6 +1875,24 @@ print(f'''{{
self.assertIn(rb"\1", stdout)
self.assertEqual(len(stderr.strip().splitlines()), 2)
def test_gh129093(self):
self.assertEqual(f'{1==2=}', '1==2=False')
self.assertEqual(f'{1 == 2=}', '1 == 2=False')
self.assertEqual(f'{1!=2=}', '1!=2=True')
self.assertEqual(f'{1 != 2=}', '1 != 2=True')
self.assertEqual(f'{(1) != 2=}', '(1) != 2=True')
self.assertEqual(f'{(1*2) != (3)=}', '(1*2) != (3)=True')
self.assertEqual(f'{1 != 2 == 3 != 4=}', '1 != 2 == 3 != 4=False')
self.assertEqual(f'{1 == 2 != 3 == 4=}', '1 == 2 != 3 == 4=False')
self.assertEqual(f'{f'{1==2=}'=}', "f'{1==2=}'='1==2=False'")
self.assertEqual(f'{f'{1 == 2=}'=}', "f'{1 == 2=}'='1 == 2=False'")
self.assertEqual(f'{f'{1!=2=}'=}', "f'{1!=2=}'='1!=2=True'")
self.assertEqual(f'{f'{1 != 2=}'=}', "f'{1 != 2=}'='1 != 2=True'")
if __name__ == "__main__":
unittest.main()

View file

@ -0,0 +1,2 @@
Fix f-strings such as ``f'{expr=}'`` sometimes not displaying the full
expression when the expression contains ``!=``.

View file

@ -480,9 +480,7 @@ static int update_fstring_expr(struct tok_state *tok, char cur) {
case '}':
case '!':
case ':':
if (tok_mode->last_expr_end == -1) {
tok_mode->last_expr_end = strlen(tok->start);
}
tok_mode->last_expr_end = strlen(tok->start);
break;
default:
Py_UNREACHABLE();