[pypy-commit] pypy py3.5: hg merge default

rlamy pypy.commits at gmail.com
Mon Aug 14 14:54:05 EDT 2017


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: py3.5
Changeset: r92151:fee5f0e18b17
Date: 2017-08-14 20:52 +0200
http://bitbucket.org/pypy/pypy/changeset/fee5f0e18b17/

Log:	hg merge default

diff --git a/pypy/module/cpyext/src/modsupport.c b/pypy/module/cpyext/src/modsupport.c
--- a/pypy/module/cpyext/src/modsupport.c
+++ b/pypy/module/cpyext/src/modsupport.c
@@ -523,12 +523,10 @@
     return res;
 }
 
-/* returns -1 in case of error, 0 if a new key was added, 1 if the key
-   was already there (and replaced) */
-static int
-_PyModule_AddObject_NoConsumeRef(PyObject *m, const char *name, PyObject *o)
+int
+PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
 {
-    PyObject *dict, *prev;
+    PyObject *dict;
     if (!PyModule_Check(m)) {
         PyErr_SetString(PyExc_TypeError,
                     "PyModule_AddObject() needs module as first arg");
@@ -548,49 +546,34 @@
                      PyModule_GetName(m));
         return -1;
     }
-    prev = PyDict_GetItemString(dict, name);
     if (PyDict_SetItemString(dict, name, o))
         return -1;
-    return prev != NULL;
-}
-
-int
-PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
-{
-    int result = _PyModule_AddObject_NoConsumeRef(m, name, o);
-    /* XXX WORKAROUND for a common misusage of PyModule_AddObject:
-       for the common case of adding a new key, we don't consume a
-       reference, but instead just leak it away.  The issue is that
-       people generally don't realize that this function consumes a
-       reference, because on CPython the reference is still stored
-       on the dictionary. */
-    if (result != 0)
-        Py_DECREF(o);
-    return result < 0 ? -1 : 0;
+    Py_DECREF(o);
+    return 0;
 }
 
 int
 PyModule_AddIntConstant(PyObject *m, const char *name, long value)
 {
-    int result;
     PyObject *o = PyLong_FromLong(value);
     if (!o)
         return -1;
-    result = _PyModule_AddObject_NoConsumeRef(m, name, o);
+    if (PyModule_AddObject(m, name, o) == 0)
+        return 0;
     Py_DECREF(o);
-    return result < 0 ? -1 : 0;
+    return -1;
 }
 
 int
 PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
 {
-    int result;
     PyObject *o = PyUnicode_FromString(value);
     if (!o)
         return -1;
-    result = _PyModule_AddObject_NoConsumeRef(m, name, o);
+    if (PyModule_AddObject(m, name, o) == 0)
+        return 0;
     Py_DECREF(o);
-    return result < 0 ? -1 : 0;
+    return -1;
 }
 
 PyModuleDef*
diff --git a/pypy/module/cpyext/test/test_capsule.py b/pypy/module/cpyext/test/test_capsule.py
--- a/pypy/module/cpyext/test/test_capsule.py
+++ b/pypy/module/cpyext/test/test_capsule.py
@@ -12,9 +12,6 @@
                  if (PyErr_Occurred()) return NULL;
                  module = PyImport_ImportModule("foo");
                  PyModule_AddObject(module, "_ptr", capsule);
-                 #ifdef PYPY_VERSION
-                   Py_DECREF(capsule);  /* XXX <--- anti-workaround */
-                 #endif
                  Py_DECREF(module);
                  if (PyErr_Occurred()) return NULL;
                  Py_RETURN_NONE;


More information about the pypy-commit mailing list