From ec5dbe466605d43e7a4fee2d68ad3749c87fd482 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Wed, 11 Jun 2008 17:19:08 +0200 Subject: [PATCH] stream-lined Node.end_pos() --- Cython/Compiler/Nodes.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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: -- 2.26.2