Stefan Behnel, 25.05.2010 09:07:
> Robert Bradshaw, 24.05.2010 20:44:
>> On May 24, 2010, at 11:13 AM, Stefan Behnel wrote:
>>> Can we at least emit a warning that there is a better way to do it,
>>> when we find that a comprehension is based on a cdef-ed variable?
>>
>> Yes, we should probably omit a warning. Another idea to throw out
>> there is that we could borrow the type from the containing scope, if
>> any, just not alter its value. Thinking of it, I've actually used this
>> a lot:
>>
>> cdef int i
>> L = [foo[i] for i in range(...)]
>>
>> or other more complicated expressions. -1 to changing it and making
>> all such loops slow Python loops.
>
> I agree that that's a major concern. Taking the declaration from the
> surrounding scope may actually be the simplest way to fix it, especially
> since this will also work in pure mode.

The behaviour I now implemented in cython-closures is this:

1) all comprehensions continue to leak loop variables
2) genexps have their own scope and do not leak variables
3) if the outer scope of a genexp has a type declaration for a variable 
defined in the inner scope, the type is inherited by the inner scope

This keeps backwards compatibility with existing code like above, and makes 
it easy to declare the type of a loop variable for generator expressions in 
both Cython code and pure Python code.

Stefan
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to