]> granicus.if.org Git - python/commitdiff
Moved tracebackobject to traceback.h, Closes SF Bug #497067
authorNicholas Bastin <nick.bastin@gmail.com>
Sun, 21 Mar 2004 18:37:23 +0000 (18:37 +0000)
committerNicholas Bastin <nick.bastin@gmail.com>
Sun, 21 Mar 2004 18:37:23 +0000 (18:37 +0000)
Include/traceback.h
Misc/NEWS
Python/traceback.c

index 659e994301b667425713e98f842b42b9362856ef..6501600c0cb2effd5de0213d189355b6a83dac57 100644 (file)
@@ -5,9 +5,17 @@
 extern "C" {
 #endif
 
+struct _frame;
+
 /* Traceback interface */
 
-struct _frame;
+typedef struct _traceback {
+       PyObject_HEAD
+       struct _traceback *tb_next;
+       struct _frame *tb_frame;
+       int tb_lasti;
+       int tb_lineno;
+} PyTracebackObject;
 
 PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *);
 PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *);
index 728d485099b5aed7c05f5d221d4cf1edc500f73c..c0e2afe6ee3c3ce1402a35b77ed56537baf4d2cc 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 2.4 alpha 1?
 Core and builtins
 -----------------
 
+- Moved tracebackobject into traceback.h and renamed to PyTracebackObject
+
 - Optimized the byte coding for multiple assignments like "a,b=b,a" and
   "a,b,c=1,2,3".  Improves their speed by 25% to 30%.
 
index 987013ccf5a3e068e9bef062f803dda923117a1f..f40cfb4a2365abbcb8dc1b71b981b50d03c6461c 100644 (file)
@@ -7,16 +7,9 @@
 #include "frameobject.h"
 #include "structmember.h"
 #include "osdefs.h"
+#include "traceback.h"
 
-typedef struct _tracebackobject {
-       PyObject_HEAD
-       struct _tracebackobject *tb_next;
-       PyFrameObject *tb_frame;
-       int tb_lasti;
-       int tb_lineno;
-} tracebackobject;
-
-#define OFF(x) offsetof(tracebackobject, x)
+#define OFF(x) offsetof(PyTracebackObject, x)
 
 static struct memberlist tb_memberlist[] = {
        {"tb_next",     T_OBJECT,       OFF(tb_next)},
@@ -27,13 +20,13 @@ static struct memberlist tb_memberlist[] = {
 };
 
 static PyObject *
-tb_getattr(tracebackobject *tb, char *name)
+tb_getattr(PyTracebackObject *tb, char *name)
 {
        return PyMember_Get((char *)tb, tb_memberlist, name);
 }
 
 static void
-tb_dealloc(tracebackobject *tb)
+tb_dealloc(PyTracebackObject *tb)
 {
        PyObject_GC_UnTrack(tb);
        Py_TRASHCAN_SAFE_BEGIN(tb)
@@ -44,7 +37,7 @@ tb_dealloc(tracebackobject *tb)
 }
 
 static int
-tb_traverse(tracebackobject *tb, visitproc visit, void *arg)
+tb_traverse(PyTracebackObject *tb, visitproc visit, void *arg)
 {
        int err = 0;
        if (tb->tb_next) {
@@ -58,7 +51,7 @@ tb_traverse(tracebackobject *tb, visitproc visit, void *arg)
 }
 
 static void
-tb_clear(tracebackobject *tb)
+tb_clear(PyTracebackObject *tb)
 {
        Py_XDECREF(tb->tb_next);
        Py_XDECREF(tb->tb_frame);
@@ -70,7 +63,7 @@ PyTypeObject PyTraceBack_Type = {
        PyObject_HEAD_INIT(&PyType_Type)
        0,
        "traceback",
-       sizeof(tracebackobject),
+       sizeof(PyTracebackObject),
        0,
        (destructor)tb_dealloc, /*tp_dealloc*/
        0,              /*tp_print*/
@@ -102,16 +95,16 @@ PyTypeObject PyTraceBack_Type = {
        0,                                      /* tp_dict */
 };
 
-static tracebackobject *
-newtracebackobject(tracebackobject *next, PyFrameObject *frame)
+static PyTracebackObject *
+newtracebackobject(PyTracebackObject *next, PyFrameObject *frame)
 {
-       tracebackobject *tb;
+       PyTracebackObject *tb;
        if ((next != NULL && !PyTraceBack_Check(next)) ||
                        frame == NULL || !PyFrame_Check(frame)) {
                PyErr_BadInternalCall();
                return NULL;
        }
-       tb = PyObject_GC_New(tracebackobject, &PyTraceBack_Type);
+       tb = PyObject_GC_New(PyTracebackObject, &PyTraceBack_Type);
        if (tb != NULL) {
                Py_XINCREF(next);
                tb->tb_next = next;
@@ -129,8 +122,8 @@ int
 PyTraceBack_Here(PyFrameObject *frame)
 {
        PyThreadState *tstate = frame->f_tstate;
-       tracebackobject *oldtb = (tracebackobject *) tstate->curexc_traceback;
-       tracebackobject *tb = newtracebackobject(oldtb, frame);
+       PyTracebackObject *oldtb = (PyTracebackObject *) tstate->curexc_traceback;
+       PyTracebackObject *tb = newtracebackobject(oldtb, frame);
        if (tb == NULL)
                return -1;
        tstate->curexc_traceback = (PyObject *)tb;
@@ -222,11 +215,11 @@ tb_displayline(PyObject *f, char *filename, int lineno, char *name)
 }
 
 static int
-tb_printinternal(tracebackobject *tb, PyObject *f, int limit)
+tb_printinternal(PyTracebackObject *tb, PyObject *f, int limit)
 {
        int err = 0;
        int depth = 0;
-       tracebackobject *tb1 = tb;
+       PyTracebackObject *tb1 = tb;
        while (tb1 != NULL) {
                depth++;
                tb1 = tb1->tb_next;
@@ -267,6 +260,6 @@ PyTraceBack_Print(PyObject *v, PyObject *f)
        }
        err = PyFile_WriteString("Traceback (most recent call last):\n", f);
        if (!err)
-               err = tb_printinternal((tracebackobject *)v, f, limit);
+               err = tb_printinternal((PyTracebackObject *)v, f, limit);
        return err;
 }