mirror of
https://github.com/python/cpython
synced 2026-09-29 07:45:29 +03:00
this is patch
[ 988698 ] compiler.transformer fix for (a, b) = 1, 2 fixing bug [ 988613 ] compiler.transformer and tuple unpacking
This commit is contained in:
parent
ca1a775ab9
commit
3f06189332
2 changed files with 38 additions and 1 deletions
|
|
@ -929,7 +929,7 @@ class Transformer:
|
|||
# loop to avoid trivial recursion
|
||||
while 1:
|
||||
t = node[0]
|
||||
if t == symbol.exprlist or t == symbol.testlist:
|
||||
if t == symbol.exprlist or t == symbol.testlist or t == symbol.testlist_gexp:
|
||||
if len(node) > 2:
|
||||
return self.com_assign_tuple(node, assigning)
|
||||
node = node[1]
|
||||
|
|
|
|||
37
Lib/test/test_transformer.py
Normal file
37
Lib/test/test_transformer.py
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
import unittest
|
||||
from test import test_support
|
||||
from compiler import transformer, ast
|
||||
from compiler import compile
|
||||
|
||||
class Tests(unittest.TestCase):
|
||||
|
||||
def testMultipleLHS(self):
|
||||
""" Test multiple targets on the left hand side. """
|
||||
|
||||
snippets = ['a, b = 1, 2',
|
||||
'(a, b) = 1, 2',
|
||||
'((a, b), c) = (1, 2), 3']
|
||||
|
||||
for s in snippets:
|
||||
a = transformer.parse(s)
|
||||
assert isinstance(a, ast.Module)
|
||||
child1 = a.getChildNodes()[0]
|
||||
assert isinstance(child1, ast.Stmt)
|
||||
child2 = child1.getChildNodes()[0]
|
||||
assert isinstance(child2, ast.Assign)
|
||||
|
||||
# This actually tests the compiler, but it's a way to assure the ast
|
||||
# is correct
|
||||
c = compile(s, '<string>', 'single')
|
||||
vals = {}
|
||||
exec c in vals
|
||||
assert vals['a'] == 1
|
||||
assert vals['b'] == 2
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(
|
||||
Tests
|
||||
)
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue