| Index: third_party/logilab/astroid/rebuilder.py
 | 
| diff --git a/third_party/logilab/astroid/rebuilder.py b/third_party/logilab/astroid/rebuilder.py
 | 
| index 8fa7ee9232bbf2035b3c005730467edcb452a5d1..3f852513bdb6dfbad544b2db15dc9108a5d02f7c 100644
 | 
| --- a/third_party/logilab/astroid/rebuilder.py
 | 
| +++ b/third_party/logilab/astroid/rebuilder.py
 | 
| @@ -99,7 +99,6 @@ def _init_set_doc(node, newnode):
 | 
|      newnode.doc = None
 | 
|      try:
 | 
|          if isinstance(node.body[0], Discard) and isinstance(node.body[0].value, Str):
 | 
| -            newnode.tolineno = node.body[0].lineno
 | 
|              newnode.doc = node.body[0].value.s
 | 
|              node.body = node.body[1:]
 | 
|  
 | 
| @@ -108,10 +107,8 @@ def _init_set_doc(node, newnode):
 | 
|  
 | 
|  def _lineno_parent(oldnode, newnode, parent):
 | 
|      newnode.parent = parent
 | 
| -    if hasattr(oldnode, 'lineno'):
 | 
| -        newnode.lineno = oldnode.lineno
 | 
| -    if hasattr(oldnode, 'col_offset'):
 | 
| -        newnode.col_offset = oldnode.col_offset
 | 
| +    newnode.lineno = oldnode.lineno
 | 
| +    newnode.col_offset = oldnode.col_offset
 | 
|  
 | 
|  def _set_infos(oldnode, newnode, parent):
 | 
|      newnode.parent = parent
 | 
| @@ -119,14 +116,12 @@ def _set_infos(oldnode, newnode, parent):
 | 
|          newnode.lineno = oldnode.lineno
 | 
|      if hasattr(oldnode, 'col_offset'):
 | 
|          newnode.col_offset = oldnode.col_offset
 | 
| -    newnode.set_line_info(newnode.last_child()) # set_line_info accepts None
 | 
|  
 | 
|  def _create_yield_node(node, parent, rebuilder, factory):
 | 
|      newnode = factory()
 | 
|      _lineno_parent(node, newnode, parent)
 | 
|      if node.value is not None:
 | 
|          newnode.value = rebuilder.visit(node.value, newnode)
 | 
| -    newnode.set_line_info(newnode.last_child())
 | 
|      return newnode
 | 
|  
 | 
|  
 | 
| @@ -142,14 +137,14 @@ class TreeRebuilder(object):
 | 
|          self._visit_meths = {}
 | 
|          self._transform = manager.transform
 | 
|  
 | 
| -    def visit_module(self, node, modname, package):
 | 
| +    def visit_module(self, node, modname, modpath, package):
 | 
|          """visit a Module node by returning a fresh instance of it"""
 | 
|          newnode = new.Module(modname, None)
 | 
|          newnode.package = package
 | 
| -        _lineno_parent(node, newnode, parent=None)
 | 
| +        newnode.parent = None
 | 
|          _init_set_doc(node, newnode)
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
| +        newnode.file = newnode.path = modpath
 | 
|          return self._transform(newnode)
 | 
|  
 | 
|      def visit(self, node, parent):
 | 
| @@ -174,7 +169,7 @@ class TreeRebuilder(object):
 | 
|      def visit_arguments(self, node, parent):
 | 
|          """visit a Arguments node by returning a fresh instance of it"""
 | 
|          newnode = new.Arguments()
 | 
| -        _lineno_parent(node, newnode, parent)
 | 
| +        newnode.parent = parent
 | 
|          self.asscontext = "Ass"
 | 
|          newnode.args = [self.visit(child, newnode) for child in node.args]
 | 
|          self.asscontext = None
 | 
| @@ -210,7 +205,6 @@ class TreeRebuilder(object):
 | 
|              newnode.parent.set_local(vararg, newnode)
 | 
|          if kwarg:
 | 
