mirror of
https://github.com/python/cpython.git
synced 2024-12-04 07:15:09 +08:00
566d934745
SF patch #1015989 The basic idea of this patch is to compute lineno attributes for all AST nodes. The actual implementation lead to a lot of restructing and code cleanup. The generated AST nodes now have an optional lineno argument to constructor. Remove the top-level asList(), since it didn't seem to serve any purpose. Add an __iter__ to ast nodes. Use isinstance() instead of explicit type tests. Change transformer to use the new lineno attribute, which replaces three lines of code with one. Use universal newlines so that we can get rid of special-case code for line endings. Use lookup_node() in a few more frequently called, but simple com_xxx methods(). Change string exception to class exception.
36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
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()
|