[Python-checkins] CVS: python/dist/src/Objects dictobject.c,2.80.2.8,2.80.2.9

Guido van Rossum gvanrossum@users.sourceforge.net
2001年6月07日 04:38:57 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv5732
Modified Files:
 Tag: descr-branch
	dictobject.c 
Log Message:
Make PyDict_SetItem() and PyDict_DelItem() call on their PyObject_
cousins when the type is a derived type from PyDict_Type -- this makes
it possible to create a derived dictionary class that implements
restrictions on item assignments and pass that as the dict to
exec/eval, for example.
Don't do this for PyDict_Clear(). It's trickier there: there's no
PyObject_Clear(), and calling self.clear() might recurse right into
PyDict_Clear(). PyDict_Clear() is only used by the standard library
in a few places, and in at least one of those (GC) setting a trap
would be inappropriate anyway.
Index: dictobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v
retrieving revision 2.80.2.8
retrieving revision 2.80.2.9
diff -C2 -r2.80.2.8 -r2.80.2.9
*** dictobject.c	2001年06月06日 14:27:54	2.80.2.8
--- dictobject.c	2001年06月07日 11:38:55	2.80.2.9
***************
*** 424,428 ****
 	register int n_used;
 
! 	if (!PyDict_Check(op)) {
 		PyErr_BadInternalCall();
 		return -1;
--- 424,430 ----
 	register int n_used;
 
! 	if (op->ob_type != &PyDict_Type) {
! 		if (PyDict_Check(op))
! 			return PyObject_SetItem(op, key, value);
 		PyErr_BadInternalCall();
 		return -1;
***************
*** 486,490 ****
 	PyObject *old_value, *old_key;
 
! 	if (!PyDict_Check(op)) {
 		PyErr_BadInternalCall();
 		return -1;
--- 488,494 ----
 	PyObject *old_value, *old_key;
 
! 	if (op->ob_type != &PyDict_Type) {
! 		if (PyDict_Check(op))
! 			return PyObject_DelItem(op, key);
 		PyErr_BadInternalCall();
 		return -1;

AltStyle によって変換されたページ (->オリジナル) /