mirror of
https://github.com/lua/lua
synced 2024-11-22 12:51:30 +03:00
a2195644d8
The field 'L->oldpc' is not always updated when control returns to a function; an invalid value can seg. fault when computing 'changedline'. (One example is an error in a finalizer; control can return to 'luaV_execute' without executing 'luaD_poscall'.) Instead of trying to fix all possible corner cases, it seems safer to be resilient to invalid values for 'oldpc'. Valid but wrong values at most cause an extra call to a line hook.
53 lines
1.9 KiB
C
53 lines
1.9 KiB
C
/*
|
|
** $Id: ldebug.h $
|
|
** Auxiliary functions from Debug Interface module
|
|
** See Copyright Notice in lua.h
|
|
*/
|
|
|
|
#ifndef ldebug_h
|
|
#define ldebug_h
|
|
|
|
|
|
#include "lstate.h"
|
|
|
|
|
|
#define pcRel(pc, p) (cast_int((pc) - (p)->code) - 1)
|
|
|
|
|
|
/* Active Lua function (given call info) */
|
|
#define ci_func(ci) (clLvalue(s2v((ci)->func)))
|
|
|
|
|
|
#define resethookcount(L) (L->hookcount = L->basehookcount)
|
|
|
|
/*
|
|
** mark for entries in 'lineinfo' array that has absolute information in
|
|
** 'abslineinfo' array
|
|
*/
|
|
#define ABSLINEINFO (-0x80)
|
|
|
|
LUAI_FUNC int luaG_getfuncline (const Proto *f, int pc);
|
|
LUAI_FUNC const char *luaG_findlocal (lua_State *L, CallInfo *ci, int n,
|
|
StkId *pos);
|
|
LUAI_FUNC l_noret luaG_typeerror (lua_State *L, const TValue *o,
|
|
const char *opname);
|
|
LUAI_FUNC l_noret luaG_forerror (lua_State *L, const TValue *o,
|
|
const char *what);
|
|
LUAI_FUNC l_noret luaG_concaterror (lua_State *L, const TValue *p1,
|
|
const TValue *p2);
|
|
LUAI_FUNC l_noret luaG_opinterror (lua_State *L, const TValue *p1,
|
|
const TValue *p2,
|
|
const char *msg);
|
|
LUAI_FUNC l_noret luaG_tointerror (lua_State *L, const TValue *p1,
|
|
const TValue *p2);
|
|
LUAI_FUNC l_noret luaG_ordererror (lua_State *L, const TValue *p1,
|
|
const TValue *p2);
|
|
LUAI_FUNC l_noret luaG_runerror (lua_State *L, const char *fmt, ...);
|
|
LUAI_FUNC const char *luaG_addinfo (lua_State *L, const char *msg,
|
|
TString *src, int line);
|
|
LUAI_FUNC l_noret luaG_errormsg (lua_State *L);
|
|
LUAI_FUNC int luaG_traceexec (lua_State *L, const Instruction *pc);
|
|
|
|
|
|
#endif
|