|
On 13/01/17 08:27 AM, Dibyendu Majumdar wrote:
On 13 January 2017 at 09:52, Daurnimator <quae@daurnimator.com> wrote:On 13 January 2017 at 20:01, steve donovan <steve.j.donovan@gmail.com> wrote:On Fri, Jan 13, 2017 at 9:43 AM, Dirk Laurie <dirk.laurie@gmail.com> wrote:Isn't it possible to mimic setfenv and getfenv (inefficiently) in "pure" Lua 5.3 via the debug library?Well, naturally but the documentation also warns that the debug library can be very slow. _ENV never freaked me out because I never use it ;) And never missed setfenv either._ENV can be a bit weird to get used to, but once you start using it you start to come up with nice new patterns/idioms. However the reason I don't use _ENV more often is I often have to end up writing code with lua 5.1 compatibility.In Ravi I would like to add support for 5.1 and 5.2 backward compatibility. Has anyone implemented the missing features of 5.1 in 5.3 that I can look at? I have no experience with 5.1 and do not know how setfenv/getfenv ad related C api functions should be implemented, but I would like to add these to Ravi. Thanks and Regards Dibyendu
I did some thinking on it a while back, but I can't recall what I came up with...
I *think* I talked about it somewhere on my github[1], maybe on the SExLua repo[2], but yeah idk.
(Or maybe it was on this list, scattered across multiple threads...)Just make every function have an _ENV, whether it uses globals or not. Then basically upvaluejoin when setfenv and return it when getfenv - don't bother with temporary in-function environments, since those are not *the* function's environment.
[1] https://github.com/SoniEx2/ [2] https://github.com/SoniEx2/sexlua -- Disclaimer: these emails may be made public at any given time, with or without reason. If you don't agree with this, DO NOT REPLY.