summaryrefslogtreecommitdiff
path: root/coverage/parser.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2013-01-08 09:57:24 -0500
committerNed Batchelder <ned@nedbatchelder.com>2013-01-08 09:57:24 -0500
commit11829e9fe0b190e0ac4ce52a98553142782b3ff6 (patch)
treebaf7c5ab00f90050f3a9d4708dc2110747aefa20 /coverage/parser.py
parent562e0493d521fd8c7972d6edc8d7e52780505fa8 (diff)
downloadpython-coveragepy-git-11829e9fe0b190e0ac4ce52a98553142782b3ff6.tar.gz
Use generators in the byte code parsing. __next__? yikes!
Diffstat (limited to 'coverage/parser.py')
-rw-r--r--coverage/parser.py15
1 files changed, 6 insertions, 9 deletions
diff --git a/coverage/parser.py b/coverage/parser.py
index 44455054..bb6b6082 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -381,27 +381,25 @@ class ByteParser(object):
"""Map byte offsets to line numbers in `code`.
Uses co_lnotab described in Python/compile.c to map byte offsets to
- line numbers. Returns a list: [(b0, l0), (b1, l1), ...]
+ line numbers. Produces a sequence: (b0, l0), (b1, l1), ...
"""
# Adapted from dis.py in the standard library.
byte_increments = self._lnotab_increments(self.code.co_lnotab[0::2])
line_increments = self._lnotab_increments(self.code.co_lnotab[1::2])
- bytes_lines = []
last_line_num = None
line_num = self.code.co_firstlineno
byte_num = 0
for byte_incr, line_incr in zip(byte_increments, line_increments):
if byte_incr:
if line_num != last_line_num:
- bytes_lines.append((byte_num, line_num))
+ yield (byte_num, line_num)
last_line_num = line_num
byte_num += byte_incr
line_num += line_incr
if line_num != last_line_num:
- bytes_lines.append((byte_num, line_num))
- return bytes_lines
+ yield (byte_num, line_num)
def _find_statements(self):
"""Find the statements in `self.code`.
@@ -426,7 +424,6 @@ class ByteParser(object):
Returns a list of `Chunk` objects.
"""
-
# The list of chunks so far, and the one we're working on.
chunks = []
chunk = None
@@ -634,11 +631,11 @@ class ByteParser(object):
class Chunk(object):
- """A sequence of bytecodes with a single entrance.
+ """A sequence of byte codes with a single entrance.
To analyze byte code, we have to divide it into chunks, sequences of byte
- codes such that each basic block has only one entrance, the first
- instruction in the block.
+ codes such that each chunk has only one entrance, the first instruction in
+ the block.
This is almost the CS concept of `basic block`_, except that we're willing
to have many exits from a chunk, and "basic block" is a more cumbersome