summary refs log tree commit diff stats
path: root/src/cratera.cratera.d/lib.cratera
diff options
context:
space:
mode:
Diffstat (limited to 'src/cratera.cratera.d/lib.cratera')
-rw-r--r--src/cratera.cratera.d/lib.cratera40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/cratera.cratera.d/lib.cratera b/src/cratera.cratera.d/lib.cratera
new file mode 100644
index 0000000..701de31
--- /dev/null
+++ b/src/cratera.cratera.d/lib.cratera
@@ -0,0 +1,40 @@
+--[[
+    Cratera Library
+    Copyright (C) 2024  Soni L.
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+--]]
+
+local cratera_env = _G
+local cratera_loader_base = cratera_env.load
+
+-- only use setfenv if load doesn't support env argument
+local setfenv = (lua.loadstring or lua.load)("return setfenv", nil, nil, {})()
+
+function cratera_env.load(chunk, chunkname, mode, env)
+    if env == nil then
+        env = cratera_env
+    end
+    local func, err = cratera_loader_base(chunk, chunkname, mode, env)
+    if setfenv and func and env then
+        setfenv(func, env)
+    end
+    -- arity adjustments
+    if func then
+        return func
+    else
+        return func, err
+    end
+end
+