Commit 7fdc746a authored by Georg Brandl's avatar Georg Brandl

Merged revisions 87876-87877 via svnmerge from

svn+ssh://svn.python.org/python/branches/py3k

........
  r87876 | georg.brandl | 2011-01-09 08:38:51 +0100 (So, 09 Jan 2011) | 1 line

  #10869: do not visit root node twice in ast.increment_lineno().
........
  r87877 | georg.brandl | 2011-01-09 08:50:48 +0100 (So, 09 Jan 2011) | 1 line

  Add missing line.
........
parent 389af003
...@@ -167,9 +167,9 @@ and classes for traversing abstract syntax trees: ...@@ -167,9 +167,9 @@ and classes for traversing abstract syntax trees:
.. function:: walk(node) .. function:: walk(node)
Recursively yield all child nodes of *node*, in no specified order. This is Recursively yield all descendant nodes in the tree starting at *node*
useful if you only want to modify nodes in place and don't care about the (including *node* itself), in no specified order. This is useful if you only
context. want to modify nodes in place and don't care about the context.
.. class:: NodeVisitor() .. class:: NodeVisitor()
......
...@@ -152,8 +152,6 @@ def increment_lineno(node, n=1): ...@@ -152,8 +152,6 @@ def increment_lineno(node, n=1):
Increment the line number of each node in the tree starting at *node* by *n*. Increment the line number of each node in the tree starting at *node* by *n*.
This is useful to "move code" to a different location in a file. This is useful to "move code" to a different location in a file.
""" """
if 'lineno' in node._attributes:
node.lineno = getattr(node, 'lineno', 0) + n
for child in walk(node): for child in walk(node):
if 'lineno' in child._attributes: if 'lineno' in child._attributes:
child.lineno = getattr(child, 'lineno', 0) + n child.lineno = getattr(child, 'lineno', 0) + n
...@@ -204,9 +202,9 @@ def get_docstring(node, clean=True): ...@@ -204,9 +202,9 @@ def get_docstring(node, clean=True):
def walk(node): def walk(node):
""" """
Recursively yield all child nodes of *node*, in no specified order. This is Recursively yield all descendant nodes in the tree starting at *node*
useful if you only want to modify nodes in place and don't care about the (including *node* itself), in no specified order. This is useful if you
context. only want to modify nodes in place and don't care about the context.
""" """
from collections import deque from collections import deque
todo = deque([node]) todo = deque([node])
......
...@@ -253,6 +253,14 @@ class ASTHelpers_Test(unittest.TestCase): ...@@ -253,6 +253,14 @@ class ASTHelpers_Test(unittest.TestCase):
'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, ' 'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, '
'col_offset=0))' 'col_offset=0))'
) )
# issue10869: do not increment lineno of root twice
src = ast.parse('1 + 1', mode='eval')
self.assertEqual(ast.increment_lineno(src.body, n=3), src.body)
self.assertEqual(ast.dump(src, include_attributes=True),
'Expression(body=BinOp(left=Num(n=1, lineno=4, col_offset=0), '
'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, '
'col_offset=0))'
)
def test_iter_fields(self): def test_iter_fields(self):
node = ast.parse('foo()', mode='eval') node = ast.parse('foo()', mode='eval')
......
...@@ -841,6 +841,7 @@ Cliff Wells ...@@ -841,6 +841,7 @@ Cliff Wells
Rickard Westman Rickard Westman
Jeff Wheeler Jeff Wheeler
Christopher White Christopher White
David White
Mats Wichmann Mats Wichmann
Truida Wiedijk Truida Wiedijk
Felix Wiemann Felix Wiemann
......
...@@ -31,6 +31,9 @@ Core and Builtins ...@@ -31,6 +31,9 @@ Core and Builtins
Library Library
------- -------
- Issue #10869: Fixed bug where ast.increment_lineno modified the root
node twice.
- Issue #5871: email.header.Header.encode now raises an error if any - Issue #5871: email.header.Header.encode now raises an error if any
continuation line in the formatted value has no leading white space continuation line in the formatted value has no leading white space
and looks like a header. Since Generator uses Header to format all and looks like a header. Since Generator uses Header to format all
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment