elua: properly support _class_get funcs in lualian

This commit is contained in:
Daniel Kolesa 2014-10-02 10:34:14 +01:00
parent dee98ea248
commit 17c9aeb80c
1 changed files with 8 additions and 5 deletions

View File

@ -362,11 +362,12 @@ local gen_ns = function(klass, s)
end end
local Mixin = Node:clone { local Mixin = Node:clone {
__ctor = function(self, klass, ch, evs) __ctor = function(self, klass, iface, ch, evs)
self.klass = klass self.klass = klass
self.prefix = klass:eo_prefix_get() self.prefix = klass:eo_prefix_get()
self.children = ch self.children = ch
self.events = evs self.events = evs
self.is_iface = iface
end, end,
generate = function(self, s) generate = function(self, s)
@ -385,7 +386,9 @@ local Mixin = Node:clone {
end, end,
gen_ffi = function(self, s) gen_ffi = function(self, s)
s:write(" const Eo_Class *", self.prefix, "_class_get(void);\n") local prefix = self.is_iface and "interface" or "mixin"
s:write(" const Eo_Class *", self.prefix, "_", prefix,
"_get(void);\n")
for i, v in ipairs(self.children) do for i, v in ipairs(self.children) do
v.parent_node = self v.parent_node = self
v:gen_ffi(s) v:gen_ffi(s)
@ -554,8 +557,8 @@ local gen_contents = function(klass)
return cnt, evs return cnt, evs
end end
local gen_mixin = function(kliass) local gen_mixin = function(klass, iface)
return Mixin(klass, gen_contents(klass)) return Mixin(klass, iface, gen_contents(klass))
end end
local gen_class = function(klass) local gen_class = function(klass)
@ -606,7 +609,7 @@ M.generate = function(fname, libname, fstream)
local ct = eolian.class_type local ct = eolian.class_type
local cl local cl
if tp == ct.MIXIN or tp == ct.INTERFACE then if tp == ct.MIXIN or tp == ct.INTERFACE then
cl = gen_mixin(klass) cl = gen_mixin(klass, tp == ct.INTERFACE)
elseif tp == ct.REGULAR or tp == ct.ABSTRACT then elseif tp == ct.REGULAR or tp == ct.ABSTRACT then
cl = gen_class(klass) cl = gen_class(klass)
else else