[Cython] Type inference and C++

Stefan Behnel stefan_ml at behnel.de
Tue Jul 24 17:25:05 CEST 2012


Vitja Makarov, 24.07.2012 14:48:
> 2012/7/24 Stefan Behnel:
>> Stefan Behnel, 24.07.2012 12:43:
>>> Vitja Makarov, 23.07.2012 07:13:
>>>> Here is part of original testcase:
>>>>
>>>> from cython.operator cimport dereference as d
>>>> from cython.operator cimport preincrement as incr
>>>> from libcpp.vector cimport vector
>>>>
>>>> def reverse_iteration_test(L):
>>>>     v = new vector[int]()
>>>>     for a in L:
>>>>         v.push_back(a)
>>>>     it = v.rbegin()
>>>>     while it != v.rend():
>>>>         a = d(it)
>>>>         incr(it)
>>>>         print(a)
>>>>
>>>> I think it's not correct to infer `a` as reverse_iterator because it's
>>>> not an iterator it's vector's item.
>>>
>>> Right. DereferenceNode should implement infer_type().
>>
>> ... and not only DereferenceNode. Pretty much all C++ operators do not
>> properly implement type inference. I'll take a look.
> 
> Ok, thanks!

Here's my fix.

https://github.com/cython/cython/commit/43f3d87d9760d3c7e7fa6a127d0bdaf549880621

It became a bit more involved than I had anticipated, including some
cleanups and fixes for a couple of quirks that I ran into.

It's really too bad that the Sage build is currently broken. The C++ code
in there would be a good exercise for this change (even if it won't benefit
from the type inference). At least, so far, it doesn't seem like it has
broken more than what was broken before.

Stefan



More information about the cython-devel mailing list