[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