[Python-checkins] CVS: python/dist/src/Objects frameobject.c,2.49,2.49.2.1

Thomas Wouters twouters@users.sourceforge.net
Wed, 23 May 2001 06:26:31 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv6540/Objects

Modified Files:
      Tag: release21-maint
	frameobject.c 
Log Message:

Backport Jeremy's checkins (frameobject.c:2.50, test_scope.py:1.16,
test_scope:1.8):

SF patch 419176 from MvL; fixed bug 418977
Two errors in dict_to_map() helper used by PyFrame_LocalsToFast().



Index: frameobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/frameobject.c,v
retrieving revision 2.49
retrieving revision 2.49.2.1
diff -C2 -r2.49 -r2.49.2.1
*** frameobject.c	2001/04/14 17:55:41	2.49
--- frameobject.c	2001/05/23 13:26:29	2.49.2.1
***************
*** 284,293 ****
  		Py_XINCREF(value);
  		if (deref) {
! 			if (value) {
  				if (PyCell_Set(values[j], value) < 0)
  					PyErr_Clear();
- 			} else if (clear) {
- 				Py_XDECREF(values[j]);
- 				values[j] = value;
  			}
  		} else if (value != NULL || clear) {
--- 284,290 ----
  		Py_XINCREF(value);
  		if (deref) {
! 			if (value || clear) {
  				if (PyCell_Set(values[j], value) < 0)
  					PyErr_Clear();
  			}
  		} else if (value != NULL || clear) {
***************
*** 371,378 ****
  		dict_to_map(f->f_code->co_cellvars, 
  			    PyTuple_GET_SIZE(f->f_code->co_cellvars),
! 			    locals, fast, 1, clear);
  		dict_to_map(f->f_code->co_freevars, 
  			    PyTuple_GET_SIZE(f->f_code->co_freevars),
! 			    locals, fast, 1, clear);
  	}
  	PyErr_Restore(error_type, error_value, error_traceback);
--- 368,375 ----
  		dict_to_map(f->f_code->co_cellvars, 
  			    PyTuple_GET_SIZE(f->f_code->co_cellvars),
! 			    locals, fast + f->f_nlocals, 1, clear);
  		dict_to_map(f->f_code->co_freevars, 
  			    PyTuple_GET_SIZE(f->f_code->co_freevars),
! 			    locals, fast + f->f_nlocals + f->f_ncells, 1, clear);
  	}
  	PyErr_Restore(error_type, error_value, error_traceback);