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 70f77c74..2f2ea9f0 100644 --- a/src/lj_debug.c +++ b/src/lj_debug.c | |||
@@ -221,19 +221,22 @@ const char *lj_debug_uvname(GCproto *pt, uint32_t idx) | |||
221 | } | 221 | } |
222 | 222 | ||
223 | /* Get name and value of upvalue. */ | 223 | /* Get name and value of upvalue. */ |
224 | const char *lj_debug_uvnamev(cTValue *o, uint32_t idx, TValue **tvp) | 224 | const char *lj_debug_uvnamev(cTValue *o, uint32_t idx, TValue **tvp, GCobj **op) |
225 | { | 225 | { |
226 | if (tvisfunc(o)) { | 226 | if (tvisfunc(o)) { |
227 | GCfunc *fn = funcV(o); | 227 | GCfunc *fn = funcV(o); |
228 | if (isluafunc(fn)) { | 228 | if (isluafunc(fn)) { |
229 | GCproto *pt = funcproto(fn); | 229 | GCproto *pt = funcproto(fn); |
230 | if (idx < pt->sizeuv) { | 230 | if (idx < pt->sizeuv) { |
231 | *tvp = uvval(&gcref(fn->l.uvptr[idx])->uv); | 231 | GCobj *uvo = gcref(fn->l.uvptr[idx]); |
232 | *tvp = uvval(&uvo->uv); | ||
233 | *op = uvo; | ||
232 | return lj_debug_uvname(pt, idx); | 234 | return lj_debug_uvname(pt, idx); |
233 | } | 235 | } |
234 | } else { | 236 | } else { |
235 | if (idx < fn->c.nupvalues) { | 237 | if (idx < fn->c.nupvalues) { |
236 | *tvp = &fn->c.upvalue[idx]; | 238 | *tvp = &fn->c.upvalue[idx]; |
239 | *op = obj2gco(fn); | ||
237 | return ""; | 240 | return ""; |
238 | } | 241 | } |
239 | } | 242 | } |