The current version of byterun accesses cellvars through the frame the closure is executing under, instead of the frame it was defined in. The following code illustrates the problem:
def f():
x = ["foo"]
def inner():
x[0] = "bar"
return inner
def g(funcptr):
x = 5
def inner():
return x
y = funcptr()
g(f())
AssertionError: "'int' object does not support item assignment" != 'None'
The current version of byterun accesses cellvars through the frame the closure is executing under, instead of the frame it was defined in. The following code illustrates the problem:
def f():
x = ["foo"]
def inner():
x[0] = "bar"
return inner
def g(funcptr):
x = 5
def inner():
return x
y = funcptr()
g(f())
AssertionError: "'int' object does not support item assignment" != 'None'