[Cython] CF based type inference

mark florisson markflorisson88 at gmail.com
Wed May 9 15:18:44 CEST 2012


On 9 May 2012 14:16, Vitja Makarov <vitja.makarov at gmail.com> wrote:
> 2012/5/9 Vitja Makarov <vitja.makarov at gmail.com>:
>> 2012/5/9 Vitja Makarov <vitja.makarov at gmail.com>:
>>> 2012/5/9 mark florisson <markflorisson88 at gmail.com>:
>>>> On 9 May 2012 13:39, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>>>>> 2012/5/9 Vitja Makarov <vitja.makarov at gmail.com>:
>>>>>> 2012/5/9 Stefan Behnel <stefan_ml at 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 at 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.


More information about the cython-devel mailing list