[Python-checkins] CVS: python/dist/src/Objects typeobject.c,2.112,2.113

Guido van Rossum gvanrossum@users.sourceforge.net
2001年10月25日 21:26:14 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv9797/Objects
Modified Files:
	typeobject.c 
Log Message:
Allow assignment to newinstance.__dict__.
Index: typeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v
retrieving revision 2.112
retrieving revision 2.113
diff -C2 -d -r2.112 -r2.113
*** typeobject.c	2001年10月22日 00:43:43	2.112
--- typeobject.c	2001年10月26日 04:26:11	2.113
***************
*** 675,680 ****
 }
 
 static PyGetSetDef subtype_getsets[] = {
! 	{"__dict__", subtype_dict, NULL, NULL},
 	{0},
 };
--- 675,703 ----
 }
 
+ static int
+ subtype_setdict(PyObject *obj, PyObject *value, void *context)
+ {
+ 	PyObject **dictptr = _PyObject_GetDictPtr(obj);
+ 	PyObject *dict;
+ 
+ 	if (dictptr == NULL) {
+ 		PyErr_SetString(PyExc_AttributeError,
+ 				"This object has no __dict__");
+ 		return -1;
+ 	}
+ 	if (value == NULL || !PyDict_Check(value)) {
+ 		PyErr_SetString(PyExc_TypeError,
+ 				"__dict__ must be set to a dictionary");
+ 		return -1;
+ 	}
+ 	dict = *dictptr;
+ 	Py_INCREF(value);
+ 	*dictptr = value;
+ 	Py_XDECREF(dict);
+ 	return 0;
+ }
+ 
 static PyGetSetDef subtype_getsets[] = {
! 	{"__dict__", subtype_dict, subtype_setdict, NULL},
 	{0},
 };

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