summaryrefslogtreecommitdiff
path: root/coverage/fullcoverage
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2011-08-08 20:37:38 -0400
committerNed Batchelder <ned@nedbatchelder.com>2011-08-08 20:37:38 -0400
commit829215d157dca64cd1d88be27908e73a084715a7 (patch)
tree4ea73ce6678a4ebd4be47e23ee58ae4603bedd70 /coverage/fullcoverage
parentcbf42dc7273bfb828c8124c7b7229be15c15b202 (diff)
downloadpython-coveragepy-git-829215d157dca64cd1d88be27908e73a084715a7.tar.gz
A fullcoverage tracer that works. Events are stashed, then replayed when coverage is started.
Diffstat (limited to 'coverage/fullcoverage')
-rw-r--r--coverage/fullcoverage/encodings.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/coverage/fullcoverage/encodings.py b/coverage/fullcoverage/encodings.py
index 48b2b2e0..4e1ab354 100644
--- a/coverage/fullcoverage/encodings.py
+++ b/coverage/fullcoverage/encodings.py
@@ -17,13 +17,22 @@ import sys
class FullCoverageTracer(object):
def __init__(self):
+ # `traces` is a list of trace events. Frames are tricky: the same
+ # frame object is used for a whole scope, with new line numbers
+ # written into it. So in one scope, all the frame objects are the
+ # same object, and will eventually all will point to the last line
+ # executed. So we keep the line numbers alongside the frames.
+ # The list looks like:
+ #
+ # traces = [
+ # ((frame, event, arg), lineno), ...
+ # ]
+ #
self.traces = []
def fullcoverage_trace(self, *args):
frame, event, arg = args
- #if "os.py" in frame.f_code.co_filename:
- # print("%s @ %d" % (frame.f_code.co_filename, frame.f_lineno))
- self.traces.append(args)
+ self.traces.append((args, frame.f_lineno))
return self.fullcoverage_trace
sys.settrace(FullCoverageTracer().fullcoverage_trace)