[Python-checkins] r63757 - in python/trunk: Doc/c-api/type.rst Include/object.h Misc/NEWS Objects/typeobject.c
georg.brandl
python-checkins at python.org
Wed May 28 13:21:40 CEST 2008
Author: georg.brandl
Date: Wed May 28 13:21:39 2008
New Revision: 63757
Log:
#2989: add PyType_Modified().
Modified:
python/trunk/Doc/c-api/type.rst
python/trunk/Include/object.h
python/trunk/Misc/NEWS
python/trunk/Objects/typeobject.c
Modified: python/trunk/Doc/c-api/type.rst
==============================================================================
--- python/trunk/Doc/c-api/type.rst (original)
+++ python/trunk/Doc/c-api/type.rst Wed May 28 13:21:39 2008
@@ -37,7 +37,16 @@
.. cfunction:: unsigned int PyType_ClearCache(void)
- Clears the internal lookup cache. Return the current version tag.
+ Clear the internal lookup cache. Return the current version tag.
+
+ .. versionadded:: 2.6
+
+
+.. cfunction:: void PyType_Modified(PyTypeObject *type)
+
+ Invalidate the internal lookup cache for the type and all of its
+ subtypes. This function must be called after any manual
+ modification of the attributes or base classes of the type.
.. versionadded:: 2.6
Modified: python/trunk/Include/object.h
==============================================================================
--- python/trunk/Include/object.h (original)
+++ python/trunk/Include/object.h Wed May 28 13:21:39 2008
@@ -460,6 +460,7 @@
PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
+PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
/* Generic operations on objects */
PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int);
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS (original)
+++ python/trunk/Misc/NEWS Wed May 28 13:21:39 2008
@@ -239,7 +239,9 @@
C API
-----
-- The PyBytes functions have been renamed to PyByteArray
+- Add ``PyType_Modified()`` as a public API to clear the type cache.
+
+- The PyBytes functions have been renamed to PyByteArray.
- The PyString functions have been renamed to PyBytes. A batch of
defines were added so that the linker still sees the original
Modified: python/trunk/Objects/typeobject.c
==============================================================================
--- python/trunk/Objects/typeobject.c (original)
+++ python/trunk/Objects/typeobject.c Wed May 28 13:21:39 2008
@@ -32,7 +32,6 @@
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)
@@ -47,12 +46,12 @@
}
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
@@ -86,7 +85,7 @@
ref = PyList_GET_ITEM(raw, i);
ref = PyWeakref_GET_OBJECT(ref);
if (ref != Py_None) {
- type_modified((PyTypeObject *)ref);
+ PyType_Modified((PyTypeObject *)ref);
}
}
}
@@ -172,7 +171,7 @@
Py_INCREF(Py_None);
}
/* mark all version tags as invalid */
- type_modified(&PyBaseObject_Type);
+ PyType_Modified(&PyBaseObject_Type);
return 1;
}
bases = type->tp_bases;
@@ -300,7 +299,7 @@
return -1;
}
- type_modified(type);
+ PyType_Modified(type);
return PyDict_SetItemString(type->tp_dict, "__module__", value);
}
@@ -328,7 +327,7 @@
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;
}
@@ -1621,7 +1620,7 @@
from the custom MRO */
type_mro_modified(type, type->tp_bases);
- type_modified(type);
+ PyType_Modified(type);
return 0;
}
@@ -6092,7 +6091,7 @@
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;
More information about the Python-checkins
mailing list