Browse Source

forgotten files

peter 1 year ago
parent
commit
6dd05b305e
2 changed files with 48 additions and 0 deletions
  1. 39 0
      plugins/lua/lua-compat.c
  2. 9 0
      plugins/lua/lua-compat.h

+ 39 - 0
plugins/lua/lua-compat.c

@@ -0,0 +1,39 @@
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+
+#if !defined LUA_VERSION_NUM || LUA_VERSION_NUM==501
+void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup)
+{
+	luaL_checkstack(L, nup+1, "too many upvalues");
+	for (; l->name != NULL; l++) {  /* fill the table with given functions */
+		int i;
+		lua_pushstring(L, l->name);
+		for (i = 0; i < nup; i++)  /* copy upvalues to the top */
+			lua_pushvalue(L, -(nup+1));
+		lua_pushcclosure(L, l->func, nup);  /* closure with those upvalues */
+		lua_settable(L, -(nup + 3));
+	}
+	lua_pop(L, nup);  /* remove upvalues */
+}
+
+
+void luaL_requiref(lua_State *L, char const* modname,
+                    lua_CFunction openf, int glb)
+{
+	luaL_checkstack(L, 3, "not enough stack slots");
+	lua_pushcfunction(L, openf);
+	lua_pushstring(L, modname);
+	lua_call(L, 1, 1);
+	lua_getglobal(L, "package");
+	lua_getfield(L, -1, "loaded");
+	lua_replace(L, -2);
+	lua_pushvalue(L, -2);
+	lua_setfield(L, -2, modname);
+	lua_pop(L, 1);
+	if (glb) {
+		lua_pushvalue(L, -1);
+		lua_setglobal(L, modname);
+	}
+}
+#endif

+ 9 - 0
plugins/lua/lua-compat.h

@@ -0,0 +1,9 @@
+#if !defined LUA_VERSION_NUM || LUA_VERSION_NUM==501
+#ifndef luaL_newlib
+#define luaL_newlib(L, l) \
+  (lua_newtable((L)),luaL_setfuncs((L), (l), 0))
+#endif
+extern void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup);
+extern void luaL_requiref(lua_State *L, char const* modname,
+	      lua_CFunction openf, int glb);
+#endif