summaryrefslogtreecommitdiff
path: root/coverage/tracer.c
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-04-04 22:33:39 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-04-04 22:33:39 -0400
commit694816ca8df338325a1e28f5d4564324ccb31a7a (patch)
treefd259c4a3b43914793ccf59e05af749fcfba6a54 /coverage/tracer.c
parent8e10aa1d04b979e7a6b026c8be8d22f8689299ce (diff)
downloadpython-coveragepy-git-694816ca8df338325a1e28f5d4564324ccb31a7a.tar.gz
Use a finally clause to ensure that coverage measurement is stopped no matter how the main program terminates.
Diffstat (limited to 'coverage/tracer.c')
-rw-r--r--coverage/tracer.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/coverage/tracer.c b/coverage/tracer.c
index cd07ded2..d333eb65 100644
--- a/coverage/tracer.c
+++ b/coverage/tracer.c
@@ -6,6 +6,14 @@
#include "structmember.h"
#include "frameobject.h"
+#define DEBUG 1
+
+#if DEBUG
+#define IFDEBUG(x) x
+#else
+#define IFDEBUG(x)
+#endif
+
// The Tracer type.
typedef struct {
@@ -18,6 +26,8 @@ typedef struct {
int depth;
// Filenames to record at each level, or NULL if not recording.
PyObject * tracenames[300];
+
+ IFDEBUG(int nshould;)
} Tracer;
static int
@@ -28,6 +38,7 @@ Tracer_init(Tracer *self, PyObject *args, PyObject *kwds)
self->should_trace_cache = NULL;
self->started = 0;
self->depth = -1;
+ IFDEBUG(self->nshould = 0;)
return 0;
}
@@ -70,6 +81,7 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg)
tracename = PyDict_GetItem(self->should_trace_cache, filename);
if (tracename == NULL) {
// We've never considered this file before. Ask should_trace about it.
+ IFDEBUG(self->nshould++;)
PyObject * args = Py_BuildValue("(O)", filename);
tracename = PyObject_Call(self->should_trace, args, NULL);
Py_DECREF(args);
@@ -128,6 +140,7 @@ Tracer_stop(Tracer *self, PyObject *args)
PyEval_SetTrace(NULL, NULL);
self->started = 0;
}
+ IFDEBUG(printf("nshould=%d\n", self->nshould);)
return Py_BuildValue("");
}