[Python-checkins] python/dist/src/Python ceval.c,2.301.4.7,2.301.4.8 pystate.c,2.20,2.20.16.1

mwh@users.sourceforge.net mwh@users.sourceforge.net
Mon, 07 Oct 2002 02:47:23 -0700


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) {