diff options
author | Michael W. Hudson <mwh@python.net> | 2004-07-12 13:15:56 (GMT) |
---|---|---|
committer | Michael W. Hudson <mwh@python.net> | 2004-07-12 13:15:56 (GMT) |
commit | 3f06189332c585a4578281e8325fdfb140b12f9e (patch) | |
tree | ddbef24967dde87f3c5b70b7339d351340200a98 /Lib | |
parent | ca1a775ab94ce589a6cbfc5c35448bfac385b045 (diff) | |
download | cpython-3f06189332c585a4578281e8325fdfb140b12f9e.zip cpython-3f06189332c585a4578281e8325fdfb140b12f9e.tar.gz cpython-3f06189332c585a4578281e8325fdfb140b12f9e.tar.bz2 |
this is patch
[ 988698 ] compiler.transformer fix for (a, b) = 1, 2
fixing bug
[ 988613 ] compiler.transformer and tuple unpacking
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/compiler/transformer.py | 2 | ||||
-rw-r--r-- | Lib/test/test_transformer.py | 37 |
2 files changed, 38 insertions, 1 deletions
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, '<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() |