Py3/2.6 beta 2 have a public PyType_Modified() function
authorStefan Behnel <scoder@users.berlios.de>
Sat, 9 Aug 2008 15:45:20 +0000 (17:45 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Sat, 9 Aug 2008 15:45:20 +0000 (17:45 +0200)
Cython/Compiler/ExprNodes.py
Cython/Compiler/ModuleNode.py

index 636e162f1d9e2381a1c50941b52f2558f9313a8c..d52f58943d12a6405807461f42d7845669e89309 100644 (file)
@@ -870,8 +870,6 @@ class NameNode(AtomicExprNode):
         env.control_flow.set_state(self.pos, (self.name, 'source'), 'assignment')
         if self.entry.is_declared_generic:
             self.result_ctype = py_object_type
-        if self.entry.is_pyglobal and self.entry.is_member:
-            env.use_utility_code(type_cache_invalidation_code)
     
     def analyse_types(self, env):
         if self.entry is None:
@@ -1025,7 +1023,7 @@ class NameNode(AtomicExprNode):
                         self.interned_cname,
                         rhs.py_result()))
                 # in Py2.6+, we need to invalidate the method cache
-                code.putln("__Pyx_TypeModified(%s);" %
+                code.putln("PyType_Modified(%s);" %
                            entry.scope.parent_type.typeptr_cname)
             else: 
                 code.put_error_if_neg(self.pos,
@@ -4410,43 +4408,6 @@ static INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
 
 #------------------------------------------------------------------------------------
 
-type_cache_invalidation_code = [
-"""
-#if PY_VERSION_HEX >= 0x02060000
-/* #define __Pyx_TypeModified(t) PyType_Modified(t) */  /* Py3.0beta1 */
-static void __Pyx_TypeModified(PyTypeObject* type); /*proto*/
-#else
-  #define __Pyx_TypeModified(t)
-#endif
-""","""
-#if PY_VERSION_HEX >= 0x02060000
-/* copied from typeobject.c in Python 3.0a5 */
-static void __Pyx_TypeModified(PyTypeObject* type) {
-    PyObject *raw, *ref;
-    Py_ssize_t i, n;
-
-    if (!PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG))
-        return;
-
-    raw = type->tp_subclasses;
-    if (raw != NULL) {
-        n = PyList_GET_SIZE(raw);
-        for (i = 0; i < n; i++) {
-            ref = PyList_GET_ITEM(raw, i);
-            ref = PyWeakref_GET_OBJECT(ref);
-            if (ref != Py_None) {
-                __Pyx_TypeModified((PyTypeObject *)ref);
-            }
-        }
-    }
-    type->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
-}
-#endif
-"""
-]
-
-#------------------------------------------------------------------------------------
-
 # If the is_unsigned flag is set, we need to do some extra work to make 
 # sure the index doesn't become negative. 
 
index 16188e5e89b134942a48ea4068422cc2369da899..a1b56fdc4e7cbd8c9b97daf0badf84017e31a8ac 100644 (file)
@@ -417,6 +417,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
         code.putln("  #define Py_SIZE(ob)   ((PyVarObject*)(ob))->ob_size)")
         code.putln("  #define PyVarObject_HEAD_INIT(type, size) \\")
         code.putln("          PyObject_HEAD_INIT(type) size,")
+        code.putln("  #define PyType_Modified(t)")
         code.putln("")
         code.putln("  typedef struct {")
         code.putln("     void *buf;")