[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 */
};