|              newnode.parent.set_local(kwarg, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_assattr(self, node, parent):
 | 
| @@ -221,7 +215,6 @@ class TreeRebuilder(object):
 | 
|          newnode.expr = self.visit(node.expr, newnode)
 | 
|          self.asscontext = assc
 | 
|          self._delayed_assattr.append(newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_assert(self, node, parent):
 | 
| @@ -231,7 +224,6 @@ class TreeRebuilder(object):
 | 
|          newnode.test = self.visit(node.test, newnode)
 | 
|          if node.msg is not None:
 | 
|              newnode.fail = self.visit(node.msg, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_assign(self, node, parent):
 | 
| @@ -259,7 +251,6 @@ class TreeRebuilder(object):
 | 
|                          meth.extra_decorators.append(newnode.value)
 | 
|                  except (AttributeError, KeyError):
 | 
|                      continue
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_assname(self, node, parent, node_name=None):
 | 
| @@ -279,7 +270,6 @@ class TreeRebuilder(object):
 | 
|          newnode.target = self.visit(node.target, newnode)
 | 
|          self.asscontext = None
 | 
|          newnode.value = self.visit(node.value, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_backquote(self, node, parent):
 | 
| @@ -287,7 +277,6 @@ class TreeRebuilder(object):
 | 
|          newnode = new.Backquote()
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.value = self.visit(node.value, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_binop(self, node, parent):
 | 
| @@ -297,7 +286,6 @@ class TreeRebuilder(object):
 | 
|          newnode.left = self.visit(node.left, newnode)
 | 
|          newnode.right = self.visit(node.right, newnode)
 | 
|          newnode.op = _BIN_OP_CLASSES[node.op.__class__]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_boolop(self, node, parent):
 | 
| @@ -306,7 +294,6 @@ class TreeRebuilder(object):
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.values = [self.visit(child, newnode) for child in node.values]
 | 
|          newnode.op = _BOOL_OP_CLASSES[node.op.__class__]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_break(self, node, parent):
 | 
| @@ -325,8 +312,8 @@ class TreeRebuilder(object):
 | 
|              newnode.starargs = self.visit(node.starargs, newnode)
 | 
|          if node.kwargs is not None:
 | 
|              newnode.kwargs = self.visit(node.kwargs, newnode)
 | 
| -        newnode.args.extend(self.visit(child, newnode) for child in node.keywords)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
| +        for child in node.keywords:
 | 
| +            newnode.args.append(self.visit(child, newnode))
 | 
|          return newnode
 | 
|  
 | 
|      def visit_class(self, node, parent):
 | 
| @@ -338,7 +325,6 @@ class TreeRebuilder(object):
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
|          if 'decorator_list' in node._fields and node.decorator_list:# py >= 2.6
 | 
|              newnode.decorators = self.visit_decorators(node, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          newnode.parent.frame().set_local(newnode.name, newnode)
 | 
|          return newnode
 | 
|  
 | 
| @@ -361,19 +347,17 @@ class TreeRebuilder(object):
 | 
|          newnode.left = self.visit(node.left, newnode)
 | 
|          newnode.ops = [(_CMP_OP_CLASSES[op.__class__], self.visit(expr, newnode))
 | 
|                         for (op, expr) in zip(node.ops, node.comparators)]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_comprehension(self, node, parent):
 | 
|          """visit a Comprehension node by returning a fresh instance of it"""
 | 
|          newnode = new.Comprehension()
 | 
| -        _lineno_parent(node, newnode, parent)
 | 
| +        newnode.parent = parent
 | 
|          self.asscontext = "Ass"
 | 
|          newnode.target = self.visit(node.target, newnode)
 | 
|          self.asscontext = None
 | 
|          newnode.iter = self.visit(node.iter, newnode)
 | 
|          newnode.ifs = [self.visit(child, newnode) for child in node.ifs]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_decorators(self, node, parent):
 | 
| @@ -387,7 +371,6 @@ class TreeRebuilder(object):
 | 
|          else:
 | 
|              decorators = node.decorator_list
 | 
|          newnode.nodes = [self.visit(child, newnode) for child in decorators]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_delete(self, node, parent):
 | 
| @@ -397,7 +380,6 @@ class TreeRebuilder(object):
 | 
|          self.asscontext = "Del"
 | 
|          newnode.targets = [self.visit(child, newnode) for child in node.targets]
 | 
|          self.asscontext = None
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_dict(self, node, parent):
 | 
| @@ -406,7 +388,6 @@ class TreeRebuilder(object):
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.items = [(self.visit(key, newnode), self.visit(value, newnode))
 | 
|                           for key, value in zip(node.keys, node.values)]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_dictcomp(self, node, parent):
 | 
| @@ -417,7 +398,6 @@ class TreeRebuilder(object):
 | 
|          newnode.value = self.visit(node.value, newnode)
 | 
|          newnode.generators = [self.visit(child, newnode)
 | 
|                                for child in node.generators]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_discard(self, node, parent):
 | 
| @@ -425,7 +405,6 @@ class TreeRebuilder(object):
 | 
|          newnode = new.Discard()
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.value = self.visit(node.value, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_ellipsis(self, node, parent):
 | 
| @@ -452,7 +431,6 @@ class TreeRebuilder(object):
 | 
|              newnode.name = self.visit(node.name, newnode)
 | 
|              self.asscontext = None
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_exec(self, node, parent):
 | 
| @@ -464,15 +442,13 @@ class TreeRebuilder(object):
 | 
|              newnode.globals = self.visit(node.globals, newnode)
 | 
|          if node.locals is not None:
 | 
|              newnode.locals = self.visit(node.locals, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_extslice(self, node, parent):
 | 
|          """visit an ExtSlice node by returning a fresh instance of it"""
 | 
|          newnode = new.ExtSlice()
 | 
| -        _lineno_parent(node, newnode, parent)
 | 
| +        newnode.parent = parent
 | 
|          newnode.dims = [self.visit(dim, newnode) for dim in node.dims]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_for(self, node, parent):
 | 
| @@ -485,7 +461,6 @@ class TreeRebuilder(object):
 | 
|          newnode.iter = self.visit(node.iter, newnode)
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
|          newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_from(self, node, parent):
 | 
| @@ -514,7 +489,6 @@ class TreeRebuilder(object):
 | 
|              newnode.decorators = self.visit_decorators(node, newnode)
 | 
|          if PY3K and node.returns:
 | 
|              newnode.returns = self.visit(node.returns, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          self._global_names.pop()
 | 
|          frame = newnode.parent.frame()
 | 
|          if isinstance(frame, new.Class):
 | 
| @@ -538,7 +512,6 @@ class TreeRebuilder(object):
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.elt = self.visit(node.elt, newnode)
 | 
|          newnode.generators = [self.visit(child, newnode) for child in node.generators]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_getattr(self, node, parent):
 | 
| @@ -558,7 +531,6 @@ class TreeRebuilder(object):
 | 
|          newnode.expr = self.visit(node.value, newnode)
 | 
|          self.asscontext = asscontext
 | 
|          newnode.attrname = node.attr
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_global(self, node, parent):
 | 
| @@ -577,7 +549,6 @@ class TreeRebuilder(object):
 | 
|          newnode.test = self.visit(node.test, newnode)
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
|          newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_ifexp(self, node, parent):
 | 
| @@ -587,7 +558,6 @@ class TreeRebuilder(object):
 | 
|          newnode.test = self.visit(node.test, newnode)
 | 
|          newnode.body = self.visit(node.body, newnode)
 | 
|          newnode.orelse = self.visit(node.orelse, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_import(self, node, parent):
 | 
| @@ -604,18 +574,16 @@ class TreeRebuilder(object):
 | 
|      def visit_index(self, node, parent):
 | 
|          """visit a Index node by returning a fresh instance of it"""
 | 
|          newnode = new.Index()
 | 
| -        _lineno_parent(node, newnode, parent)
 | 
| +        newnode.parent = parent
 | 
|          newnode.value = self.visit(node.value, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_keyword(self, node, parent):
 | 
|          """visit a Keyword node by returning a fresh instance of it"""
 | 
|          newnode = new.Keyword()
 | 
| -        _lineno_parent(node, newnode, parent)
 | 
| +        newnode.parent = parent
 | 
|          newnode.arg = node.arg
 | 
|          newnode.value = self.visit(node.value, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_lambda(self, node, parent):
 | 
| @@ -624,7 +592,6 @@ class TreeRebuilder(object):
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.args = self.visit(node.args, newnode)
 | 
|          newnode.body = self.visit(node.body, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_list(self, node, parent):
 | 
| @@ -632,7 +599,6 @@ class TreeRebuilder(object):
 | 
|          newnode = new.List()
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.elts = [self.visit(child, newnode) for child in node.elts]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_listcomp(self, node, parent):
 | 
| @@ -642,7 +608,6 @@ class TreeRebuilder(object):
 | 
|          newnode.elt = self.visit(node.elt, newnode)
 | 
|          newnode.generators = [self.visit(child, newnode)
 | 
|                                for child in node.generators]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_name(self, node, parent):
 | 
| @@ -665,7 +630,6 @@ class TreeRebuilder(object):
 | 
|          # XXX REMOVE me :
 | 
|          if self.asscontext in ('Del', 'Ass'): # 'Aug' ??
 | 
|              self._save_assignment(newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_bytes(self, node, parent):
 | 
| @@ -700,7 +664,6 @@ class TreeRebuilder(object):
 | 
|          if node.dest is not None:
 | 
|              newnode.dest = self.visit(node.dest, newnode)
 | 
|          newnode.values = [self.visit(child, newnode) for child in node.values]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_raise(self, node, parent):
 | 
| @@ -713,7 +676,6 @@ class TreeRebuilder(object):
 | 
|              newnode.inst = self.visit(node.inst, newnode)
 | 
|          if node.tback is not None:
 | 
|              newnode.tback = self.visit(node.tback, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_return(self, node, parent):
 | 
| @@ -722,7 +684,6 @@ class TreeRebuilder(object):
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          if node.value is not None:
 | 
|              newnode.value = self.visit(node.value, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_set(self, node, parent):
 | 
| @@ -730,7 +691,6 @@ class TreeRebuilder(object):
 | 
|          newnode = new.Set()
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.elts = [self.visit(child, newnode) for child in node.elts]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_setcomp(self, node, parent):
 | 
| @@ -740,20 +700,18 @@ class TreeRebuilder(object):
 | 
|          newnode.elt = self.visit(node.elt, newnode)
 | 
|          newnode.generators = [self.visit(child, newnode)
 | 
|                                for child in node.generators]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_slice(self, node, parent):
 | 
|          """visit a Slice node by returning a fresh instance of it"""
 | 
|          newnode = new.Slice()
 | 
| -        _lineno_parent(node, newnode, parent)
 | 
| +        newnode.parent = parent
 | 
|          if node.lower is not None:
 | 
|              newnode.lower = self.visit(node.lower, newnode)
 | 
|          if node.upper is not None:
 | 
|              newnode.upper = self.visit(node.upper, newnode)
 | 
|          if node.step is not None:
 | 
|              newnode.step = self.visit(node.step, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_subscript(self, node, parent):
 | 
| @@ -764,7 +722,6 @@ class TreeRebuilder(object):
 | 
|          newnode.value = self.visit(node.value, newnode)
 | 
|          newnode.slice = self.visit(node.slice, newnode)
 | 
|          self.asscontext = subcontext
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_tryexcept(self, node, parent):
 | 
| @@ -774,7 +731,6 @@ class TreeRebuilder(object):
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
|          newnode.handlers = [self.visit(child, newnode) for child in node.handlers]
 | 
|          newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_tryfinally(self, node, parent):
 | 
| @@ -783,7 +739,6 @@ class TreeRebuilder(object):
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
|          newnode.finalbody = [self.visit(n, newnode) for n in node.finalbody]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_tuple(self, node, parent):
 | 
| @@ -791,7 +746,6 @@ class TreeRebuilder(object):
 | 
|          newnode = new.Tuple()
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.elts = [self.visit(child, newnode) for child in node.elts]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_unaryop(self, node, parent):
 | 
| @@ -800,7 +754,6 @@ class TreeRebuilder(object):
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.operand = self.visit(node.operand, newnode)
 | 
|          newnode.op = _UNARY_OP_CLASSES[node.op.__class__]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_while(self, node, parent):
 | 
| @@ -810,7 +763,6 @@ class TreeRebuilder(object):
 | 
|          newnode.test = self.visit(node.test, newnode)
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
|          newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_with(self, node, parent):
 | 
| @@ -825,7 +777,6 @@ class TreeRebuilder(object):
 | 
|          self.asscontext = None
 | 
|          newnode.items = [(expr, vars)]
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_yield(self, node, parent):
 | 
| @@ -867,7 +818,6 @@ class TreeRebuilder3k(TreeRebuilder):
 | 
|          if node.name is not None:
 | 
|              newnode.name = self.visit_assname(node, newnode, node.name)
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_nonlocal(self, node, parent):
 | 
| @@ -885,7 +835,6 @@ class TreeRebuilder3k(TreeRebuilder):
 | 
|              newnode.exc = self.visit(node.exc, newnode)
 | 
|          if node.cause is not None:
 | 
|              newnode.cause = self.visit(node.cause, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_starred(self, node, parent):
 | 
| @@ -893,7 +842,6 @@ class TreeRebuilder3k(TreeRebuilder):
 | 
|          newnode = new.Starred()
 | 
|          _lineno_parent(node, newnode, parent)
 | 
|          newnode.value = self.visit(node.value, newnode)
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_try(self, node, parent):
 | 
| @@ -908,7 +856,6 @@ class TreeRebuilder3k(TreeRebuilder):
 | 
|                  excnode.body = [self.visit(child, excnode) for child in node.body]
 | 
|                  excnode.handlers = [self.visit(child, excnode) for child in node.handlers]
 | 
|                  excnode.orelse = [self.visit(child, excnode) for child in node.orelse]
 | 
| -                excnode.set_line_info(excnode.last_child())
 | 
|                  newnode.body = [excnode]
 | 
|              else:
 | 
|                  newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
| @@ -918,7 +865,6 @@ class TreeRebuilder3k(TreeRebuilder):
 | 
|              newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
|              newnode.handlers = [self.visit(child, newnode) for child in node.handlers]
 | 
|              newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_with(self, node, parent):
 | 
| @@ -940,7 +886,6 @@ class TreeRebuilder3k(TreeRebuilder):
 | 
|          newnode.items = [visit_child(child)
 | 
|                           for child in node.items]
 | 
|          newnode.body = [self.visit(child, newnode) for child in node.body]
 | 
| -        newnode.set_line_info(newnode.last_child())
 | 
|          return newnode
 | 
|  
 | 
|      def visit_yieldfrom(self, node, parent):
 | 
| 
 |