39 #include <ptbuildopts.h>
54 virtual bool LoadString(
const char * text);
56 virtual bool LoadFile(
const char * filename);
58 virtual bool Run(
const char * program = NULL);
60 virtual void OnError(
int code,
const PString & str);
62 operator lua_State * () {
return m_lua; }
64 virtual void SetValue(
const char * name,
const char * value);
66 typedef int (*CFunction)(lua_State *L);
67 virtual void SetFunction(
const char * name, CFunction func);
69 bool CallLuaFunction(
const char * name);
70 bool CallLuaFunction(
const char * name,
const char * sig, ...);
72 static int TraceFunction(lua_State * L);
74 PString GetLastErrorText()
const
75 {
return m_lastErrorText; }
77 void BindToInstanceStart(
const char * instanceName);
78 void BindToInstanceFunc(
const char * lua_name,
void * obj, CFunction func);
79 void BindToInstanceEnd(
const char * instanceName);
81 static void * GetInstance(lua_State * L);
88 #define PLUA_BINDING_START(class_type) \
89 typedef class_type PLua_InstanceType; \
90 void UnbindFromInstance(PLua &, const char *) { } \
91 void BindToInstance(PLua & lua, const char * instanceName) \
93 lua.BindToInstanceStart(instanceName);
95 #define PLUA_BINDING2(cpp_name, lua_name) \
96 lua.BindToInstanceFunc(lua_name, (void *)this, &PLua_InstanceType::cpp_name##_callback);
98 #define PLUA_BINDING(fn_name) \
99 PLUA_BINDING2(fn_name, #fn_name)
101 #define PLUA_BINDING_END() \
102 lua.BindToInstanceEnd(instanceName); \
105 #define PLUA_FUNCTION_DECL(fn_name) \
106 static int fn_name##_callback(lua_State * L) \
108 return ((PLua_InstanceType *)PLua::GetInstance(L))->fn_name(L); \
111 #define PLUA_FUNCTION(fn_name) \
112 PLUA_FUNCTION_DECL(fn_name) \
113 int fn_name(lua_State * L) \
115 #define PLUA_FUNCTION_NOARGS(fn_name) \
116 PLUA_FUNCTION_DECL(fn_name) \
117 int fn_name(lua_State *) \
119 #define PLUA_DECLARE_FUNCTION(fn_name) \
120 PLUA_FUNCTION_DECL(fn_name) \
121 int fn_name(lua_State * L); \
128 #endif // PTLIB_LUA_H