summaryrefslogtreecommitdiff
path: root/src/lib_debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib_debug.c')
-rw-r--r--src/lib_debug.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/lib_debug.c b/src/lib_debug.c
index ab504de7..d90c422f 100644
--- a/src/lib_debug.c
+++ b/src/lib_debug.c
@@ -15,6 +15,7 @@
15 15
16#include "lj_obj.h" 16#include "lj_obj.h"
17#include "lj_err.h" 17#include "lj_err.h"
18#include "lj_debug.h"
18#include "lj_lib.h" 19#include "lj_lib.h"
19 20
20/* ------------------------------------------------------------------------ */ 21/* ------------------------------------------------------------------------ */
@@ -77,6 +78,12 @@ static void settabsi(lua_State *L, const char *i, int v)
77 lua_setfield(L, -2, i); 78 lua_setfield(L, -2, i);
78} 79}
79 80
81static void settabsb(lua_State *L, const char *i, int v)
82{
83 lua_pushboolean(L, v);
84 lua_setfield(L, -2, i);
85}
86
80static lua_State *getthread(lua_State *L, int *arg) 87static lua_State *getthread(lua_State *L, int *arg)
81{ 88{
82 if (L->base < L->top && tvisthread(L->base)) { 89 if (L->base < L->top && tvisthread(L->base)) {
@@ -101,12 +108,12 @@ static void treatstackoption(lua_State *L, lua_State *L1, const char *fname)
101 108
102LJLIB_CF(debug_getinfo) 109LJLIB_CF(debug_getinfo)
103{ 110{
104 lua_Debug ar; 111 lj_Debug ar;
105 int arg, opt_f = 0, opt_L = 0; 112 int arg, opt_f = 0, opt_L = 0;
106 lua_State *L1 = getthread(L, &arg); 113 lua_State *L1 = getthread(L, &arg);
107 const char *options = luaL_optstring(L, arg+2, "flnSu"); 114 const char *options = luaL_optstring(L, arg+2, "flnSu");
108 if (lua_isnumber(L, arg+1)) { 115 if (lua_isnumber(L, arg+1)) {
109 if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) { 116 if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), (lua_Debug *)&ar)) {
110 setnilV(L->top-1); 117 setnilV(L->top-1);
111 return 1; 118 return 1;
112 } 119 }
@@ -116,7 +123,7 @@ LJLIB_CF(debug_getinfo)
116 } else { 123 } else {
117 lj_err_arg(L, arg+1, LJ_ERR_NOFUNCL); 124 lj_err_arg(L, arg+1, LJ_ERR_NOFUNCL);
118 } 125 }
119 if (!lua_getinfo(L1, options, &ar)) 126 if (!lj_debug_getinfo(L1, options, &ar, 1))
120 lj_err_arg(L, arg+2, LJ_ERR_INVOPT); 127 lj_err_arg(L, arg+2, LJ_ERR_INVOPT);
121 lua_createtable(L, 0, 16); /* Create result table. */ 128 lua_createtable(L, 0, 16); /* Create result table. */
122 for (; *options; options++) { 129 for (; *options; options++) {
@@ -133,6 +140,8 @@ LJLIB_CF(debug_getinfo)
133 break; 140 break;
134 case 'u': 141 case 'u':
135 settabsi(L, "nups", ar.nups); 142 settabsi(L, "nups", ar.nups);
143 settabsi(L, "nparams", ar.nparams);
144 settabsb(L, "isvararg", ar.isvararg);
136 break; 145 break;
137 case 'n': 146 case 'n':
138 settabss(L, "name", ar.name); 147 settabss(L, "name", ar.name);