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

Guido van Rossum python-dev@python.org
Tue, 8 Aug 2000 09:11:34 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1665

Modified Files:
	dictobject.c 
Log Message:
Barry's patch to implement the new setdefault() method.


Index: dictobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v
retrieving revision 2.61
retrieving revision 2.62
diff -C2 -r2.61 -r2.62
*** dictobject.c	2000/07/22 19:25:51	2.61
--- dictobject.c	2000/08/08 16:11:31	2.62
***************
*** 951,954 ****
--- 951,989 ----
  
  static PyObject *
+ dict_setdefault(register dictobject *mp, PyObject *args)
+ {
+ 	PyObject *key;
+ 	PyObject *failobj = Py_None;
+ 	PyObject *val = NULL;
+ 	long hash;
+ 
+ 	if (!PyArg_ParseTuple(args, "O|O:setdefault", &key, &failobj))
+ 		return NULL;
+ 	if (mp->ma_table == NULL)
+ 		goto finally;
+ 
+ #ifdef CACHE_HASH
+ 	if (!PyString_Check(key) ||
+ 	    (hash = ((PyStringObject *) key)->ob_shash) == -1)
+ #endif
+ 	{
+ 		hash = PyObject_Hash(key);
+ 		if (hash == -1)
+ 			return NULL;
+ 	}
+ 	val = lookdict(mp, key, hash)->me_value;
+ 
+   finally:
+ 	if (val == NULL) {
+ 		val = failobj;
+ 		if (PyDict_SetItem((PyObject*)mp, key, failobj))
+ 			val = NULL;
+ 	}
+ 	Py_XINCREF(val);
+ 	return val;
+ }
+ 
+ 
+ static PyObject *
  dict_clear(register dictobject *mp, PyObject *args)
  {
***************
*** 994,997 ****
--- 1029,1033 ----
  	{"copy",	(PyCFunction)dict_copy},
  	{"get",         (PyCFunction)dict_get,          METH_VARARGS},
+ 	{"setdefault",  (PyCFunction)dict_setdefault,   METH_VARARGS},
  	{NULL,		NULL}		/* sentinel */
  };