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