From 6de6bb002a8d25c2499d584aabb81e7ce3c60f84 Mon Sep 17 00:00:00 2001 From: Albert Graef <aggraef@gmail.com> Date: Wed, 1 Nov 2017 04:43:13 +0100 Subject: [PATCH] lexpr: Lua 5.2 compatibility --- examples/lexpr.pd_lua | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/examples/lexpr.pd_lua b/examples/lexpr.pd_lua index 487c87e..98ee8e1 100644 --- a/examples/lexpr.pd_lua +++ b/examples/lexpr.pd_lua @@ -1,5 +1,24 @@ local lexpr = pd.Class:new():register("lexpr") +-- AG: Lua 5.2 compatibility (cf. https://stackoverflow.com/a/14554565) +if not setfenv then -- Lua 5.2 + -- based on http://lua-users.org/lists/lua-l/2010-06/msg00314.html + -- this assumes f is a function + local function findenv(f) + local level = 1 + repeat + local name, value = debug.getupvalue(f, level) + if name == '_ENV' then return level, value end + level = level + 1 + until name == nil + return nil end + getfenv = function (f) return(select(2, findenv(f)) or _G) end + setfenv = function (f, t) + local level = findenv(f) + if level then debug.setupvalue(f, level, t) end + return f end +end + local function sandbox(e, f) -- only supports nullary f() with one return local g = getfenv(f) setfenv(f, e) -- GitLab