Commit f634acae authored by Georg Brandl's avatar Georg Brandl

Merged revisions 87876-87877 via svnmerge from

svn+ssh://pythondev@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 3015c6f4
...@@ -187,9 +187,9 @@ and classes for traversing abstract syntax trees: ...@@ -187,9 +187,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])
......
...@@ -264,6 +264,14 @@ class ASTHelpers_Test(unittest.TestCase): ...@@ -264,6 +264,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')
......
...@@ -848,6 +848,7 @@ Cliff Wells ...@@ -848,6 +848,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
......
...@@ -36,6 +36,9 @@ Library ...@@ -36,6 +36,9 @@ Library
dependent, but ``time.mktime`` will now accept full range supported dependent, but ``time.mktime`` will now accept full range supported
by the OS. Conversion of 2-digit years to 4-digit is deprecated. by the OS. Conversion of 2-digit years to 4-digit is deprecated.
- Issue #10869: Fixed bug where ast.increment_lineno modified the root
node twice.
- Issue #7858: Raise an error properly when os.utime() fails under Windows - Issue #7858: Raise an error properly when os.utime() fails under Windows
on an existing file. on an existing file.
......
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