diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-02-22 10:57:18 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-02-22 10:57:18 +0300 |
commit | 1e120098fc7e668a28d7eed6a082f5a8b134e39c (patch) | |
tree | 39a838b39efe3c26b6a4a316db69b222e4ad1279 /source/blender/python/generic | |
parent | 91357ae2ea11894adf1519eb149ac3dd48bc26f8 (diff) |
pyapi, use direct access to the frame rather then python attributes.
Diffstat (limited to 'source/blender/python/generic')
-rw-r--r-- | source/blender/python/generic/py_capi_utils.c | 45 |
1 files changed, 9 insertions, 36 deletions
diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c index e8618883874..8e8da87b85f 100644 --- a/source/blender/python/generic/py_capi_utils.c +++ b/source/blender/python/generic/py_capi_utils.c @@ -21,6 +21,7 @@ */ #include <Python.h> +#include <frameobject.h> #include "py_capi_utils.h" @@ -56,37 +57,20 @@ void PyC_LineSpit(void) { void PyC_FileAndNum(const char **filename, int *lineno) { - PyObject *getframe, *frame; - PyObject *f_lineno= NULL, *co_filename= NULL; + PyFrameObject *frame; if (filename) *filename= NULL; if (lineno) *lineno = -1; - - getframe = PySys_GetObject("_getframe"); // borrowed - if (getframe==NULL) { - PyErr_Clear(); - return; - } - - frame = PyObject_CallObject(getframe, NULL); - if (frame==NULL) { - PyErr_Clear(); + + if (!(frame= PyThreadState_GET()->frame)) { return; } - + /* when executing a script */ if (filename) { - co_filename= PyC_Object_GetAttrStringArgs(frame, 2, "f_code", "co_filename"); - if (co_filename==NULL) { - PyErr_SetString(PyExc_RuntimeError, "Could not access sys._getframe().f_code.co_filename"); - Py_DECREF(frame); - return; - } - - *filename = _PyUnicode_AsString(co_filename); - Py_DECREF(co_filename); + *filename = _PyUnicode_AsString(frame->f_code->co_filename); } - + /* when executing a module */ if(filename && *filename == NULL) { /* try an alternative method to get the filename - module based @@ -104,21 +88,10 @@ void PyC_FileAndNum(const char **filename, int *lineno) } } } - - + if (lineno) { - f_lineno= PyObject_GetAttrString(frame, "f_lineno"); - if (f_lineno==NULL) { - PyErr_SetString(PyExc_RuntimeError, "Could not access sys._getframe().f_lineno"); - Py_DECREF(frame); - return; - } - - *lineno = (int)PyLong_AsSsize_t(f_lineno); - Py_DECREF(f_lineno); + *lineno = PyFrame_GetLineNumber(frame); } - - Py_DECREF(frame); } /* Would be nice if python had this built in */ |