summaryrefslogtreecommitdiff
path: root/coverage/parser.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2016-01-05 06:54:07 -0500
committerNed Batchelder <ned@nedbatchelder.com>2016-01-05 06:54:07 -0500
commit452f6f60c89119f1de1254ab9c5f4e25ac2f073d (patch)
tree40009e5bfdd1f3f5d8384762985c38c95686bca9 /coverage/parser.py
parent688488a7574cf872574c24d699acf2f869b1c786 (diff)
downloadpython-coveragepy-452f6f60c89119f1de1254ab9c5f4e25ac2f073d.tar.gz
Support while-else
Diffstat (limited to 'coverage/parser.py')
-rw-r--r--coverage/parser.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/coverage/parser.py b/coverage/parser.py
index c680f63..b0e7371 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -520,8 +520,6 @@ class AstArcAnalyzer(object):
my_block = self.block_stack.pop()
exits = my_block.break_exits
if node.orelse:
- else_start = self.line_for_node(node.orelse[0])
- self.arcs.add((start, else_start))
else_exits = self.add_body_arcs(node.orelse, from_line=start)
exits |= else_exits
else:
@@ -653,11 +651,15 @@ class AstArcAnalyzer(object):
for xit in exits:
self.arcs.add((xit, to_top))
exits = set()
- if not constant_test:
- exits.add(start)
my_block = self.block_stack.pop()
exits.update(my_block.break_exits)
- # TODO: orelse
+ if node.orelse:
+ else_exits = self.add_body_arcs(node.orelse, from_line=start)
+ exits |= else_exits
+ else:
+ # No `else` clause: you can exit from the start.
+ if not constant_test:
+ exits.add(start)
return exits
def handle_With(self, node):