summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Include/ceval.h4
-rw-r--r--Include/pystate.h4
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/signalmodule.c2
-rw-r--r--Python/ceval.c14
-rw-r--r--Python/pystate.c4
6 files changed, 19 insertions, 12 deletions
diff --git a/Include/ceval.h b/Include/ceval.h
index 9bb145d..8d0ca9e 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -25,11 +25,13 @@ PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
+struct _frame; /* Avoid including frameobject.h */
+
PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
PyAPI_FUNC(PyObject *) PyEval_GetOwner(void);
-PyAPI_FUNC(PyObject *) PyEval_GetFrame(void);
+PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);
PyAPI_FUNC(int) PyEval_GetRestricted(void);
/* Look at the current frame's (if any) code's co_flags, and turn on
diff --git a/Include/pystate.h b/Include/pystate.h
index d4233bf..3e5b5b4 100644
--- a/Include/pystate.h
+++ b/Include/pystate.h
@@ -107,8 +107,10 @@ PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *);
PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *);
PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *);
+typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_);
+
/* hook for PyEval_GetFrame(), requested for Psyco */
-PyAPI_DATA(unaryfunc) _PyThreadState_GetFrame;
+PyAPI_DATA(PyThreadFrameGetter) _PyThreadState_GetFrame;
#ifdef __cplusplus
}
diff --git a/Misc/NEWS b/Misc/NEWS
index 7198541..2b12d6c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -326,6 +326,9 @@ Build
C API
-----
+- PyEval_GetFrame() is now declared to return a PyFrameObject *
+ instead of a plain PyObject *. (SF patch #686601.)
+
- PyNumber_Check() now checks that the object has a nb_int or nb_float
slot, rather than simply checking whether it has a non-NULL
tp_as_number pointer.
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 0f9574f..2224ec9 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -766,7 +766,7 @@ PyErr_CheckSignals(void)
if (PyThread_get_thread_ident() != main_thread)
return 0;
#endif
- if (!(f = PyEval_GetFrame()))
+ if (!(f = (PyObject *)PyEval_GetFrame()))
f = Py_None;
for (i = 1; i < NSIG; i++) {
diff --git a/Python/ceval.c b/Python/ceval.c
index 801f08d..9a5d039 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3077,7 +3077,7 @@ PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
PyObject *
PyEval_GetBuiltins(void)
{
- PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
+ PyFrameObject *current_frame = PyEval_GetFrame();
if (current_frame == NULL)
return PyThreadState_Get()->interp->builtins;
else
@@ -3087,7 +3087,7 @@ PyEval_GetBuiltins(void)
PyObject *
PyEval_GetLocals(void)
{
- PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
+ PyFrameObject *current_frame = PyEval_GetFrame();
if (current_frame == NULL)
return NULL;
PyFrame_FastToLocals(current_frame);
@@ -3097,31 +3097,31 @@ PyEval_GetLocals(void)
PyObject *
PyEval_GetGlobals(void)
{
- PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
+ PyFrameObject *current_frame = PyEval_GetFrame();
if (current_frame == NULL)
return NULL;
else
return current_frame->f_globals;
}
-PyObject *
+PyFrameObject *
PyEval_GetFrame(void)
{
PyThreadState *tstate = PyThreadState_Get();
- return _PyThreadState_GetFrame((PyObject *)tstate);
+ return _PyThreadState_GetFrame(tstate);
}
int
PyEval_GetRestricted(void)
{
- PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
+ PyFrameObject *current_frame = PyEval_GetFrame();
return current_frame == NULL ? 0 : current_frame->f_restricted;
}
int
PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
{
- PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
+ PyFrameObject *current_frame = PyEval_GetFrame();
int result = cf->cf_flags != 0;
if (current_frame != NULL) {
diff --git a/Python/pystate.c b/Python/pystate.c
index 707e43e..e200ece 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -35,7 +35,7 @@ static PyThread_type_lock head_mutex = NULL; /* Protects interp->tstate_head */
static PyInterpreterState *interp_head = NULL;
PyThreadState *_PyThreadState_Current = NULL;
-unaryfunc _PyThreadState_GetFrame = NULL;
+PyThreadFrameGetter _PyThreadState_GetFrame = NULL;
PyInterpreterState *
@@ -126,7 +126,7 @@ PyThreadState_New(PyInterpreterState *interp)
{
PyThreadState *tstate = PyMem_NEW(PyThreadState, 1);
if (_PyThreadState_GetFrame == NULL)
- _PyThreadState_GetFrame = (unaryfunc)threadstate_getframe;
+ _PyThreadState_GetFrame = threadstate_getframe;
if (tstate != NULL) {
tstate->interp = interp;