On 9 May 2012 14:16, Vitja Makarov <vitja.maka...@gmail.com> wrote: > 2012/5/9 Vitja Makarov <vitja.maka...@gmail.com>: >> 2012/5/9 Vitja Makarov <vitja.maka...@gmail.com>: >>> 2012/5/9 mark florisson <markflorisso...@gmail.com>: >>>> On 9 May 2012 13:39, Vitja Makarov <vitja.maka...@gmail.com> wrote: >>>>> 2012/5/9 Vitja Makarov <vitja.maka...@gmail.com>: >>>>>> 2012/5/9 Stefan Behnel <stefan...@behnel.de>: >>>>>>> Stefan Behnel, 08.05.2012 14:24: >>>>>>>> Vitja has rebased the type inference on the control flow >>>>>>> >>>>>>> On a related note, is this fixable now? >>>>>>> >>>>>>> def test(): >>>>>>> x = 1 # inferred as int >>>>>>> del x # error: Deletion of non-Python, non-C++ object >>>>>>> >>>>>>> http://trac.cython.org/cython_trac/ticket/768 >>>>>>> >>>>>>> It might be enough to infer "object" for names that are being del-ed for >>>>>>> now, and to fix "del" The Right Way when we split entries. >>>>>>> >>>>>> >>>>>> Do you mean that `x` should be inferred as "python object" in your >>>>>> example? >>>>>> >>>>>> Yes, we may add workaround for del <unspecified_type> case. >>>>>> Del is represented now by NameDeletion with the same rhs and lhs. >>>>>> >>>>>> We can add method infer_type() to NameAssignment and use it instead of >>>>>> Node.infer_type() >>>>>> >>>>>> >>>>> >>>>> Here I've tried to fix it, now deletion always infers as python_object >>>>> >>>>> https://github.com/vitek/cython/commit/225c9c60bed6406db46e87da31596e053056f8b7 >>>>> >>>>> >>>>> That may break C++ object deletion >>>>> >>>> >>>> Memoryviews can be deleted as well. >>> >>> >>> That code is run for entries with unspecified_type only >>> >>> >> >> Yeah, this code doesn't work now: >> >> cdef extern from "foo.h": >> cdef cppclass Foo: >> Foo() >> >> def foo(): >> foo = new Foo() >> print typeof(foo) >> del foo >> >> And I'm not sure how to fix it. > > I've fixed cppclasses: > > https://github.com/vitek/cython/commit/f5acf44be0f647bdcbb5a23c8bfbceff48f4414e > > About memoryviews: > > from cython cimport typeof > > def foo(float[::1] a): > b = a > #del b > print typeof(b) > print typeof(a) > > > In this example `b` is inferred as 'Python object' and not > `float[::1]`, is that correct? > > -- > vitja. > _______________________________________________ > cython-devel mailing list > cython-devel@python.org > http://mail.python.org/mailman/listinfo/cython-devel
That's the current behaviour, but it would be better if it inferred a memoryview slice instead. _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel