mirror of
https://github.com/python/cpython.git
synced 2025-08-19 08:11:46 +00:00
[3.13] gh-130618: Fix parser error when using lambdas inside f-strings (GH-130638) (#130642)
(cherry picked from commit e06bebb87e
)
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
This commit is contained in:
parent
a0ea87c0c3
commit
2d7145decb
3 changed files with 20 additions and 1 deletions
|
@ -2030,6 +2030,18 @@ class GrammarTests(unittest.TestCase):
|
|||
with self.assertRaises(Done):
|
||||
foo().send(None)
|
||||
|
||||
def test_complex_lambda(self):
|
||||
def test1(foo, bar):
|
||||
return ""
|
||||
|
||||
def test2():
|
||||
return f"{test1(
|
||||
foo=lambda: '、、、、、、、、、、、、、、、、、',
|
||||
bar=lambda: 'abcdefghijklmnopqrstuvwxyz 123456789 123456789',
|
||||
)}"
|
||||
|
||||
self.assertEqual(test2(), "")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Fix a bug that was causing ``UnicodeDecodeError`` or ``SystemError`` to be
|
||||
raised when using f-strings with ``lambda`` expressions with non-ASCII
|
||||
characters. Patch by Pablo Galindo
|
|
@ -211,9 +211,13 @@ _PyLexer_update_fstring_expr(struct tok_state *tok, char cur)
|
|||
break;
|
||||
case '}':
|
||||
case '!':
|
||||
case ':':
|
||||
tok_mode->last_expr_end = strlen(tok->start);
|
||||
break;
|
||||
case ':':
|
||||
if (tok_mode->last_expr_end == -1) {
|
||||
tok_mode->last_expr_end = strlen(tok->start);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Py_UNREACHABLE();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue