223 lines
9.1 KiB
C++
223 lines
9.1 KiB
C++
#ifndef LIBPDEBUG_H
|
||
#define LIBPDEBUG_H
|
||
|
||
//1.使用源码编译,要打开宏USE_SOURCE_CODE. win下要设置LUA_INTEGER和lua版本号
|
||
#define LUA_DEBUGGER_NAME "LuaPanda" //debugger's name in LuaDebug.lua
|
||
#define HOOK_LIB_VERSION "3.2.0" //lib version
|
||
//#define USE_SOURCE_CODE //using source code to build
|
||
#if !defined(USE_SOURCE_CODE) && defined(_WIN32)
|
||
#define LUA_INTEGER long long //set LUA_INTEGER. In 501 is ptrdiff_t. 503 can set longlong(64bit) or int(32bit)
|
||
#define LUA_VERSION_NUM 503 //lua version used by WIN32 build lib. eg. 501,503
|
||
#endif
|
||
//setting end
|
||
|
||
#if !defined(USE_SOURCE_CODE) && defined(_WIN32)
|
||
#include <Windows.h>
|
||
#include <Tlhelp32.h>
|
||
#else
|
||
//2.如果lua源码是C++形式,注释掉下面extern "C"
|
||
extern "C"{
|
||
#include "lua.h"
|
||
#include "lualib.h"
|
||
#include "lauxlib.h"
|
||
#include "luaconf.h"
|
||
}
|
||
#endif
|
||
|
||
//3.如果lua代码在命名空间中,要设置用户命名空间. 防止找不到lua方法
|
||
//using namespace slua;
|
||
|
||
#ifdef USE_SOURCE_CODE
|
||
extern "C" void pdebug_init(lua_State* L);
|
||
#endif
|
||
|
||
#if !defined(USE_SOURCE_CODE) && defined(_WIN32)
|
||
/*
|
||
** Lua - An Extensible Extension Language
|
||
** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
|
||
** See Copyright Notice at the end of this file
|
||
*/
|
||
#if LUA_VERSION_NUM == 501
|
||
#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s))
|
||
#endif
|
||
|
||
#define LUA_TNONE (-1)
|
||
#define LUA_TNIL 0
|
||
#define LUA_TBOOLEAN 1
|
||
#define LUA_TLIGHTUSERDATA 2
|
||
#define LUA_TNUMBER 3
|
||
#define LUA_TSTRING 4
|
||
#define LUA_TTABLE 5
|
||
#define LUA_TFUNCTION 6
|
||
#define LUA_TUSERDATA 7
|
||
#define LUA_TTHREAD 8
|
||
#define LUA_NUMBER double
|
||
#define LUA_REGISTRYINDEX (-10000)
|
||
#define LUA_ENVIRONINDEX (-10001)
|
||
#define LUA_GLOBALSINDEX (-10002)
|
||
#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i))
|
||
#define LUA_IDSIZE 60
|
||
#define LUA_HOOKCALL 0
|
||
#define LUA_HOOKRET 1
|
||
#define LUA_HOOKLINE 2
|
||
#define LUA_HOOKCOUNT 3
|
||
#define LUA_HOOKTAILRET 4
|
||
#define LUA_MASKCALL (1 << LUA_HOOKCALL)
|
||
#define LUA_MASKRET (1 << LUA_HOOKRET)
|
||
#define LUA_MASKLINE (1 << LUA_HOOKLINE)
|
||
#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT)
|
||
#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL))
|
||
#define lua_tostring(L,i) lua_tolstring(L, (i), NULL)
|
||
#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE)
|
||
#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION)
|
||
#define lua_pop(L,n) lua_settop(L, -(n)-1)
|
||
#define lua_newtable(L) lua_createtable(L, 0, 0)
|
||
|
||
struct lua_State;
|
||
struct lua_Debug {
|
||
int event;
|
||
const char *name; /* (n) */
|
||
const char *namewhat; /* (n) `global', `local', `field', `method' */
|
||
const char *what; /* (S) `Lua', `C', `main', `tail' */
|
||
const char *source; /* (S) */
|
||
int currentline; /* (l) */
|
||
int nups; /* (u) number of upvalues */
|
||
int linedefined; /* (S) */
|
||
int lastlinedefined; /* (S) */
|
||
char short_src[LUA_IDSIZE]; /* (S) */
|
||
/* private part */
|
||
int i_ci; /* active function */
|
||
};
|
||
|
||
typedef LUA_INTEGER lua_Integer;
|
||
typedef LUA_NUMBER lua_Number;
|
||
typedef int (*lua_CFunction) (lua_State *L);
|
||
typedef struct luaL_Reg {
|
||
const char *name;
|
||
lua_CFunction func;
|
||
} luaL_Reg;
|
||
|
||
#define LUA_KCONTEXT ptrdiff_t
|
||
typedef LUA_KCONTEXT lua_KContext;
|
||
|
||
//lua function
|
||
typedef lua_Integer(*luaDLL_checkinteger) (lua_State *L, int numArg);
|
||
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
|
||
typedef int (*lua_KFunction) (lua_State *L, int status, lua_KContext ctx);
|
||
typedef const lua_Number *(*luaDLL_version)(lua_State *L);
|
||
typedef void (*luaLDLL_register)(lua_State *L, const char *libname, const luaL_Reg *l);
|
||
typedef int (*luaDLL_gettop)(lua_State *L);
|
||
typedef const char *(*luaDLL_pushstring)(lua_State *L, const char *s);
|
||
typedef int (*luaDLL_settop)(lua_State *L, int idx);
|
||
typedef int (*luaDLL_tointeger)(lua_State *L, int idx);
|
||
typedef int (*luaDLL_next)(lua_State *L, int idx);
|
||
typedef int (*luaDLL_pcall)(lua_State *L, int nargs, int nresults, int errfunc);
|
||
typedef void (*luaDLL_pushnil)(lua_State *L);
|
||
typedef void (*luaDLL_getfield)(lua_State *L, int idx, const char *k);
|
||
typedef int (*luaDLL_getinfo)(lua_State *L, const char *what, void *ar);
|
||
typedef void (*luaDLL_pushinteger) (lua_State *L, lua_Integer n);
|
||
#if LUA_VERSION_NUM == 501
|
||
typedef int(*luaDLL_sethook)(lua_State *L, void* func, int mask, int count);
|
||
#else
|
||
typedef void (*luaDLL_sethook)(lua_State *L, lua_Hook f, int mask, int count);
|
||
#endif
|
||
typedef void (*luaDLL_pushnumber)(lua_State *L, lua_Number n);
|
||
typedef lua_Number (*luaDLL_checknumber)(lua_State *L, int narg);
|
||
typedef const char *(*luaDLL_checklstring)(lua_State *L, int narg, size_t *len);
|
||
typedef const char *(*luaDLL_tolstring)(lua_State *L, int idx, size_t *len);
|
||
typedef int (*luaDLL_type)(lua_State *L, int idx);
|
||
//5.3
|
||
typedef void (*luaDLL_createtable)(lua_State *L, int narray, int nrec);
|
||
typedef void (*luaDLL_setfuncs)(lua_State *L, const luaL_Reg *l, int nup);
|
||
typedef lua_Integer(*luaDLL_tointegerx)(lua_State *L, int idx, int *pisnum);
|
||
typedef int (*luaDLL_getglobal)(lua_State *L, const char *name);
|
||
typedef int (*luaDLL_pcallk)(lua_State *L, int nargs, int nresults, int msgh, lua_KContext ctx, lua_KFunction k);
|
||
typedef int (*luaDLL_toboolean)(lua_State *L, int index);
|
||
|
||
luaDLL_checkinteger luaL_checkinteger;
|
||
luaDLL_version lua_version;
|
||
luaDLL_gettop lua_gettop;
|
||
luaDLL_pushstring lua_pushstring;
|
||
luaLDLL_register luaL_register;
|
||
luaDLL_settop lua_settop;
|
||
luaDLL_pcall lua_pcall;
|
||
luaDLL_pushnumber lua_pushnumber;
|
||
luaDLL_checklstring luaL_checklstring;
|
||
luaDLL_tointeger lua_tointeger;
|
||
luaDLL_pushnil lua_pushnil;
|
||
luaDLL_getfield lua_getfield;
|
||
luaDLL_next lua_next;
|
||
luaDLL_getinfo lua_getinfo;
|
||
luaDLL_sethook lua_sethook;
|
||
luaDLL_checknumber luaL_checknumber;
|
||
luaDLL_type lua_type;
|
||
luaDLL_tolstring lua_tolstring;
|
||
luaDLL_pushinteger lua_pushinteger;
|
||
luaDLL_toboolean lua_toboolean;
|
||
//
|
||
HMODULE hInstLibrary;
|
||
|
||
//slua-ue header
|
||
#if LUA_VERSION_NUM > 501
|
||
//5.3
|
||
luaDLL_createtable lua_createtable;
|
||
luaDLL_setfuncs luaL_setfuncs;
|
||
luaDLL_tointegerx lua_tointegerx;
|
||
luaDLL_getglobal lua_getglobal;
|
||
luaDLL_pcallk lua_pcallk;
|
||
#define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL)
|
||
#define lua_tointeger(L,i) lua_tointegerx(L,(i),NULL);
|
||
|
||
#define PURE_API =0
|
||
namespace slua {
|
||
struct LuaInterface {
|
||
virtual const lua_Number *lua_version(lua_State *L) PURE_API;
|
||
virtual const char *lua_pushstring(lua_State *L, const char *s) PURE_API;
|
||
virtual int lua_gettop(lua_State *L) PURE_API;
|
||
virtual void lua_settop(lua_State *L, int index) PURE_API;
|
||
virtual int lua_pcallk(lua_State *L, int nargs, int nresults, int msgh, lua_KContext ctx, lua_KFunction k) PURE_API;
|
||
virtual void lua_pushnumber(lua_State *L, lua_Number n) PURE_API;
|
||
virtual const char *luaL_checklstring(lua_State *L, int arg, size_t *l) PURE_API;
|
||
virtual const char *lua_tolstring(lua_State *L, int index, size_t *len) PURE_API;
|
||
virtual int lua_type(lua_State *L, int index) PURE_API;
|
||
virtual lua_Integer lua_tointegerx(lua_State *L, int index, int *isnum) PURE_API;
|
||
virtual void lua_pushnil(lua_State *L) PURE_API;
|
||
virtual int lua_getfield(lua_State *L, int index, const char *k) PURE_API;
|
||
virtual int lua_next(lua_State *L, int index) PURE_API;
|
||
virtual int lua_getinfo(lua_State *L, const char *what, lua_Debug *ar) PURE_API;
|
||
virtual void lua_sethook(lua_State *L, lua_Hook f, int mask, int count) PURE_API;
|
||
virtual lua_Number luaL_checknumber(lua_State *L, int arg) PURE_API;
|
||
virtual void lua_createtable(lua_State *L, int narr, int nrec) PURE_API;
|
||
virtual void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup) PURE_API;
|
||
virtual int lua_getglobal(lua_State *L, const char *name) PURE_API;
|
||
virtual int lua_toboolean(lua_State *L, int index) PURE_API;
|
||
};
|
||
}
|
||
typedef slua::LuaInterface* (*dll_GetLuaInterface)();
|
||
dll_GetLuaInterface getInter;
|
||
#endif //LUA_VERSION_NUM > 501
|
||
#endif //_WIN32
|
||
#endif //LIBPDEBUG_H
|
||
/******************************************************************************
|
||
* Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved.
|
||
*
|
||
* Permission is hereby granted, free of charge, to any person obtaining
|
||
* a copy of this software and associated documentation files (the
|
||
* "Software"), to deal in the Software without restriction, including
|
||
* without limitation the rights to use, copy, modify, merge, publish,
|
||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||
* permit persons to whom the Software is furnished to do so, subject to
|
||
* the following conditions:
|
||
*
|
||
* The above copyright notice and this permission notice shall be
|
||
* included in all copies or substantial portions of the Software.
|
||
*
|
||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
******************************************************************************/
|