[Cython] Bug: operator[] does not respect except +
Robert Bradshaw
robertwb at gmail.com
Sat Sep 6 01:15:54 CEST 2014
Yes, this is a bug.
On Fri, Sep 5, 2014 at 4:05 PM, J Robert Ray <jrobertray at gmail.com> wrote:
> I looked into at least adding a unit test to verify "except +" behavior for
> all operators and I found that aside from operator(), it seems that all
> operators ignore "except +".
>
> I have C++ code that can throw exceptions inside operator[] and sadly this
> ends up causing the python interpreter to abort.
>
>
> On Fri, Aug 8, 2014 at 7:04 PM, J Robert Ray <jrobertray at gmail.com> wrote:
>>
>> I apologize for not having a working demonstration, but I have found this
>> bug and verified it is still an issue in Cython 0.20.2. No try/catch block
>> is generated for operator[]. In contrast, a try/catch block does get
>> generated for operator().
>>
>> If it is any use, here is a paraphrasing of the pyx code and the generated
>> cpp code.
>>
>> cdef extern from "blah.h" namespace "blah":
>> cdef cppclass Blah:
>> int operator[](int) except +
>>
>> ...
>>
>> cdef class PyBlah:
>> ...
>> def demo(self, int index):
>> return deref(self.thisptr)[index]
>>
>> ...
>>
>> /* "Blah.pyx":107
>> * def demo(self, int index):
>> * return deref(self.thisptr)[index] # <<<<<<<<<<<<<<
>> */
>> __Pyx_XDECREF(__pyx_r);
>> __pyx_t_1 =
>> __Pyx_PyInt_From_int(((*__pyx_v_self->thisptr)[__pyx_v_index])); if
>> (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107;
>> __pyx_clineno = __LINE__; goto __pyx_L1_error;}
>> __Pyx_GOTREF(__pyx_t_1);
>> __pyx_r = __pyx_t_1;
>> __pyx_t_1 = 0;
>> goto __pyx_L0;
>>
>>
>> Please let me know if I'm doing anything wrong. Thanks!
>
>
>
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> https://mail.python.org/mailman/listinfo/cython-devel
>
More information about the cython-devel
mailing list