It's so easy to fix it's actually already fixed for 2.6.1 :)  Thanks for 
reporting it though.

From: users-boun...@lists.ironpython.com 
[mailto:users-boun...@lists.ironpython.com] On Behalf Of Ronnie Maor
Sent: Wednesday, January 27, 2010 8:17 AM
To: Discussion of IronPython
Subject: [IronPython] bug with closure in coroutine

Hi IronPython team,

Seems IronPython 2.6 has some problems with compiling coroutines that contain 
closures:

tmp.py:
def coroutine():
    x = yield 3
    def inner():
        print 'x=',x
    inner()

c = coroutine()
c.next()
c.send(10)

with CPython:
C:\Temp>python tmp.py
x= 10
Traceback (most recent call last):
  File "tmp.py", line 9, in <module>
    c.send(10)
StopIteration


with IronPython 2.6:
C:\Temp>ipy tmp.py
Traceback (most recent call last):
  File "tmp.py", line 7, in tmp.py
TypeError: Unable to cast object of type 
'Microsoft.Scripting.Ast.FieldExpression' to type 
'Microsoft.Scripting.Ast.BlockExpression'.


workarounds:
1) re-assign the result returned from yield to another variable
def coroutine():
    tmp_x = yield 3
    x = tmp_x
    def inner():
        print 'x=',x
    inner()

2) pass the value explicitly instead of using a closure
def coroutine():
    x = yield 3
    def inner(x):
        print 'x=',x
    inner(x)

hope it's easy to fix

thanks
Ronnie
_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to