[Python-checkins] cpython (merge 3.5 -> default): Merge 3.5
benjamin.peterson
python-checkins at python.org
Sun Jun 7 07:00:56 CEST 2015
https://hg.python.org/cpython/rev/1a0384d12165
changeset: 96529:1a0384d12165
parent: 96527:f020a0041338
parent: 96528:5e1fe2158089
user: Benjamin Peterson <benjamin at python.org>
date: Sun Jun 07 00:00:48 2015 -0500
summary:
Merge 3.5
files:
Objects/odictobject.c | 121 +++++++++++++++--------------
1 files changed, 62 insertions(+), 59 deletions(-)
diff --git a/Objects/odictobject.c b/Objects/odictobject.c
--- a/Objects/odictobject.c
+++ b/Objects/odictobject.c
@@ -2411,14 +2411,69 @@
return NULL;
}
-
- PyObject *other = PyTuple_GET_ITEM(args, 0); /* borrowed reference */
- if (other == NULL)
+ if (len == 1) {
+ PyObject *other = PyTuple_GET_ITEM(args, 0); /* borrowed reference */
+ if (other == NULL)
+ return NULL;
+ Py_INCREF(other);
+ if (PyObject_HasAttrString(other, "items")) { /* never fails */
+ PyObject *items = PyMapping_Items(other);
+ Py_DECREF(other);
+ if (items == NULL)
+ return NULL;
+ res = mutablemapping_add_pairs(self, items);
+ Py_DECREF(items);
+ if (res == -1)
+ return NULL;
+ }
+ else if (PyObject_HasAttrString(other, "keys")) { /* never fails */
+ PyObject *keys, *iterator, *key;
+ keys = PyObject_CallMethod(other, "keys", NULL);
+ if (keys == NULL) {
+ Py_DECREF(other);
+ return NULL;
+ }
+ iterator = PyObject_GetIter(keys);
+ Py_DECREF(keys);
+ if (iterator == NULL) {
+ Py_DECREF(other);
+ return NULL;
+ }
+ while (res == 0 && (key = PyIter_Next(iterator))) {
+ PyObject *value = PyObject_GetItem(other, key);
+ if (value != NULL) {
+ res = PyObject_SetItem(self, key, value);
+ Py_DECREF(value);
+ }
+ else {
+ res = -1;
+ }
+ Py_DECREF(key);
+ }
+ Py_DECREF(other);
+ Py_DECREF(iterator);
+ if (res != 0 || PyErr_Occurred())
+ return NULL;
+ }
+ else {
+ res = mutablemapping_add_pairs(self, other);
+ Py_DECREF(other);
+ if (res != 0)
+ return NULL;
+ }
+ }
+
+ /* now handle kwargs */
+ len = (kwargs != NULL) ? PyObject_Size(kwargs) : 0;
+ if (len < 0) /* PyObject_Size raised an exception. */
return NULL;
- Py_INCREF(other);
- if (PyObject_HasAttrString(other, "items")) { /* never fails */
- PyObject *items = PyMapping_Items(other);
- Py_DECREF(other);
+ if (len > 0) {
+ PyObject *items;
+ if (!PyMapping_Check(kwargs)) {
+ PyErr_SetString(PyExc_TypeError, "expected mapping for kwargs");
+ return NULL;
+ }
+ items = PyMapping_Items(kwargs);
if (items == NULL)
return NULL;
res = mutablemapping_add_pairs(self, items);
@@ -2426,58 +2481,6 @@
if (res == -1)
return NULL;
}
- else if (PyObject_HasAttrString(other, "keys")) { /* never fails */
- PyObject *keys, *iterator, *key;
- keys = PyObject_CallMethod(other, "keys", NULL);
- if (keys == NULL) {
- Py_DECREF(other);
- return NULL;
- }
- iterator = PyObject_GetIter(keys);
- Py_DECREF(keys);
- if (iterator == NULL) {
- Py_DECREF(other);
- return NULL;
- }
- while (res == 0 && (key = PyIter_Next(iterator))) {
- PyObject *value = PyObject_GetItem(other, key);
- if (value != NULL) {
- res = PyObject_SetItem(self, key, value);
- Py_DECREF(value);
- }
- else {
- res = -1;
- }
- Py_DECREF(key);
- }
- Py_DECREF(other);
- Py_DECREF(iterator);
- if (res != 0 || PyErr_Occurred())
- return NULL;
- }
- else {
- res = mutablemapping_add_pairs(self, other);
- Py_DECREF(other);
- if (res != 0)
- return NULL;
- }
-
- /* now handle kwargs */
- len = (kwargs != NULL) ? PyObject_Size(kwargs) : 0;
- if (len < 0) /* PyObject_Size raised an exception. */
- return NULL;
- PyObject *items;
- if (!PyMapping_Check(kwargs)) {
- PyErr_SetString(PyExc_TypeError, "expected mapping for kwargs");
- return NULL;
- }
- items = PyMapping_Items(kwargs);
- if (items == NULL)
- return NULL;
- res = mutablemapping_add_pairs(self, items);
- Py_DECREF(items);
- if (res == -1)
- return NULL;
Py_RETURN_NONE;
}
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list