diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-11-03 10:12:30 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-11-03 10:12:30 -0200 |
| commit | 54eb35a8aa0f60265cf1b4764beabe1199d66f42 (patch) | |
| tree | 83bc4049d312bdbe0b8e78ed1745839fcf9a5a03 /ldebug.c | |
| parent | ba36180fd7b68341ad57e0fbe7a55cdfb334908d (diff) | |
| download | lua-54eb35a8aa0f60265cf1b4764beabe1199d66f42.tar.gz lua-54eb35a8aa0f60265cf1b4764beabe1199d66f42.tar.bz2 lua-54eb35a8aa0f60265cf1b4764beabe1199d66f42.zip | |
more fields moved out of 'CallInfo'
Diffstat (limited to 'ldebug.c')
| -rw-r--r-- | ldebug.c | 29 |
1 files changed, 15 insertions, 14 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldebug.c,v 2.134 2017/11/01 18:20:48 roberto Exp roberto $ | 2 | ** $Id: ldebug.c,v 2.135 2017/11/02 11:28:56 roberto Exp roberto $ |
| 3 | ** Debug Interface | 3 | ** Debug Interface |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -43,7 +43,7 @@ static const char *funcnamefromcode (lua_State *L, CallInfo *ci, | |||
| 43 | 43 | ||
| 44 | 44 | ||
| 45 | static int currentpc (CallInfo *ci) { | 45 | static int currentpc (CallInfo *ci) { |
| 46 | lua_assert(isLua(ci)); | 46 | lua_assert(isLua(ci->func)); |
| 47 | return pcRel(ci->u.l.savedpc, ci_func(ci)->p); | 47 | return pcRel(ci->u.l.savedpc, ci_func(ci)->p); |
| 48 | } | 48 | } |
| 49 | 49 | ||
| @@ -120,7 +120,7 @@ LUA_API void lua_sethook (lua_State *L, lua_Hook func, int mask, int count) { | |||
| 120 | mask = 0; | 120 | mask = 0; |
| 121 | func = NULL; | 121 | func = NULL; |
| 122 | } | 122 | } |
| 123 | if (isLua(L->ci)) | 123 | if (isLua(L->func)) |
| 124 | L->oldpc = L->ci->u.l.savedpc; | 124 | L->oldpc = L->ci->u.l.savedpc; |
| 125 | L->hook = func; | 125 | L->hook = func; |
| 126 | L->basehookcount = count; | 126 | L->basehookcount = count; |
| @@ -172,7 +172,7 @@ static const char *findlocal (lua_State *L, CallInfo *ci, int n, | |||
| 172 | StkId *pos) { | 172 | StkId *pos) { |
| 173 | const char *name = NULL; | 173 | const char *name = NULL; |
| 174 | StkId base; | 174 | StkId base; |
| 175 | if (isLua(ci)) { | 175 | if (isLua(ci->func)) { |
| 176 | base = ci->func + 1; | 176 | base = ci->func + 1; |
| 177 | name = luaF_getlocalname(ci_func(ci)->p, n, currentpc(ci)); | 177 | name = luaF_getlocalname(ci_func(ci)->p, n, currentpc(ci)); |
| 178 | } | 178 | } |
| @@ -277,12 +277,12 @@ static void collectvalidlines (lua_State *L, Closure *f) { | |||
| 277 | static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) { | 277 | static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) { |
| 278 | if (ci == NULL) /* no 'ci'? */ | 278 | if (ci == NULL) /* no 'ci'? */ |
| 279 | return NULL; /* no info */ | 279 | return NULL; /* no info */ |
| 280 | else if (ci->callstatus & CIST_FIN) { /* is this a finalizer? */ | 280 | else if (callstatus(ci->func) & CIST_FIN) { /* is this a finalizer? */ |
| 281 | *name = "__gc"; | 281 | *name = "__gc"; |
| 282 | return "metamethod"; /* report it as such */ | 282 | return "metamethod"; /* report it as such */ |
| 283 | } | 283 | } |
| 284 | /* calling function is a known Lua function? */ | 284 | /* calling function is a known Lua function? */ |
| 285 | else if (!(ci->callstatus & CIST_TAIL) && isLua(ci->previous)) | 285 | else if (!(callstatus(ci->func) & CIST_TAIL) && isLua(ci->previous->func)) |
| 286 | return funcnamefromcode(L, ci->previous, name); | 286 | return funcnamefromcode(L, ci->previous, name); |
| 287 | else return NULL; /* no way to find a name */ | 287 | else return NULL; /* no way to find a name */ |
| 288 | } | 288 | } |
| @@ -298,7 +298,7 @@ static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, | |||
| 298 | break; | 298 | break; |
| 299 | } | 299 | } |
| 300 | case 'l': { | 300 | case 'l': { |
| 301 | ar->currentline = (ci && isLua(ci)) ? currentline(ci) : -1; | 301 | ar->currentline = (ci && isLua(ci->func)) ? currentline(ci) : -1; |
| 302 | break; | 302 | break; |
| 303 | } | 303 | } |
| 304 | case 'u': { | 304 | case 'u': { |
| @@ -314,7 +314,7 @@ static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, | |||
| 314 | break; | 314 | break; |
| 315 | } | 315 | } |
| 316 | case 't': { | 316 | case 't': { |
| 317 | ar->istailcall = (ci) ? ci->callstatus & CIST_TAIL : 0; | 317 | ar->istailcall = (ci) ? callstatus(ci->func) & CIST_TAIL : 0; |
| 318 | break; | 318 | break; |
| 319 | } | 319 | } |
| 320 | case 'n': { | 320 | case 'n': { |
| @@ -549,7 +549,7 @@ static const char *funcnamefromcode (lua_State *L, CallInfo *ci, | |||
| 549 | Proto *p = ci_func(ci)->p; /* calling function */ | 549 | Proto *p = ci_func(ci)->p; /* calling function */ |
| 550 | int pc = currentpc(ci); /* calling instruction index */ | 550 | int pc = currentpc(ci); /* calling instruction index */ |
| 551 | Instruction i = p->code[pc]; /* calling instruction */ | 551 | Instruction i = p->code[pc]; /* calling instruction */ |
| 552 | if (ci->callstatus & CIST_HOOKED) { /* was it called inside a hook? */ | 552 | if (callstatus(ci->func) & CIST_HOOKED) { /* was it called inside a hook? */ |
| 553 | *name = "?"; | 553 | *name = "?"; |
| 554 | return "hook"; | 554 | return "hook"; |
| 555 | } | 555 | } |
| @@ -635,7 +635,7 @@ static const char *varinfo (lua_State *L, const TValue *o) { | |||
| 635 | const char *name = NULL; /* to avoid warnings */ | 635 | const char *name = NULL; /* to avoid warnings */ |
| 636 | CallInfo *ci = L->ci; | 636 | CallInfo *ci = L->ci; |
| 637 | const char *kind = NULL; | 637 | const char *kind = NULL; |
| 638 | if (isLua(ci)) { | 638 | if (isLua(L->func)) { |
| 639 | kind = getupvalname(ci, o, &name); /* check whether 'o' is an upvalue */ | 639 | kind = getupvalname(ci, o, &name); /* check whether 'o' is an upvalue */ |
| 640 | if (!kind && isinstack(L, o)) /* no? try a register */ | 640 | if (!kind && isinstack(L, o)) /* no? try a register */ |
| 641 | kind = getobjname(ci_func(ci)->p, currentpc(ci), | 641 | kind = getobjname(ci_func(ci)->p, currentpc(ci), |
| @@ -719,7 +719,7 @@ l_noret luaG_runerror (lua_State *L, const char *fmt, ...) { | |||
| 719 | va_start(argp, fmt); | 719 | va_start(argp, fmt); |
| 720 | msg = luaO_pushvfstring(L, fmt, argp); /* format message */ | 720 | msg = luaO_pushvfstring(L, fmt, argp); /* format message */ |
| 721 | va_end(argp); | 721 | va_end(argp); |
| 722 | if (isLua(ci)) /* if Lua function, add source:line information */ | 722 | if (isLua(L->func)) /* if Lua function, add source:line information */ |
| 723 | luaG_addinfo(L, msg, ci_func(ci)->p->source, currentline(ci)); | 723 | luaG_addinfo(L, msg, ci_func(ci)->p->source, currentline(ci)); |
| 724 | luaG_errormsg(L); | 724 | luaG_errormsg(L); |
| 725 | } | 725 | } |
| @@ -740,14 +740,15 @@ static int changedline (Proto *p, int oldpc, int newpc) { | |||
| 740 | 740 | ||
| 741 | void luaG_traceexec (lua_State *L) { | 741 | void luaG_traceexec (lua_State *L) { |
| 742 | CallInfo *ci = L->ci; | 742 | CallInfo *ci = L->ci; |
| 743 | StkId func = L->func; | ||
| 743 | lu_byte mask = L->hookmask; | 744 | lu_byte mask = L->hookmask; |
| 744 | int counthook = (--L->hookcount == 0 && (mask & LUA_MASKCOUNT)); | 745 | int counthook = (--L->hookcount == 0 && (mask & LUA_MASKCOUNT)); |
| 745 | if (counthook) | 746 | if (counthook) |
| 746 | resethookcount(L); /* reset count */ | 747 | resethookcount(L); /* reset count */ |
| 747 | else if (!(mask & LUA_MASKLINE)) | 748 | else if (!(mask & LUA_MASKLINE)) |
| 748 | return; /* no line hook and count != 0; nothing to be done */ | 749 | return; /* no line hook and count != 0; nothing to be done */ |
| 749 | if (ci->callstatus & CIST_HOOKYIELD) { /* called hook last time? */ | 750 | if (callstatus(func) & CIST_HOOKYIELD) { /* called hook last time? */ |
| 750 | ci->callstatus &= ~CIST_HOOKYIELD; /* erase mark */ | 751 | callstatus(func) &= ~CIST_HOOKYIELD; /* erase mark */ |
| 751 | return; /* do not call hook again (VM yielded, so it did not move) */ | 752 | return; /* do not call hook again (VM yielded, so it did not move) */ |
| 752 | } | 753 | } |
| 753 | if (counthook) | 754 | if (counthook) |
| @@ -767,7 +768,7 @@ void luaG_traceexec (lua_State *L) { | |||
| 767 | if (counthook) | 768 | if (counthook) |
| 768 | L->hookcount = 1; /* undo decrement to zero */ | 769 | L->hookcount = 1; /* undo decrement to zero */ |
| 769 | ci->u.l.savedpc--; /* undo increment (resume will increment it again) */ | 770 | ci->u.l.savedpc--; /* undo increment (resume will increment it again) */ |
| 770 | ci->callstatus |= CIST_HOOKYIELD; /* mark that it yielded */ | 771 | callstatus(func) |= CIST_HOOKYIELD; /* mark that it yielded */ |
| 771 | luaD_throw(L, LUA_YIELD); | 772 | luaD_throw(L, LUA_YIELD); |
| 772 | } | 773 | } |
| 773 | } | 774 | } |
