[Cython] CF based type inference

Vitja Makarov vitja.makarov at gmail.com
Tue May 8 15:47:29 CEST 2012


2012/5/8 Stefan Behnel <stefan_ml at behnel.de>:
> Hi,
>
> 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.


-- 
vitja.


More information about the cython-devel mailing list