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(). Stefan _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel