From: Stefan Behnel Date: Wed, 11 Jun 2008 15:19:08 +0000 (+0200) Subject: stream-lined Node.end_pos() X-Git-Tag: 0.9.8rc1~11^2~1 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=ec5dbe466605d43e7a4fee2d68ad3749c87fd482;p=cython.git stream-lined Node.end_pos() --- diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py index d668b38e..caf94858 100644 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@ -153,24 +153,24 @@ class Node(object): self.body.annotate(code) def end_pos(self): + if not self.child_attrs: + return self.pos try: return self._end_pos except AttributeError: - flat = [] + pos = self.pos for attr in self.child_attrs: child = getattr(self, attr) # Sometimes lists, sometimes nodes if child is None: pass elif isinstance(child, list): - flat += child + for c in child: + pos = max(pos, c.end_pos()) else: - flat.append(child) - if len(flat) == 0: - self._end_pos = self.pos - else: - self._end_pos = max([child.end_pos() for child in flat]) - return self._end_pos + pos = max(pos, child.end_pos()) + self._end_pos = pos + return pos class BlockNode: