Hi, while trying to replace the "import sys; if sys.version_info >= (3,0)" in the fused types dispatch code by the more straight forward "if PY_MAJOR_VERSION >= 3" (before I came to think that this particular case only guards useless code that does the wrong thing), I noticed that the code generates a declaration of PyErr_Clear() into the outside environment. When used in cdef classes, this leads to an external method being declared in the class, essentially like this:
cdef class MyClass: cdef extern from *: void PyErr_Clear() Surprisingly enough, this actually works. Cython assigns the real C-API function pointer to it during type initialisation and even calls the function directly (instead of going through the vtab) when used. A rather curious feature that I would never had thought of. Anyway, this side effect is obviously a bug in the fused types dispatch, but I don't have a good idea on how to fix it. I'm sure Mark put some thought into this while trying hard to make it work and just didn't notice the impact on type namespaces. I've put up a pull request to remove the Py3 specialisation code, but this is worth some more consideration. Stefan _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel