Commit e424c1d9 authored by Raymond Hettinger's avatar Raymond Hettinger

Factor out code common to PyDict_Copy() and PyDict_Merge().

parent 12c4586a
...@@ -1242,33 +1242,19 @@ dict_copy(register dictobject *mp) ...@@ -1242,33 +1242,19 @@ dict_copy(register dictobject *mp)
PyObject * PyObject *
PyDict_Copy(PyObject *o) PyDict_Copy(PyObject *o)
{ {
register dictobject *mp; PyObject *copy;
register int i;
dictobject *copy;
dictentry *entry;
if (o == NULL || !PyDict_Check(o)) { if (o == NULL || !PyDict_Check(o)) {
PyErr_BadInternalCall(); PyErr_BadInternalCall();
return NULL; return NULL;
} }
mp = (dictobject *)o; copy = PyDict_New();
copy = (dictobject *)PyDict_New();
if (copy == NULL) if (copy == NULL)
return NULL; return NULL;
if (mp->ma_used > 0) { if (PyDict_Merge(copy, o, 1) == 0)
if (dictresize(copy, mp->ma_used*2) != 0) return copy;
return NULL; Py_DECREF(copy);
for (i = 0; i <= mp->ma_mask; i++) { return copy;
entry = &mp->ma_table[i];
if (entry->me_value != NULL) {
Py_INCREF(entry->me_key);
Py_INCREF(entry->me_value);
insertdict(copy, entry->me_key, entry->me_hash,
entry->me_value);
}
}
}
return (PyObject *)copy;
} }
int int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment