mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-24 06:12:27 +00:00
Include variables in redbean lua traceback
This commit is contained in:
parent
be7c5e1071
commit
933f33bcc1
4 changed files with 59 additions and 13 deletions
46
third_party/lua/lauxlib.c
vendored
46
third_party/lua/lauxlib.c
vendored
|
@ -190,6 +190,52 @@ LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1,
|
|||
luaL_pushresult(&b);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Improved Lua traceback.
|
||||
* @see https://luyuhuang.tech/2020/12/01/lua-traceback-with-parameters.html
|
||||
* @author Luyu Huang
|
||||
*/
|
||||
LUALIB_API void luaL_traceback2(lua_State *L, lua_State *L1, const char *msg,
|
||||
int level) {
|
||||
lua_Debug ar;
|
||||
int top = lua_gettop(L);
|
||||
int last = lastlevel(L1);
|
||||
int n1 = (last - level > LEVELS1 + LEVELS2) ? LEVELS1 : -1;
|
||||
if (msg) lua_pushfstring(L, "%s\n", msg);
|
||||
luaL_checkstack(L, 10, NULL);
|
||||
lua_pushliteral(L, "stack traceback:");
|
||||
while (lua_getstack(L1, level++, &ar)) {
|
||||
if (n1-- == 0) { /* too many levels? */
|
||||
lua_pushliteral(L, "\n\t..."); /* add a '...' */
|
||||
level = last - LEVELS2 + 1; /* and skip to last ones */
|
||||
} else {
|
||||
lua_getinfo(L1, "Slntu", &ar);
|
||||
lua_pushfstring(L, "\n\t%s:", ar.short_src);
|
||||
if (ar.currentline > 0)
|
||||
lua_pushfstring(L, "%d:", ar.currentline);
|
||||
lua_pushliteral(L, " in ");
|
||||
pushfuncname(L, &ar);
|
||||
if (ar.nparams > 0)
|
||||
lua_pushliteral(L, ", params:");
|
||||
for (int i = 1; i <= ar.nparams; ++i) {
|
||||
const char *name = lua_getlocal(L1, &ar, i);
|
||||
if (name) {
|
||||
lua_xmove(L1, L, 1); // -3
|
||||
const char *val = luaL_tolstring(L, -1, NULL); // -2
|
||||
lua_pushfstring(L, " %s = %s;", name, val); // -1
|
||||
lua_insert(L, -3);
|
||||
lua_pop(L, 2);
|
||||
}
|
||||
}
|
||||
if (ar.istailcall) lua_pushliteral(L, "\n\t(...tail calls...)");
|
||||
lua_concat(L, lua_gettop(L) - top);
|
||||
}
|
||||
}
|
||||
lua_concat(L, lua_gettop(L) - top);
|
||||
}
|
||||
|
||||
|
||||
/* }====================================================== */
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue