[Cython] CF based type inference
Robert Bradshaw
robertwb at gmail.com
Fri May 11 17:48:52 CEST 2012
On Tue, May 8, 2012 at 11:22 PM, Stefan Behnel <stefan_ml at behnel.de> wrote:
> Robert Bradshaw, 09.05.2012 00:12:
>> On Tue, May 8, 2012 at 6:47 AM, Vitja Makarov wrote:
>>> 2012/5/8 Stefan Behnel:
>>>> Vitja has rebased the type inference on the control flow, so I wonder if
>>>> this will enable us to properly infer this:
>>>>
>>>> def partial_validity():
>>>> """
>>>> >>> partial_validity()
>>>> ('Python object', 'double', 'str object')
>>>> """
>>>> a = 1.0
>>>> b = a + 2 # definitely double
>>>> a = 'test'
>>>> c = a + 'toast' # definitely str
>>>> return typeof(a), typeof(b), typeof(c)
>>>>
>>>> I think, what is mainly needed for this is that a NameNode with an
>>>> undeclared type should not report its own entry as dependency but that of
>>>> its own cf_assignments. Would this work?
>>>>
>>>> (Haven't got the time to try it out right now, so I'm dumping it here.)
>>>>
>>>
>>> Yeah, that might work. The other way to go is to split entries:
>>>
>>> def partial_validity():
>>> """
>>> >>> partial_validity()
>>> ('str object', 'double', 'str object')
>>> """
>>> a_1 = 1.0
>>> b = a_1 + 2 # definitely double
>>> a_2 = 'test'
>>> c = a_2 + 'toast' # definitely str
>>> return typeof(a_2), typeof(b), typeof(c)
>>>
>>> And this should work better because it allows to infer a_1 as a double
>>> and a_2 as a string.
>>
>> This already works, right?
>
> It would work if it was implemented. *wink*
Well, we don't infer str, but that's a separate issue from control flow.
- Robert
More information about the cython-devel
mailing list