From b665bdbd8aa785a6a7f5ac18c04e53866279a86a Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Thu, 5 Jun 2014 09:58:58 +0100 Subject: [PATCH] elua: eolian binding fix plus support namespaces in the lualian generator --- src/bin/elua/modules/lualian.lua | 28 ++++++++++++++++++++++++---- src/bindings/luajit/eolian.lua | 2 +- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/bin/elua/modules/lualian.lua b/src/bin/elua/modules/lualian.lua index 49d3325..fc8a451 100644 --- a/src/bin/elua/modules/lualian.lua +++ b/src/bin/elua/modules/lualian.lua @@ -427,8 +427,18 @@ local Mixin = Node:clone { self:gen_ffi(s) s:write("]]\n\n") + local nspaces = self.klass:namespaces_list_get() + local ename + if #nspaces > 0 then + table.remove(nspaces, 1) + nspaces[#nspaces + 1] = self.klass:name_get() + ename = table.concat(nspaces, "_") + else + ename = self.klass:name_get() + end + s:write(("M.%s = eo.class_register(\"%s\", {\n"):format( - self.klass:name_get(), self.klass:name_get())) + ename, self.klass:full_name_get())) self:gen_children(s) @@ -476,10 +486,20 @@ local Class = Node:clone { self:gen_ffi(s) s:write("]]\n\n") + local nspaces = self.klass:namespaces_list_get() + local ename + if #nspaces > 0 then + table.remove(nspaces, 1) + nspaces[#nspaces + 1] = self.klass:name_get() + ename = table.concat(nspaces, "_") + else + ename = self.klass:name_get() + end + s:write(([[ local Parent = eo.class_get("%s") M.%s = eo.class_register("%s", Parent:clone { -]]):format(self.parent, self.klass:name_get(), self.klass:name_get())) +]]):format(self.parent, ename, self.klass:full_name_get())) self:gen_children(s) @@ -487,7 +507,7 @@ M.%s = eo.class_register("%s", Parent:clone { for i, v in ipairs(self.mixins) do s:write(("\nM.%s:mixin(eo.class_get(\"%s\"))\n") - :format(self.klass:name_get(), v)) + :format(ename, v)) end end, @@ -538,7 +558,7 @@ end cutil.init_module(init, shutdown) -]]):format(self.fname, self.klass:name_get(), modn, self.libname, +]]):format(self.fname, self.klass:full_name_get(), modn, self.libname, self.libname)) self:gen_children(s) diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index 835bc19..12dad43 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua @@ -57,7 +57,7 @@ ffi.cdef [[ const char *eolian_class_file_get(const Eolian_Class *klass); const char *eolian_class_full_name_get(const Eolian_Class *klass); const char *eolian_class_name_get(const Eolian_Class *klass); - const Eina_List *eolian_class_namespaces_list_get(const Eolian_Class klass); + const Eina_List *eolian_class_namespaces_list_get(const Eolian_Class *klass); Eolian_Class_Type eolian_class_type_get(const Eolian_Class *klass); const Eina_List *eolian_class_names_list_get(void); const char *eolian_class_description_get(const Eolian_Class *klass); -- 2.7.4