summaryrefslogtreecommitdiff
path: root/xmake/core/_xmake_main.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2021-09-18 10:27:54 +0800
committerruki <[email protected]>2021-09-18 10:27:54 +0800
commit73fc586b83edbbaf71f01ea893e47dc4ae1407ef (patch)
treedea66de3b045100e40426b78be47458f0897e7d5 /xmake/core/_xmake_main.lua
parentaeeeca0fb547b157501045c0ddd44b0258619a2b (diff)
add getfenv and setfenv for lua
Diffstat (limited to 'xmake/core/_xmake_main.lua')
-rw-r--r--xmake/core/_xmake_main.lua36
1 files changed, 36 insertions, 0 deletions
diff --git a/xmake/core/_xmake_main.lua b/xmake/core/_xmake_main.lua
index af9b51114..94045a2f5 100644
--- a/xmake/core/_xmake_main.lua
+++ b/xmake/core/_xmake_main.lua
@@ -36,6 +36,42 @@ xmake._WORKING_DIR = os.curdir()
xmake._FEATURES = _FEATURES
xmake._LUAJIT = _LUAJIT
+-- init setfenv/getfenv for lua
+if not getfenv then
+ function getfenv(fn)
+ local i = 1
+ while true do
+ local name, val = debug.getupvalue(fn, i)
+ if name == "_ENV" then
+ return val
+ elseif not name then
+ break
+ end
+ i = i + 1
+ end
+ end
+end
+if not setfenv then
+ function setfenv(fn, env)
+ local i = 1
+ while true do
+ local name = debug.getupvalue(fn, i)
+ if name == "_ENV" then
+ debug.upvaluejoin(fn, i, (function()
+ return env
+ end), 1)
+ break
+ elseif not name then
+ break
+ end
+
+ i = i + 1
+ end
+ return fn
+ end
+end
+
+-- load the given lua file
function _loadfile_impl(filepath, mode, opt)
-- init options