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) >> >> It doesn't work with local type inference enabled since `a` in >> for-loop is infered as pyobject and in while loop it's inferred as >> reverse_iterator. >> >> Then I tried to comment out for loop and compile it with >> upstream/master, same error here: >> >> note: cpp_stl_vector.pyx:8:6: inferred 'v' to be of type 'vector[int] *' >> note: cpp_stl_vector.pyx:11:7: inferred 'it' to be of type 'reverse_iterator' >> note: cpp_stl_vector.pyx:13:10: inferred 'a' to be of type 'reverse_iterator' >> >> Error compiling Cython file: >> ------------------------------------------------------------ >> ... >> v = new vector[int]() >> #for a in L: >> # v.push_back(a) >> it = v.rbegin() >> while it != v.rend(): >> a = d(it) >> ^ >> ------------------------------------------------------------ >> >> cpp_stl_vector.pyx:13:13: Cannot assign type 'int &' to 'reverse_iterator' >> >> Error compiling Cython file: >> ------------------------------------------------------------ >> ... >> # v.push_back(a) >> it = v.rbegin() >> while it != v.rend(): >> a = d(it) >> incr(it) >> print(a) >> ^ >> ------------------------------------------------------------ >> >> cpp_stl_vector.pyx:15:15: Cannot convert 'reverse_iterator' to Python object >> >> >> 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. Stefan _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel