Mailing List Archive

python/dist/src/Python ceval.c,2.301.4.7,2.301.4.8 pystate.c,2.20,2.20.16.1
Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv14160/Python

Modified Files:
Tag: release22-maint
ceval.c pystate.c
Log Message:
This is Armin Rigo's patch:

[ 617309 ] getframe hook (Psyco #1)

Forward port candidate.


Index: ceval.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v
retrieving revision 2.301.4.7
retrieving revision 2.301.4.8
diff -C2 -d -r2.301.4.7 -r2.301.4.8
*** ceval.c 7 Oct 2002 09:40:20 -0000 2.301.4.7
--- ceval.c 7 Oct 2002 09:47:20 -0000 2.301.4.8
***************
*** 2950,2957 ****
PyEval_GetBuiltins(void)
{
! PyThreadState *tstate = PyThreadState_Get();
! PyFrameObject *current_frame = tstate->frame;
if (current_frame == NULL)
! return tstate->interp->builtins;
else
return current_frame->f_builtins;
--- 2950,2956 ----
PyEval_GetBuiltins(void)
{
! PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
if (current_frame == NULL)
! return PyThreadState_Get()->interp->builtins;
else
return current_frame->f_builtins;
***************
*** 2961,2965 ****
PyEval_GetLocals(void)
{
! PyFrameObject *current_frame = PyThreadState_Get()->frame;
if (current_frame == NULL)
return NULL;
--- 2960,2964 ----
PyEval_GetLocals(void)
{
! PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
if (current_frame == NULL)
return NULL;
***************
*** 2971,2975 ****
PyEval_GetGlobals(void)
{
! PyFrameObject *current_frame = PyThreadState_Get()->frame;
if (current_frame == NULL)
return NULL;
--- 2970,2974 ----
PyEval_GetGlobals(void)
{
! PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
if (current_frame == NULL)
return NULL;
***************
*** 2981,2986 ****
PyEval_GetFrame(void)
{
! PyFrameObject *current_frame = PyThreadState_Get()->frame;
! return (PyObject *)current_frame;
}

--- 2980,2985 ----
PyEval_GetFrame(void)
{
! PyThreadState *tstate = PyThreadState_Get();
! return _PyThreadState_GetFrame((PyObject *)tstate);
}

***************
*** 2988,2992 ****
PyEval_GetRestricted(void)
{
! PyFrameObject *current_frame = PyThreadState_Get()->frame;
return current_frame == NULL ? 0 : current_frame->f_restricted;
}
--- 2987,2991 ----
PyEval_GetRestricted(void)
{
! PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
return current_frame == NULL ? 0 : current_frame->f_restricted;
}
***************
*** 2995,2999 ****
PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
{
! PyFrameObject *current_frame = PyThreadState_Get()->frame;
int result = 0;

--- 2994,2998 ----
PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
{
! PyFrameObject *current_frame = (PyFrameObject *)PyEval_GetFrame();
int result = 0;


Index: pystate.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/pystate.c,v
retrieving revision 2.20
retrieving revision 2.20.16.1
diff -C2 -d -r2.20 -r2.20.16.1
*** pystate.c 19 Jul 2001 12:19:27 -0000 2.20
--- pystate.c 7 Oct 2002 09:47:21 -0000 2.20.16.1
***************
*** 36,39 ****
--- 36,40 ----

PyThreadState *_PyThreadState_Current = NULL;
+ unaryfunc _PyThreadState_GetFrame = NULL;


***************
*** 115,122 ****
--- 116,132 ----


+ /* Default implementation for _PyThreadState_GetFrame */
+ static struct _frame *
+ threadstate_getframe(PyThreadState *self)
+ {
+ return self->frame;
+ }
+
PyThreadState *
PyThreadState_New(PyInterpreterState *interp)
{
PyThreadState *tstate = PyMem_NEW(PyThreadState, 1);
+ if (_PyThreadState_GetFrame == NULL)
+ _PyThreadState_GetFrame = (unaryfunc)threadstate_getframe;

if (tstate != NULL) {