MCPcopy Create free account
hub / github.com/EmmyLua/EmmyLuaDebugger / changedline

Function changedline

third-party/lua-5.4.6/src/ldebug.c:873–891  ·  view source on GitHub ↗

** Check whether new instruction 'newpc' is in a different line from ** previous instruction 'oldpc'. More often than not, 'newpc' is only ** one or a few instructions after 'oldpc' (it must be after, see ** caller), so try to avoid calling 'luaG_getfuncline'. If they are ** too far apart, there is a good chance of a ABSLINEINFO in the way, ** so it goes directly to 'luaG_getfuncline'. */

Source from the content-addressed store, hash-verified

871** so it goes directly to 'luaG_getfuncline'.
872*/
873static int changedline (const Proto *p, int oldpc, int newpc) {
874 if (p->lineinfo == NULL) /* no debug information? */
875 return 0;
876 if (newpc - oldpc < MAXIWTHABS / 2) { /* not too far apart? */
877 int delta = 0; /* line difference */
878 int pc = oldpc;
879 for (;;) {
880 int lineinfo = p->lineinfo[++pc];
881 if (lineinfo == ABSLINEINFO)
882 break; /* cannot compute delta; fall through */
883 delta += lineinfo;
884 if (pc == newpc)
885 return (delta != 0); /* delta computed successfully */
886 }
887 }
888 /* either instructions are too far apart or there is an absolute line
889 info in the way; compute line difference explicitly */
890 return (luaG_getfuncline(p, oldpc) != luaG_getfuncline(p, newpc));
891}
892
893
894/*

Callers 1

luaG_traceexecFunction · 0.70

Calls 1

luaG_getfunclineFunction · 0.70

Tested by

no test coverage detected