]> granicus.if.org Git - python/commitdiff
Make _PyUnicode_FromId return borrowed references.
authorMartin v. Löwis <martin@v.loewis.de>
Mon, 7 Nov 2011 12:00:05 +0000 (13:00 +0100)
committerMartin v. Löwis <martin@v.loewis.de>
Mon, 7 Nov 2011 12:00:05 +0000 (13:00 +0100)
http://mail.python.org/pipermail/python-dev/2011-November/114347.html

Include/unicodeobject.h
Objects/object.c
Objects/typeobject.c
Objects/unicodeobject.c
Python/_warnings.c

index 58c1f55455608a88da2019c5ff6d52d860824b2b..c445ad6bf7efc13b82d26d01200d909b45929937 100644 (file)
@@ -2024,7 +2024,7 @@ PyAPI_FUNC(int) _PyUnicode_CheckConsistency(
    shutdown, all strings are released (through _PyUnicode_ClearStaticStrings).
 
    Alternatively, _Py_static_string allows to choose the variable name.
-   _PyUnicode_FromId returns a new reference to the interned string.
+   _PyUnicode_FromId returns a borrowed reference to the interned string.
    _PyObject_{Get,Set,Has}AttrId are __getattr__ versions using _Py_Identifier*.
 */
 typedef struct _Py_Identifier {
index 7db60f313130f01d8a85f916a97fe47ee16a751e..51188b7862b7ea62dfa4918d9e46304f56bb839f 100644 (file)
@@ -814,11 +814,10 @@ PyObject *
 _PyObject_GetAttrId(PyObject *v, _Py_Identifier *name)
 {
     PyObject *result;
-    PyObject *oname = _PyUnicode_FromId(name);
+    PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
     if (!oname)
         return NULL;
     result = PyObject_GetAttr(v, oname);
-    Py_DECREF(oname);
     return result;
 }
 
@@ -826,11 +825,10 @@ int
 _PyObject_HasAttrId(PyObject *v, _Py_Identifier *name)
 {
     int result;
-    PyObject *oname = _PyUnicode_FromId(name);
+    PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
     if (!oname)
         return -1;
     result = PyObject_HasAttr(v, oname);
-    Py_DECREF(oname);
     return result;
 }
 
@@ -838,11 +836,10 @@ int
 _PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w)
 {
     int result;
-    PyObject *oname = _PyUnicode_FromId(name);
+    PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
     if (!oname)
         return -1;
     result = PyObject_SetAttr(v, oname, w);
-    Py_DECREF(oname);
     return result;
 }
 
index 6b60c8f7750a54b8ec58cd897489ff14492903fb..2ca1b8ffdd0c0df50c90d9dbdf97cddf551d34e0 100644 (file)
@@ -1716,11 +1716,10 @@ get_dict_descriptor(PyTypeObject *type)
     PyObject *dict_str;
     PyObject *descr;
 
-    dict_str = _PyUnicode_FromId(&PyId___dict__);
+    dict_str = _PyUnicode_FromId(&PyId___dict__); /* borrowed */
     if (dict_str == NULL)
         return NULL;
     descr = _PyType_Lookup(type, dict_str);
-    Py_DECREF(dict_str);
     if (descr == NULL || !PyDescr_IsData(descr))
         return NULL;
 
index 8f82502ff775170d56701e57e1d6fbf0e6bbe4e9..3c14b6ba50fb6cf828376dc11e295e45a8722111 100644 (file)
@@ -1723,7 +1723,6 @@ _PyUnicode_FromId(_Py_Identifier *id)
         id->next = static_strings;
         static_strings = id;
     }
-    Py_INCREF(id->object);
     return id->object;
 }
 
index 5846426531fd73a0b831fb928e1d11cb5caeb34b..2e5b0dd4e28149e53696a7984eb63727aab80ac0 100644 (file)
@@ -666,10 +666,8 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds)
 
         if ((tmp = _PyUnicode_FromId(&PyId_get_source)) == NULL)
             return NULL;
-        Py_DECREF(tmp);
         if ((tmp = _PyUnicode_FromId(&PyId_splitlines)) == NULL)
             return NULL;
-        Py_DECREF(tmp);
 
         /* Check/get the requisite pieces needed for the loader. */
         loader = PyDict_GetItemString(module_globals, "__loader__");