diff --git a/examples/lexpr.pd_lua b/examples/lexpr.pd_lua index 487c87e28decef0236ef97bf3812a0e18f8d8731..98ee8e1b115a1e78404df0cbe5cf6d6c8453e1ee 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)