diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2010-04-27 22:00:59 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2010-04-27 22:00:59 -0400 |
commit | 2ad723a05059d723d9dda504df9bbcd1e091caa2 (patch) | |
tree | 8e0c5af70768b6e3bb0a0ad669c90df04ea3ed91 /coverage/tracer.c | |
parent | 3e4217569a648776e7d6a689f0ed5b3e87caccbe (diff) | |
download | python-coveragepy-git-2ad723a05059d723d9dda504df9bbcd1e091caa2.tar.gz |
Properly record multiple exits separately. Fixes #62.
Diffstat (limited to 'coverage/tracer.c')
-rw-r--r-- | coverage/tracer.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/coverage/tracer.c b/coverage/tracer.c index 448f9452..1d227295 100644 --- a/coverage/tracer.c +++ b/coverage/tracer.c @@ -97,6 +97,7 @@ typedef struct { /* The parent frame for the last exception event, to fix missing returns. */
PyFrameObject * last_exc_back;
+ int last_exc_firstlineno;
#if COLLECT_STATS
struct {
@@ -280,7 +281,7 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg) STATS( self->stats.missed_returns++; )
if (self->depth >= 0) {
if (self->tracing_arcs && self->cur_file_data) {
- if (Tracer_record_pair(self, self->last_line, -1) < 0) {
+ if (Tracer_record_pair(self, self->last_line, -self->last_exc_firstlineno) < 0) {
return RET_ERROR;
}
}
@@ -376,7 +377,8 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg) /* A near-copy of this code is above in the missing-return handler. */
if (self->depth >= 0) {
if (self->tracing_arcs && self->cur_file_data) {
- if (Tracer_record_pair(self, self->last_line, -1) < 0) {
+ int first = frame->f_code->co_firstlineno;
+ if (Tracer_record_pair(self, self->last_line, -first) < 0) {
return RET_ERROR;
}
}
@@ -436,6 +438,7 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg) */
STATS( self->stats.exceptions++; )
self->last_exc_back = frame->f_back;
+ self->last_exc_firstlineno = frame->f_code->co_firstlineno;
break;
default:
|