[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