diff options
Diffstat (limited to 'Python')
-rw-r--r-- | Python/_warnings.c | 18 | ||||
-rw-r--r-- | Python/import.c | 3 | ||||
-rw-r--r-- | Python/traceback.c | 17 |
3 files changed, 22 insertions, 16 deletions
diff --git a/Python/_warnings.c b/Python/_warnings.c index f4ef0bb4b1..91c611c257 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -762,7 +762,6 @@ is_internal_frame(PyFrameObject *frame) { static PyObject *importlib_string = NULL; static PyObject *bootstrap_string = NULL; - PyObject *filename; int contains; if (importlib_string == NULL) { @@ -780,14 +779,23 @@ is_internal_frame(PyFrameObject *frame) Py_INCREF(bootstrap_string); } - if (frame == NULL || frame->f_code == NULL || - frame->f_code->co_filename == NULL) { + if (frame == NULL) { + return 0; + } + + PyCodeObject *code = PyFrame_GetCode(frame); + if (code == NULL) { + return 0; + } + + PyObject *filename = code->co_filename; + if (filename == NULL) { return 0; } - filename = frame->f_code->co_filename; if (!PyUnicode_Check(filename)) { return 0; } + contains = PyUnicode_Contains(filename, importlib_string); if (contains < 0) { return 0; @@ -846,7 +854,7 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, } else { globals = f->f_globals; - *filename = f->f_code->co_filename; + *filename = PyFrame_GetCode(f)->co_filename; Py_INCREF(*filename); *lineno = PyFrame_GetLineNumber(f); } diff --git a/Python/import.c b/Python/import.c index a8743458dd..9142ebba40 100644 --- a/Python/import.c +++ b/Python/import.c @@ -15,7 +15,6 @@ #include "errcode.h" #include "marshal.h" #include "code.h" -#include "frameobject.h" #include "importdl.h" #include "pydtrace.h" @@ -1536,7 +1535,7 @@ remove_importlib_frames(PyThreadState *tstate) PyTracebackObject *traceback = (PyTracebackObject *)tb; PyObject *next = (PyObject *) traceback->tb_next; PyFrameObject *frame = traceback->tb_frame; - PyCodeObject *code = frame->f_code; + PyCodeObject *code = PyFrame_GetCode(frame); int now_in_importlib; assert(PyTraceBack_Check(tb)); diff --git a/Python/traceback.c b/Python/traceback.c index 85e9124bb6..1ea6cbada9 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -560,24 +560,23 @@ tb_printinternal(PyTracebackObject *tb, PyObject *f, long limit) tb = tb->tb_next; } while (tb != NULL && err == 0) { + PyCodeObject *code = PyFrame_GetCode(tb->tb_frame); if (last_file == NULL || - tb->tb_frame->f_code->co_filename != last_file || + code->co_filename != last_file || last_line == -1 || tb->tb_lineno != last_line || - last_name == NULL || tb->tb_frame->f_code->co_name != last_name) { + last_name == NULL || code->co_name != last_name) { if (cnt > TB_RECURSIVE_CUTOFF) { err = tb_print_line_repeated(f, cnt); } - last_file = tb->tb_frame->f_code->co_filename; + last_file = code->co_filename; last_line = tb->tb_lineno; - last_name = tb->tb_frame->f_code->co_name; + last_name = code->co_name; cnt = 0; } cnt++; if (err == 0 && cnt <= TB_RECURSIVE_CUTOFF) { - err = tb_displayline(f, - tb->tb_frame->f_code->co_filename, - tb->tb_lineno, - tb->tb_frame->f_code->co_name); + err = tb_displayline(f, code->co_filename, tb->tb_lineno, + code->co_name); if (err == 0) { err = PyErr_CheckSignals(); } @@ -756,7 +755,7 @@ dump_frame(int fd, PyFrameObject *frame) PyCodeObject *code; int lineno; - code = frame->f_code; + code = PyFrame_GetCode(frame); PUTS(fd, " File "); if (code != NULL && code->co_filename != NULL && PyUnicode_Check(code->co_filename)) |