From e7db8576b8a4988dfdd206500199e59c3b57bf55 Mon Sep 17 00:00:00 2001 From: Nicolas Noble Date: Tue, 30 Jul 2013 19:10:20 -0700 Subject: Changing things a bit in the Lua binding system. Now pushing a class template means pushing a table by its name, and the constructor is implicit in it. --- includes/BLua.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'includes/BLua.h') diff --git a/includes/BLua.h b/includes/BLua.h index e11c3fb..a6dd2bc 100644 --- a/includes/BLua.h +++ b/includes/BLua.h @@ -223,6 +223,16 @@ struct lua_functypes_t { true); \ } +#define DECLARE_CONSTRUCTOR(classname, enumvar) static int constructor(lua_State * L) { \ + return LuaHelpers::method_multiplex( \ + enumvar, \ + L, \ + NULL, \ + sLua_##classname::classname##_proceed_statics, \ + classname##_functions, \ + false); \ + } + #define DECLARE_FUNCTION(classname, enumvar) static int function_##enumvar(lua_State * L) { \ return LuaHelpers::method_multiplex( \ enumvar, \ @@ -233,6 +243,16 @@ struct lua_functypes_t { false); \ } +#define DECLARE_STATIC(classname, enumvar) static int static_##enumvar(lua_State * L) { \ + return LuaHelpers::method_multiplex( \ + enumvar, \ + L, \ + NULL, \ + sLua_##classname::classname##_proceed_statics, \ + classname##_functions, \ + false); \ + } + #define PUSH_METHOD(classname, enumvar) pushIt( \ L, \ classname##_methods[enumvar].name, \ @@ -243,6 +263,21 @@ struct lua_functypes_t { String("__") + classname##_methods[enumvar].name, \ sLua_##classname::method_##enumvar) +#define PUSH_CONSTRUCTOR(classname, enumvar) \ + bool constructorPushed = true; \ + L.newtable(); \ + L.push(#classname); \ + L.copy(-2); \ + L.setvar(); \ + L.declareFunc("new", sLua_##classname::constructor, -1) + +#define PUSH_STATIC(classname, enumvar) \ + AAssert(constructorPushed, "Please call PUSH_CONSTRUCTOR first"); \ + L.declareFunc( \ + classname##_functions[enumvar].name, \ + sLua_##classname::static_##enumvar, \ + -1) + #define PUSH_FUNCTION(classname, enumvar) L.declareFunc( \ classname##_functions[enumvar].name, \ sLua_##classname::function_##enumvar) @@ -252,6 +287,8 @@ struct lua_functypes_t { sLua_##classname::function_##enumvar, \ array) +#define PUSH_CLASS_DONE() L.pop() + #define CHECK_METHODS(classname) { \ int i = 0; \ while (classname##_methods[i].number != -1) { \ -- cgit v1.2.3