From 007ef21d7a166f71d078e2b6e2b2c96dccbbd51e Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Thu, 19 Dec 2013 23:24:08 +0200 Subject: [PATCH] Get rid of DECLARE_LUACLASS --- include/library/luabase.hpp | 14 ++++++++++---- src/library/luabase.cpp | 5 +++++ src/lua/callback.cpp | 7 ++----- src/lua/gui-bitmap.cpp | 8 ++++---- src/lua/gui-rqueue.cpp | 4 ++-- src/lua/gui-text-cf.cpp | 5 +---- src/lua/gui-tilemap.cpp | 5 +---- src/lua/ibind.cpp | 5 ++--- src/lua/inputmovie.cpp | 7 ++----- src/lua/loadfile.cpp | 6 +----- src/lua/lua.cpp | 3 +-- src/lua/memory.cpp | 4 ++-- src/lua/memory2.cpp | 7 ++----- src/lua/zip.cpp | 5 +---- 14 files changed, 36 insertions(+), 49 deletions(-) diff --git a/include/library/luabase.hpp b/include/library/luabase.hpp index ce4e9d86..06b40947 100644 --- a/include/library/luabase.hpp +++ b/include/library/luabase.hpp @@ -3,7 +3,10 @@ #include #include +#include +#include #include +#include #include #include #include @@ -29,6 +32,8 @@ std::string try_print_userdata(lua_state& state, int index); struct lua_function; +std::unordered_map& lua_class_types(); + /** * Group of functions. */ @@ -680,7 +685,10 @@ template class lua_class; /** * Function to obtain class object for given Lua class. */ -template lua_class& objclass(); +template lua_class& objclass() +{ + return *reinterpret_cast*>(lua_class_types()[typeid(T)]); +} template struct lua_class_binding { @@ -777,6 +785,7 @@ public: m.name = lua_class::get_name; m.print = lua_class::print; userdata_recogn_fns().push_back(m); + lua_class_types()[typeid(T)] = this; } /** @@ -929,9 +938,6 @@ again: lua_class& operator=(const lua_class&); }; -#define DECLARE_LUACLASS(x, X) template<> lua_class< x >& objclass() { static lua_class< x > clazz( X ); \ - return clazz; } - /** * Function implemented in C++ exported to Lua. */ diff --git a/src/library/luabase.cpp b/src/library/luabase.cpp index 51bb770d..4cd575b0 100644 --- a/src/library/luabase.cpp +++ b/src/library/luabase.cpp @@ -3,6 +3,11 @@ #include #include +std::unordered_map& lua_class_types() +{ + static std::unordered_map x; + return x; +} namespace { int lua_trampoline_function(lua_State* L) diff --git a/src/lua/callback.cpp b/src/lua/callback.cpp index 117c9c1e..ada542b0 100644 --- a/src/lua/callback.cpp +++ b/src/lua/callback.cpp @@ -34,13 +34,10 @@ namespace lua_state::lua_callback_list* callback; int special; }; -} -DECLARE_LUACLASS(lua_callbacks_list, "CALLBACKS_LIST"); -DECLARE_LUACLASS(lua_callback_obj, "CALLBACK_OBJ"); + lua_class class_callbacks_list("CALLBACKS_LIST"); + lua_class class_callback_obj("CALLBACK_OBJ"); -namespace -{ lua_callbacks_list::lua_callbacks_list(lua_state& L) { objclass().bind_multi(L, { diff --git a/src/lua/gui-bitmap.cpp b/src/lua/gui-bitmap.cpp index b5966b3d..8e0128a8 100644 --- a/src/lua/gui-bitmap.cpp +++ b/src/lua/gui-bitmap.cpp @@ -896,8 +896,8 @@ namespace } return 2; }); -} -DECLARE_LUACLASS(lua_palette, "PALETTE"); -DECLARE_LUACLASS(lua_bitmap, "BITMAP"); -DECLARE_LUACLASS(lua_dbitmap, "DBITMAP"); + lua_class class_palette("PALETTE"); + lua_class class_bitmap("BITMAP"); + lua_class class_dbitmap("DBITMAP"); +} diff --git a/src/lua/gui-rqueue.cpp b/src/lua/gui-rqueue.cpp index 126b76bf..079dc3a4 100644 --- a/src/lua/gui-rqueue.cpp +++ b/src/lua/gui-rqueue.cpp @@ -111,9 +111,9 @@ namespace throw std::runtime_error("Expected RENDERCTX or nil as argument 1 for gui.renderq_set."); return 0; }); -} -DECLARE_LUACLASS(render_queue_obj, "RENDERCTX"); + lua_class class_render_queue_obj("RENDERCTX"); +} void lua_renderq_run(lua_render_context* ctx, void* _sctx) { diff --git a/src/lua/gui-text-cf.cpp b/src/lua/gui-text-cf.cpp index 74a66d8a..61a0e75f 100644 --- a/src/lua/gui-text-cf.cpp +++ b/src/lua/gui-text-cf.cpp @@ -26,12 +26,9 @@ namespace std::string orig_filename; framebuffer::font2 font; }; -} -DECLARE_LUACLASS(lua_customfont, "CUSTOMFONT"); + lua_class class_customfont("CUSTOMFONT"); -namespace -{ struct render_object_text_cf : public framebuffer::object { render_object_text_cf(int32_t _x, int32_t _y, const std::string& _text, framebuffer::color _fg, diff --git a/src/lua/gui-tilemap.cpp b/src/lua/gui-tilemap.cpp index 0ac3ecea..66a96d23 100644 --- a/src/lua/gui-tilemap.cpp +++ b/src/lua/gui-tilemap.cpp @@ -301,12 +301,9 @@ namespace tilemap* t = lua_class::create(LS, w, h, px, py); return 1; }); -} -DECLARE_LUACLASS(tilemap, "TILEMAP"); + lua_class class_tilemap("TILEMAP"); -namespace -{ tilemap::tilemap(lua_state& L, size_t _width, size_t _height, size_t _cwidth, size_t _cheight) : width(_width), height(_height), cwidth(_cwidth), cheight(_cheight) { diff --git a/src/lua/ibind.cpp b/src/lua/ibind.cpp index 0be89020..b2bfea13 100644 --- a/src/lua/ibind.cpp +++ b/src/lua/ibind.cpp @@ -160,7 +160,6 @@ namespace return 1; }); + lua_class class_inverse_bind("INVERSEBIND"); + lua_class class_command_bind("COMMANDBIND"); } - -DECLARE_LUACLASS(lua_inverse_bind, "INVERSEBIND"); -DECLARE_LUACLASS(lua_command_bind, "COMMANDBIND"); diff --git a/src/lua/inputmovie.cpp b/src/lua/inputmovie.cpp index f6dfc879..c855021b 100644 --- a/src/lua/inputmovie.cpp +++ b/src/lua/inputmovie.cpp @@ -615,13 +615,10 @@ namespace else return movb.get_movie().get_frame_vector(); } -} -DECLARE_LUACLASS(lua_inputmovie, "INPUTMOVIE"); -DECLARE_LUACLASS(lua_inputframe, "INPUTFRAME"); + lua_class class_inputmovie("INPUTMOVIE"); + lua_class class_inputframe("INPUTFRAME"); -namespace -{ lua_inputframe::lua_inputframe(lua_state& L, controller_frame _f) { f = _f; diff --git a/src/lua/loadfile.cpp b/src/lua/loadfile.cpp index cae9a91b..59aea326 100644 --- a/src/lua/loadfile.cpp +++ b/src/lua/loadfile.cpp @@ -313,13 +313,9 @@ namespace throw; } }); -} - -DECLARE_LUACLASS(lua_file_reader, "FILEREADER"); + lua_class class_filreader("FILEREADER"); -namespace -{ lua_file_reader::lua_file_reader(lua_state& L, std::istream* strm) : s(*strm) { diff --git a/src/lua/lua.cpp b/src/lua/lua.cpp index 6f3504db..de7413b7 100644 --- a/src/lua/lua.cpp +++ b/src/lua/lua.cpp @@ -421,6 +421,7 @@ namespace messages << "Lua VM reset" << std::endl; }); + lua_class class_unsaferewind("UNSAFEREWIND"); } void lua_callback_quit() throw() @@ -515,8 +516,6 @@ void lua_callback_do_latch(std::list& args) bool lua_requests_repaint = false; bool lua_requests_subframe_paint = false; -DECLARE_LUACLASS(lua_unsaferewind, "UNSAFEREWIND"); - lua_unsaferewind::lua_unsaferewind(lua_state& L) { } diff --git a/src/lua/memory.cpp b/src/lua/memory.cpp index be508178..eba33583 100644 --- a/src/lua/memory.cpp +++ b/src/lua/memory.cpp @@ -658,6 +658,8 @@ namespace lua_registerX murx("memory.unregisterexec"); lua_registerX mrt("memory.registertrace"); lua_registerX murt("memory.unregistertrace"); + + lua_class class_mmap_struct("MMAP_STRUCT"); } int lua_mmap_struct::map(lua_state& L, const std::string& fname) @@ -706,8 +708,6 @@ int lua_mmap_struct::map(lua_state& L, const std::string& fname) return 0; } -DECLARE_LUACLASS(lua_mmap_struct, "MMAP_STRUCT"); - lua_mmap_struct::lua_mmap_struct(lua_state& L) { objclass().bind_multi(L, { diff --git a/src/lua/memory2.cpp b/src/lua/memory2.cpp index 4b92c597..6330a9ba 100644 --- a/src/lua/memory2.cpp +++ b/src/lua/memory2.cpp @@ -76,13 +76,10 @@ namespace return ""; } }; -} -DECLARE_LUACLASS(lua_vma, "VMA"); -DECLARE_LUACLASS(lua_vma_list, "VMALIST"); + lua_class class_vma("VMA"); + lua_class class_vmalist("VMALIST"); -namespace -{ lua_vma::lua_vma(lua_state& L, memory_region* r) { objclass().bind_multi(L, { diff --git a/src/lua/zip.cpp b/src/lua/zip.cpp index dbc89d24..04d9d1cb 100644 --- a/src/lua/zip.cpp +++ b/src/lua/zip.cpp @@ -69,12 +69,9 @@ namespace std::ostream* file_open; std::string file; }; -} -DECLARE_LUACLASS(lua_zip_writer, "ZIPWRITER"); + lua_class class_zipwriter("ZIPWRITER"); -namespace -{ lua_zip_writer::lua_zip_writer(lua_state& L, const std::string& filename, unsigned compression) { file = filename; -- 2.11.4.GIT