#define DICTKEY_DECL \
PyObject *dictkey_todecref = NULL;
-#define DICTKEY_CHECK_EMPTY(err) \
- if (*key == NUL) \
- { \
- PyErr_SetString(PyExc_ValueError, _("empty keys are not allowed")); \
- return err; \
- }
-#define DICTKEY_SET_KEY (key = StringToChars(keyObject, &dictkey_todecref))
#define DICTKEY_GET(err, decref) \
- if (!DICTKEY_SET_KEY) \
+ if (!(key = StringToChars(keyObject, &dictkey_todecref))) \
{ \
if (decref) \
{ \
} \
if (decref && !dictkey_todecref) \
dictkey_todecref = keyObject; \
- DICTKEY_CHECK_EMPTY(err)
+ if (*key == NUL) \
+ { \
+ PyErr_SetString(PyExc_ValueError, _("empty keys are not allowed")); \
+ return err; \
+ }
#define DICTKEY_UNREF \
Py_XDECREF(dictkey_todecref);
while (PyDict_Next(obj, &iter, &keyObject, &valObject))
{
- DICTKEY_DECL
+ PyObject *todecref = NULL;
if (keyObject == NULL || valObject == NULL)
{
return -1;
}
- if (!DICTKEY_SET_KEY)
+ if (!(key = StringToChars(keyObject, &todecref)))
+ {
+ dict_unref(dict);
+ return -1;
+ }
+ if (*key == NUL)
{
dict_unref(dict);
+ Py_XDECREF(todecref);
return -1;
}
- DICTKEY_CHECK_EMPTY(-1)
di = dictitem_alloc(key);
- DICTKEY_UNREF
+ Py_XDECREF(todecref);
if (di == NULL)
{
while ((keyObject = PyIter_Next(iterator)))
{
- DICTKEY_DECL
+ PyObject *todecref;
- if (!DICTKEY_SET_KEY)
+ if (!(key = StringToChars(keyObject, &todecref)))
{
+ Py_DECREF(keyObject);
Py_DECREF(iterator);
dict_unref(dict);
- DICTKEY_UNREF
return -1;
}
- DICTKEY_CHECK_EMPTY(-1)
+ if (*key == NUL)
+ {
+ Py_DECREF(keyObject);
+ Py_DECREF(iterator);
+ Py_XDECREF(todecref);
+ dict_unref(dict);
+ return -1;
+ }
if (!(valObject = PyObject_GetItem(obj, keyObject)))
{
Py_DECREF(keyObject);
Py_DECREF(iterator);
+ Py_XDECREF(todecref);
dict_unref(dict);
- DICTKEY_UNREF
return -1;
}
di = dictitem_alloc(key);
- DICTKEY_UNREF
-
Py_DECREF(keyObject);
+ Py_XDECREF(todecref);
if (di == NULL)
{