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