[Python-Dev] Why is type_modified() in typeobject.c not a public function?
Stefan Behnel
stefan_ml at behnel.de
Wed May 28 07:47:16 CEST 2008
Hi,
Guido van Rossum wrote:
> On Tue, May 27, 2008 at 9:47 AM, Stefan Behnel <stefan_ml at behnel.de> wrote:
>> Could this function get a public interface? I do not think Cython is the only
>> case where C code wants to modify a type after its creation, and copying the
>> code over seems like a hack to me.
>>
> I'm fine with giving it a public interface. Please submit a patch with
> docs included.
Straight forward patch is attached (against 3.0a5). Works for me in Cython. I
thought about a name like "Taint(t)" or "ClearTypeCache(t)", but then went
with the coward solution of calling the function PyType_Modified() as it was
(almost) named internally.
BTW, I noticed that the code in typeobject.c uses "DECREF before set" two
times, like this:
method_cache[h].version = type->tp_version_tag;
method_cache[h].value = res; /* borrowed */
Py_INCREF(name);
Py_DECREF(method_cache[h].name);
method_cache[h].name = name;
During the call to Py_DECREF, the cache content is incorrect, so can't this
run into the same problem that Py_CLEAR() aims to solve? I attached a patch
for that, too, just in case.
Stefan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pytype_modified.patch
Type: text/x-patch
Size: 3095 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20080528/9c4d77f4/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: possible-decref-before-set-fix.patch
Type: text/x-patch
Size: 1311 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20080528/9c4d77f4/attachment-0001.bin>
More information about the Python-Dev
mailing list