diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2021-10-18 18:04:18 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2021-10-18 18:04:18 -0400 |
commit | 8021196662dcadf161cbeaebb3be4b0392b51803 (patch) | |
tree | d8400d8e89e4998b5fd181696ab9675c89b397ff /coverage/ctracer/tracer.c | |
parent | 50a0e37ad2e7a5ec655a797f0688f616c8b1a56f (diff) | |
download | python-coveragepy-git-8021196662dcadf161cbeaebb3be4b0392b51803.tar.gz |
refactor: no need for specialized pyexpat code anymore
The pyexpat bug that plagued us was fixed in Python 3.4:
https://bugs.python.org/issue22462
We no longer need the code that adapted to it. The test will remain, couldn't
hurt.
Diffstat (limited to 'coverage/ctracer/tracer.c')
-rw-r--r-- | coverage/ctracer/tracer.c | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/coverage/ctracer/tracer.c b/coverage/ctracer/tracer.c index cf5bebb1..8b8953aa 100644 --- a/coverage/ctracer/tracer.c +++ b/coverage/ctracer/tracer.c @@ -296,48 +296,6 @@ error: */ static int -CTracer_check_missing_return(CTracer *self, PyFrameObject *frame) -{ - int ret = RET_ERROR; - - if (self->last_exc_back) { - if (frame == self->last_exc_back) { - /* Looks like someone forgot to send a return event. We'll clear - the exception state and do the RETURN code here. Notice that the - frame we have in hand here is not the correct frame for the RETURN, - that frame is gone. Our handling for RETURN doesn't need the - actual frame, but we do log it, so that will look a little off if - you're looking at the detailed log. - - If someday we need to examine the frame when doing RETURN, then - we'll need to keep more of the missed frame's state. - */ - STATS( self->stats.missed_returns++; ) - if (CTracer_set_pdata_stack(self) < 0) { - goto error; - } - if (self->pdata_stack->depth >= 0) { - if (self->tracing_arcs && self->pcur_entry->file_data) { - if (CTracer_record_pair(self, self->pcur_entry->last_line, -self->last_exc_firstlineno) < 0) { - goto error; - } - } - SHOWLOG(PyFrame_GetLineNumber(frame), MyFrame_GetCode(frame)->co_filename, "missedreturn"); - self->pdata_stack->depth--; - self->pcur_entry = &self->pdata_stack->stack[self->pdata_stack->depth]; - } - } - self->last_exc_back = NULL; - } - - ret = RET_OK; - -error: - - return ret; -} - -static int CTracer_handle_call(CTracer *self, PyFrameObject *frame) { int ret = RET_ERROR; @@ -773,30 +731,6 @@ error: return ret; } -static int -CTracer_handle_exception(CTracer *self, PyFrameObject *frame) -{ - /* Some code (Python 2.3, and pyexpat anywhere) fires an exception event - without a return event. To detect that, we'll keep a copy of the - parent frame for an exception event. If the next event is in that - frame, then we must have returned without a return event. We can - synthesize the missing event then. - - Python itself fixed this problem in 2.4. Pyexpat still has the bug. - I've reported the problem with pyexpat as http://bugs.python.org/issue6359 . - If it gets fixed, this code should still work properly. Maybe some day - the bug will be fixed everywhere coverage.py is supported, and we can - remove this missing-return detection. - - More about this fix: https://nedbatchelder.com/blog/200907/a_nasty_little_bug.html - */ - STATS( self->stats.exceptions++; ) - self->last_exc_back = frame->f_back; - self->last_exc_firstlineno = MyFrame_GetCode(frame)->co_firstlineno; - - return RET_OK; -} - /* * The Trace Function */ @@ -837,11 +771,6 @@ CTracer_trace(CTracer *self, PyFrameObject *frame, int what, PyObject *arg_unuse Py_DECREF(ascii); #endif - /* See below for details on missing-return detection. */ - if (CTracer_check_missing_return(self, frame) < 0) { - goto error; - } - self->activity = TRUE; switch (what) { @@ -863,12 +792,6 @@ CTracer_trace(CTracer *self, PyFrameObject *frame, int what, PyObject *arg_unuse } break; - case PyTrace_EXCEPTION: - if (CTracer_handle_exception(self, frame) < 0) { - goto error; - } - break; - default: STATS( self->stats.others++; ) break; @@ -1050,10 +973,8 @@ CTracer_get_stats(CTracer *self, PyObject *args_unused) "calls", self->stats.calls, "lines", self->stats.lines, "returns", self->stats.returns, - "exceptions", self->stats.exceptions, "others", self->stats.others, "files", self->stats.files, - "missed_returns", self->stats.missed_returns, "stack_reallocs", self->stats.stack_reallocs, "stack_alloc", self->pdata_stack->alloc, "errors", self->stats.errors, |