summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2011-01-09 07:55:46 (GMT)
committerGeorg Brandl <georg@python.org>2011-01-09 07:55:46 (GMT)
commit7fdc746a81a29a5f917fb41500b03c92adf40851 (patch)
tree4fcfdeda32dbf260b44ac4e0c486674c6191774e
parent389af0037175ec5327d401b3d4a3b13d509cc926 (diff)
downloadcpython-7fdc746a81a29a5f917fb41500b03c92adf40851.zip
cpython-7fdc746a81a29a5f917fb41500b03c92adf40851.tar.gz
cpython-7fdc746a81a29a5f917fb41500b03c92adf40851.tar.bz2
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. ........
-rw-r--r--Doc/library/ast.rst6
-rw-r--r--Lib/ast.py8
-rw-r--r--Lib/test/test_ast.py8
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
5 files changed, 18 insertions, 8 deletions
diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst
index 888ddae..ae57e80 100644
--- a/Doc/library/ast.rst
+++ b/Doc/library/ast.rst
@@ -167,9 +167,9 @@ and classes for traversing abstract syntax trees:
.. function:: walk(node)
- Recursively yield all child nodes of *node*, in no specified order. This is
- useful if you only want to modify nodes in place and don't care about the
- context.
+ Recursively yield all descendant nodes in the tree starting at *node*
+ (including *node* itself), in no specified order. This is useful if you only
+ want to modify nodes in place and don't care about the context.
.. class:: NodeVisitor()
diff --git a/Lib/ast.py b/Lib/ast.py
index 0b8baf7..f8c4d3c 100644
--- a/Lib/ast.py
+++ b/Lib/ast.py
@@ -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*.
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):
if 'lineno' in child._attributes:
child.lineno = getattr(child, 'lineno', 0) + n
@@ -204,9 +202,9 @@ def get_docstring(node, clean=True):
def walk(node):
"""
- Recursively yield all child nodes of *node*, in no specified order. This is
- useful if you only want to modify nodes in place and don't care about the
- context.
+ Recursively yield all descendant nodes in the tree starting at *node*
+ (including *node* itself), in no specified order. This is useful if you
+ only want to modify nodes in place and don't care about the context.
"""
from collections import deque
todo = deque([node])
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index c74a30d..de19c8a 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -253,6 +253,14 @@ class ASTHelpers_Test(unittest.TestCase):
'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, '
'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):
node = ast.parse('foo()', mode='eval')
diff --git a/Misc/ACKS b/Misc/ACKS
index c34e381..f9a7c40 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -841,6 +841,7 @@ Cliff Wells
Rickard Westman
Jeff Wheeler
Christopher White
+David White
Mats Wichmann
Truida Wiedijk
Felix Wiemann
diff --git a/Misc/NEWS b/Misc/NEWS
index 7af0b2c..6af7cf9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -31,6 +31,9 @@ Core and Builtins
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
continuation line in the formatted value has no leading white space
and looks like a header. Since Generator uses Header to format all