[Pyrex] BUG: a problem with type casting in __richcmp__...
Alexander A Naanou
alex_nanou at pochtamt.ru
Thu May 22 22:18:04 CEST 2003
Hi All!!
Problem:
the goal was to access the *private* var directly...
Here is a peace of code that worked as intended:
---cut---
cdef public class callproxy:
cdef obj
# ... (other stuff)
def __cmp__(self, other):
cdef callproxy tmp
if type(other) == callproxy:
tmp = other
return self.obj.__cmp__(tmp.obj)
return self.obj.__cmp__(other)
# ... (other stuff)
---uncut---
and here is the method that broke!! (in the same class)
---cut---
# ... (code from prev. snippet)
# this is stripped down to a state just enought to reproduce the bug..
def __richcmp__(self, other, int op):
cdef callproxy tmp
if type(other) == callproxy:
tmp = other
# ...
return self.obj.__cmp__(tmp.obj)
# ...
---uncut---
what happend is in the line "return self.obj.__cmp__(tmp.obj)" we got a python
(e.g. indirect) lookup, where as in the method __cmp__ a correct cast and
direct lookup.
I did not yet look into the generated C code, but I see no difference in the
source Pyrex code other than the method declaration...
Thanks.
With Respect..
Alex.
More information about the Pyrex
mailing list