From 3f06189332c585a4578281e8325fdfb140b12f9e Mon Sep 17 00:00:00 2001 From: "Michael W. Hudson" Date: Mon, 12 Jul 2004 13:15:56 +0000 Subject: this is patch [ 988698 ] compiler.transformer fix for (a, b) = 1, 2 fixing bug [ 988613 ] compiler.transformer and tuple unpacking --- Lib/compiler/transformer.py | 2 +- Lib/test/test_transformer.py | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 Lib/test/test_transformer.py diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py index 6832cf1..aa5a28b 100644 --- a/Lib/compiler/transformer.py +++ b/Lib/compiler/transformer.py @@ -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] diff --git a/Lib/test/test_transformer.py b/Lib/test/test_transformer.py new file mode 100644 index 0000000..2b0f1e8 --- /dev/null +++ b/Lib/test/test_transformer.py @@ -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, '', '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() -- cgit v0.12