diff options
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/setobject.c | 4 | ||||
-rw-r--r-- | Objects/typeobject.c | 19 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 6 |
3 files changed, 16 insertions, 13 deletions
diff --git a/Objects/setobject.c b/Objects/setobject.c index 2fd03af..f760b6a 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -96,7 +96,9 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash) else { if (entry->hash == hash) { startkey = entry->key; + Py_INCREF(startkey); cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); + Py_DECREF(startkey); if (cmp < 0) return NULL; if (table == so->table && entry->key == startkey) { @@ -127,7 +129,9 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash) break; if (entry->hash == hash && entry->key != dummy) { startkey = entry->key; + Py_INCREF(startkey); cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); + Py_DECREF(startkey); if (cmp < 0) return NULL; if (table == so->table && entry->key == startkey) { diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 6e4ac7a..c139fbc 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -33,7 +33,6 @@ struct method_cache_entry { static struct method_cache_entry method_cache[1 << MCACHE_SIZE_EXP]; static unsigned int next_version_tag = 0; -static void type_modified(PyTypeObject *); unsigned int PyType_ClearCache(void) @@ -48,12 +47,12 @@ PyType_ClearCache(void) } next_version_tag = 0; /* mark all version tags as invalid */ - type_modified(&PyBaseObject_Type); + PyType_Modified(&PyBaseObject_Type); return cur_version_tag; } -static void -type_modified(PyTypeObject *type) +void +PyType_Modified(PyTypeObject *type) { /* Invalidate any cached data for the specified type and all subclasses. This function is called after the base @@ -87,7 +86,7 @@ type_modified(PyTypeObject *type) ref = PyList_GET_ITEM(raw, i); ref = PyWeakref_GET_OBJECT(ref); if (ref != Py_None) { - type_modified((PyTypeObject *)ref); + PyType_Modified((PyTypeObject *)ref); } } } @@ -173,7 +172,7 @@ assign_version_tag(PyTypeObject *type) Py_INCREF(Py_None); } /* mark all version tags as invalid */ - type_modified(&PyBaseObject_Type); + PyType_Modified(&PyBaseObject_Type); return 1; } bases = type->tp_bases; @@ -313,7 +312,7 @@ type_set_module(PyTypeObject *type, PyObject *value, void *context) return -1; } - type_modified(type); + PyType_Modified(type); return PyDict_SetItemString(type->tp_dict, "__module__", value); } @@ -341,7 +340,7 @@ type_set_abstractmethods(PyTypeObject *type, PyObject *value, void *context) int res = PyDict_SetItemString(type->tp_dict, "__abstractmethods__", value); if (res == 0) { - type_modified(type); + PyType_Modified(type); if (value && PyObject_IsTrue(value)) { type->tp_flags |= Py_TPFLAGS_IS_ABSTRACT; } @@ -1520,7 +1519,7 @@ mro_internal(PyTypeObject *type) from the custom MRO */ type_mro_modified(type, type->tp_bases); - type_modified(type); + PyType_Modified(type); return 0; } @@ -5750,7 +5749,7 @@ update_slot(PyTypeObject *type, PyObject *name) update_subclasses() recursion below, but carefully: they each have their own conditions on which to stop recursing into subclasses. */ - type_modified(type); + PyType_Modified(type); init_slotdefs(); pp = ptrs; diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index fc8c8a9..5cd9eb9 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -7524,11 +7524,11 @@ PyObject *PyUnicode_Replace(PyObject *obj, } PyDoc_STRVAR(replace__doc__, -"S.replace (old, new[, maxsplit]) -> str\n\ +"S.replace (old, new[, count]) -> str\n\ \n\ Return a copy of S with all occurrences of substring\n\ -old replaced by new. If the optional argument maxsplit is\n\ -given, only the first maxsplit occurrences are replaced."); +old replaced by new. If the optional argument count is\n\ +given, only the first count occurrences are replaced."); static PyObject* unicode_replace(PyUnicodeObject *self, PyObject *args) |