[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Not able to copy Lua closures between states
- From: Asko Kauppi <askok@...>
- Date: Thu, 3 Jul 2008 11:04:20 +0300
There's been request to have full closure copying between detached Lua
states. I think this can currently be done for C-based closures, but
not for Lua ones.
What I mean by closure copying is:
- get the number of upvalues in source state, and their values (ok,
lua_getupvalue)
- create same function in target state, with values of the upvalues
copied (ok, lua_pushcclosure)
Normally, the upvalues will have separate lives after the copying. One
state modifying will not modify the other state. However, using a
communications userdata as upvalue can indeed be made to act as a
shared, modifiable resource, so in that way even upvalues could be
made shared.
The problems are:
- is the order of upvalues given by 'lua_getupvalue' the same as
expected by 'lua_pushcclosure'? I guess it is, but haven't tested in
action, yet.
- string.dump (which I'm using for Lua function dump) is said to:
<<
Returns a string containing a binary representation of the given
function, so that a later loadstring on this string returns a copy of
the function. function must be a Lua function without upvalues.
<<
Could future Lua have a mechanism similar to 'lua_pushcclosure' for
Lua functions? Is there some reason why this cannot (ever) be done?
-asko