/*
** 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)

#ifdef LUA_OPTIMIZE_DEBUG
#  include "lvm.h"
#  define getline(f,pc) (((f)->packedlineinfo) ? luaG_getline((f), pc) : 0)
#  define INFO_FILL_BYTE   0x7F
#  define INFO_DELTA_MASK  0x80
#  define INFO_SIGN_MASK   0x40
#  define INFO_DELTA_6BITS 0x3F
#  define INFO_DELTA_7BITS 0x7F
#  define INFO_MAX_LINECNT  126
#  define lineInfoTop(fs) ((fs)->f->packedlineinfo + (fs)->lastlineOffset)
#else
#  define getline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : 0)
#endif

#define resethookcount(L)	(L->hookcount = L->basehookcount)


LUAI_FUNC void luaG_typeerror (lua_State *L, const TValue *o,
                                             const char *opname);
LUAI_FUNC void luaG_concaterror (lua_State *L, StkId p1, StkId p2);
LUAI_FUNC void luaG_aritherror (lua_State *L, const TValue *p1,
                                              const TValue *p2);
LUAI_FUNC int luaG_ordererror (lua_State *L, const TValue *p1,
                                             const TValue *p2);
LUAI_FUNC void luaG_runerror (lua_State *L, const char *fmt, ...);
LUAI_FUNC void luaG_errormsg (lua_State *L);
LUAI_FUNC int luaG_checkcode (const Proto *pt);
LUAI_FUNC int luaG_checkopenop (Instruction i);

#ifdef LUA_OPTIMIZE_DEBUG
LUAI_FUNC int luaG_getline (const Proto *f, int pc);
LUAI_FUNC int luaG_stripdebug (lua_State *L, Proto *f, int level, int recv);
#endif

#endif
