diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2011-08-08 20:37:38 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2011-08-08 20:37:38 -0400 |
commit | 1966f545699490822117d66a86f2de91734a6ee9 (patch) | |
tree | 7b052bb6f115e455b7d7f21f01dd843c56c296db /coverage/fullcoverage/encodings.py | |
parent | ced439588b3b3a66d5e68f00e8542d56250844d3 (diff) | |
download | python-coveragepy-1966f545699490822117d66a86f2de91734a6ee9.tar.gz |
A fullcoverage tracer that works. Events are stashed, then replayed when coverage is started.
Diffstat (limited to 'coverage/fullcoverage/encodings.py')
-rw-r--r-- | coverage/fullcoverage/encodings.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/coverage/fullcoverage/encodings.py b/coverage/fullcoverage/encodings.py index 48b2b2e..4e1ab35 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) |