diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_debug.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/lj_debug.c b/src/lj_debug.c index 04fecfaf..1d73da7e 100644 --- a/src/lj_debug.c +++ b/src/lj_debug.c | |||
@@ -235,19 +235,22 @@ const char *lj_debug_uvname(GCproto *pt, uint32_t idx) | |||
235 | } | 235 | } |
236 | 236 | ||
237 | /* Get name and value of upvalue. */ | 237 | /* Get name and value of upvalue. */ |
238 | const char *lj_debug_uvnamev(cTValue *o, uint32_t idx, TValue **tvp) | 238 | const char *lj_debug_uvnamev(cTValue *o, uint32_t idx, TValue **tvp, GCobj **op) |
239 | { | 239 | { |
240 | if (tvisfunc(o)) { | 240 | if (tvisfunc(o)) { |
241 | GCfunc *fn = funcV(o); | 241 | GCfunc *fn = funcV(o); |
242 | if (isluafunc(fn)) { | 242 | if (isluafunc(fn)) { |
243 | GCproto *pt = funcproto(fn); | 243 | GCproto *pt = funcproto(fn); |
244 | if (idx < pt->sizeuv) { | 244 | if (idx < pt->sizeuv) { |
245 | *tvp = uvval(&gcref(fn->l.uvptr[idx])->uv); | 245 | GCobj *uvo = gcref(fn->l.uvptr[idx]); |
246 | *tvp = uvval(&uvo->uv); | ||
247 | *op = uvo; | ||
246 | return lj_debug_uvname(pt, idx); | 248 | return lj_debug_uvname(pt, idx); |
247 | } | 249 | } |
248 | } else { | 250 | } else { |
249 | if (idx < fn->c.nupvalues) { | 251 | if (idx < fn->c.nupvalues) { |
250 | *tvp = &fn->c.upvalue[idx]; | 252 | *tvp = &fn->c.upvalue[idx]; |
253 | *op = obj2gco(fn); | ||
251 | return ""; | 254 | return ""; |
252 | } | 255 | } |
253 | } | 256 | } |