summarylogtreecommitdiffstats
path: root/luatrace-compat.patch
blob: c68012c6c5f1fb4d8d916bdecff9afd09f97f7c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
diff --git a/c/c_hook.c b/c/c_hook.c
index 181db43..64e1229 100644
--- a/c/c_hook.c
+++ b/c/c_hook.c
@@ -24,6 +24,22 @@ typedef clock_t hook_time_t;
 #define CLOCK_FUNCTION clock
 #endif
 
+#if !defined(luaL_newlibtable) \
+  && (!defined LUA_VERSION_NUM || LUA_VERSION_NUM==501)
+static 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 */
+}
+#endif
+
 
 /*============================================================================*/
 
@@ -168,7 +184,8 @@ static luaL_Reg hook_functions[] =
 LUALIB_API int luaopen_luatrace_c_hook(lua_State *L)
 {
   /* Register the module functions */
-  luaL_register(L, "c_hook", hook_functions);
+  lua_newtable(L);
+  luaL_setfuncs(L,hook_functions,0);
   return 1;
 }