lean2/tests/lua/st3.lua
Leonardo de Moura b986af09ed feat(lua): add support for copying closures between Lua states
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2013-11-12 12:54:34 -08:00

46 lines
820 B
Lua

S = State()
function mk(x)
return function (y)
return x * y
end
end
f = mk(20)
S:eval([[
g, x = ...
print("x", x)
print(g(10))
]], f, 10)
function mkcounter()
local x = 0
function inc()
x = x + 1
return x
end
function dec()
x = x - 1
return x
end
return inc, dec
end
inc1, dec1 = mkcounter()
print(inc1())
print(inc1())
print(dec1())
print(inc1())
print(inc1())
-- inc1 and dec1 are closures, they share the same upvalue x.
-- However, when we copy inc1 and dec1 to S, we get two copies of x.
S:eval([[
inc2, dec2, x = ...
print("in the nested state")
print("x", x)
print("incrementing", inc2())
print("incrementing", inc2())
print("decrementing", dec2())
]], inc1, dec1, 10)
print(inc1())
S:set("h", f)
print(S:eval([[ return h(2) ]]))