[Cython] CF based type inference
Stefan Behnel
stefan_ml at behnel.de
Thu May 10 08:45:45 CEST 2012
Vitja Makarov, 08.05.2012 15:47:
> 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.
How would type checks fit into this? Stupid example:
def test(x):
if isinstance(x, MyExtType):
x.call_c_method() # type known, no None check needed
else:
x.call_py_method() # type unknown, may be None
Would it work to consider a type checking branch an assignment to a new
(and differently typed) entry?
Stefan
More information about the cython-devel
mailing list