summaryrefslogtreecommitdiff
path: root/coverage/ctracer
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2021-08-15 08:26:36 -0400
committerNed Batchelder <ned@nedbatchelder.com>2021-08-15 08:26:36 -0400
commitdb235732dd9a0198f6e5d00b895baa516221fee2 (patch)
tree478b50037f9fdbef2fc570c3dbad899987518bfa /coverage/ctracer
parentf6d3e88ba5b2dab1720281885c99cdf3ce2844bc (diff)
downloadpython-coveragepy-git-db235732dd9a0198f6e5d00b895baa516221fee2.tar.gz
refactor: use sets to collect data
Coverage.py predates sets as a built-in data structure, so the file data collection has long been dicts with None as the values. Sets are available to us now (since Python 2.4 in 2004, which coverage.py dropped support for in 2014!), we use sets.
Diffstat (limited to 'coverage/ctracer')
-rw-r--r--coverage/ctracer/datastack.h2
-rw-r--r--coverage/ctracer/tracer.c6
-rw-r--r--coverage/ctracer/tracer.h9
3 files changed, 8 insertions, 9 deletions
diff --git a/coverage/ctracer/datastack.h b/coverage/ctracer/datastack.h
index 3b3078ba..c383e1e1 100644
--- a/coverage/ctracer/datastack.h
+++ b/coverage/ctracer/datastack.h
@@ -12,7 +12,7 @@
* possible.
*/
typedef struct DataStackEntry {
- /* The current file_data dictionary. Owned. */
+ /* The current file_data set. Owned. */
PyObject * file_data;
/* The disposition object for this frame. A borrowed instance of CFileDisposition. */
diff --git a/coverage/ctracer/tracer.c b/coverage/ctracer/tracer.c
index a3daacb6..00d9f106 100644
--- a/coverage/ctracer/tracer.c
+++ b/coverage/ctracer/tracer.c
@@ -182,7 +182,7 @@ CTracer_record_pair(CTracer *self, int l1, int l2)
goto error;
}
- if (PyDict_SetItem(self->pcur_entry->file_data, t, Py_None) < 0) {
+ if (PySet_Add(self->pcur_entry->file_data, t) < 0) {
goto error;
}
@@ -504,7 +504,7 @@ CTracer_handle_call(CTracer *self, PyFrameObject *frame)
if (PyErr_Occurred()) {
goto error;
}
- file_data = PyDict_New();
+ file_data = PySet_New(NULL);
if (file_data == NULL) {
goto error;
}
@@ -674,7 +674,7 @@ CTracer_handle_line(CTracer *self, PyFrameObject *frame)
goto error;
}
- ret2 = PyDict_SetItem(self->pcur_entry->file_data, this_line, Py_None);
+ ret2 = PySet_Add(self->pcur_entry->file_data, this_line);
Py_DECREF(this_line);
if (ret2 < 0) {
goto error;
diff --git a/coverage/ctracer/tracer.h b/coverage/ctracer/tracer.h
index 8994a9e3..fbbfa202 100644
--- a/coverage/ctracer/tracer.h
+++ b/coverage/ctracer/tracer.h
@@ -39,15 +39,14 @@ typedef struct CTracer {
PyObject * context;
/*
- The data stack is a stack of dictionaries. Each dictionary collects
+ The data stack is a stack of sets. Each set collects
data for a single source file. The data stack parallels the call stack:
each call pushes the new frame's file data onto the data stack, and each
return pops file data off.
- The file data is a dictionary whose form depends on the tracing options.
- If tracing arcs, the keys are line number pairs. If not tracing arcs,
- the keys are line numbers. In both cases, the value is irrelevant
- (None).
+ The file data is a set whose form depends on the tracing options.
+ If tracing arcs, the values are line number pairs. If not tracing arcs,
+ the values are line numbers.
*/
DataStack data_stack; /* Used if we aren't doing concurrency. */