[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Extensions made by the Tilde debugger
- From: Joshua Jensen <josh.jjensen@...>
- Date: Sat, 27 Aug 2011 17:03:24 -0600
Hi.
The very cool Tilde debugger makes the following modifications to the
Lua core in order to make the debugger more usable:
* A hook to catch errors, allowing the debugger to break at the point of
error in the code and allow the user to investigate further.
* The ability to expand varargs.
The patch is below. Does Lua 5.2 expose facilities for this now?
Thanks.
Josh
------------
--- lua/v5.1.3/src/ldebug.c 2008/05/13 12:41:06
+++ lua/v5.1.3/src/ldebug.c 2008/11/18 11:09:05
@@ -146,6 +146,24 @@
return name;
}
+LUA_API int lua_getvararg (lua_State *L, const lua_Debug *ar, int n) {
+ CallInfo *ci = L->base_ci + ar->i_ci;
+ if(isLfunction(ci->func))
+ {
+ Closure *cl = (Closure *) clvalue(ci->func);
+ StkId firstVarArg = ci->func + cl->l.p->numparams + 1;
+ int numVarArg = (int) (ci->base - firstVarArg);
+ if(n <= numVarArg)
+ {
+ lua_lock(L);
+ luaA_pushobject(L, firstVarArg + n - 1);
+ lua_unlock(L);
+ return n;
+ }
+ }
+ return 0;
+}
+
static void funcinfo (lua_Debug *ar, Closure *cl) {
if (cl->c.isC) {
@@ -608,6 +626,8 @@
incr_top(L);
luaD_call(L, L->top - 2, 1); /* call it */
}
+ if (L->hookmask & LUA_MASKERROR)
+ luaD_callhook(L, LUA_HOOKERROR, -1);
luaD_throw(L, LUA_ERRRUN);
}
--- lua/v5.1.3/src/lua.h 2008/05/13 12:41:06
+++ lua/v5.1.3/src/lua.h 2008/11/18 11:09:05
@@ -313,6 +313,7 @@
#define LUA_HOOKLINE 2
#define LUA_HOOKCOUNT 3
#define LUA_HOOKTAILRET 4
+#define LUA_HOOKERROR 5
/*
@@ -322,6 +323,7 @@
#define LUA_MASKRET (1 << LUA_HOOKRET)
#define LUA_MASKLINE (1 << LUA_HOOKLINE)
#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT)
+#define LUA_MASKERROR (1 << LUA_HOOKERROR)
typedef struct lua_Debug lua_Debug; /* activation record */
@@ -336,6 +338,7 @@
LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar,
int n);
LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n);
LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n);
+LUA_API int lua_getvararg (lua_State *L, const lua_Debug *ar, int n);
LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int
count);
LUA_API lua_Hook lua_gethook (lua_State *L);
--- lua/v5.1.3/src/luaconf.h 2008/05/13 12:41:06
+++ lua/v5.1.3/src/luaconf.h 2008/11/18 11:09:05
@@ -161,7 +161,11 @@
#else
+#if defined(__cplusplus)
+#define LUA_API extern "C"
+#else
#define LUA_API extern
+#endif
#endif