q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=3636f5c9a8c824b6bb0edbaf77fe5c286a0e6f7b

commit 3636f5c9a8c824b6bb0edbaf77fe5c286a0e6f7b
Author: Daniel Kolesa <[email protected]>
Date:   Fri Jul 25 17:11:20 2014 +0100

    elua: make generator work again
    
    Also adds to_array API to Lua eina iterators.
---
 src/bin/elua/modules/lualian.lua      | 59 +++++++++++++++++------------------
 src/bindings/luajit/eina/iterator.lua |  8 +++++
 src/bindings/luajit/eolian.lua        |  4 +--
 3 files changed, 39 insertions(+), 32 deletions(-)

diff --git a/src/bin/elua/modules/lualian.lua b/src/bin/elua/modules/lualian.lua
index 65d6bbb..6c499bb 100644
--- a/src/bin/elua/modules/lualian.lua
+++ b/src/bin/elua/modules/lualian.lua
@@ -151,7 +151,7 @@ local Method = Node:clone {
         if self.cached_proto then return self.cached_proto end
 
         local meth = self.method
-        local pars = meth:parameters_list_get()
+        local pars = meth:parameters_get()
         local rett = meth:return_type_get(eolian.function_type.METHOD)
 
         local proto = {
@@ -175,24 +175,22 @@ local Method = Node:clone {
             rets[#rets + 1] = typeconv(rett, "v", false)
         end
 
-        if #pars > 0 then
-            for i, v in ipairs(pars) do
-                local dir, tps, nm = v:information_get()
-                local tp = tps:c_type_get()
-                if dir == dirs.OUT or dir == dirs.INOUT then
-                    if dir == dirs.INOUT then
-                        args[#args + 1] = nm
-                    end
-                    cargs [#cargs  + 1] = tp .. " *" .. nm
-                    vargs [#vargs  + 1] = nm
-                    allocs[#allocs + 1] = { tp, nm, (dir == dirs.INOUT)
-                        and typeconv(tps, nm, true) or nil }
-                    rets  [#rets   + 1] = typeconv(tps, nm .. "[0]", false)
-                else
-                    args  [#args   + 1] = nm
-                    cargs [#cargs  + 1] = tp .. " " .. nm
-                    vargs [#vargs  + 1] = typeconv(tps, nm, true)
+        for v in pars do
+            local dir, tps, nm = v:information_get()
+            local tp = tps:c_type_get()
+            if dir == dirs.OUT or dir == dirs.INOUT then
+                if dir == dirs.INOUT then
+                    args[#args + 1] = nm
                 end
+                cargs [#cargs  + 1] = tp .. " *" .. nm
+                vargs [#vargs  + 1] = nm
+                allocs[#allocs + 1] = { tp, nm, (dir == dirs.INOUT)
+                    and typeconv(tps, nm, true) or nil }
+                rets  [#rets   + 1] = typeconv(tps, nm .. "[0]", false)
+            else
+                args  [#args   + 1] = nm
+                cargs [#cargs  + 1] = tp .. " " .. nm
+                vargs [#vargs  + 1] = typeconv(tps, nm, true)
             end
         end
 
@@ -245,8 +243,8 @@ local Property = Method:clone {
         if self.cached_proto then return self.cached_proto end
 
         local prop = self.property
-        local keys = prop:property_keys_list_get()
-        local vals = prop:property_values_list_get()
+        local keys = prop:property_keys_get():to_array()
+        local vals = prop:property_values_get():to_array()
         local rett = prop:return_type_get(self.ftype)
 
         local proto = {
@@ -433,7 +431,7 @@ local Mixin = Node:clone {
         self:gen_ffi(s)
         s:write("]]\n\n")
 
-        local nspaces = self.klass:namespaces_list_get()
+        local nspaces = self.klass:namespaces_get():to_array()
         local mname
         if #nspaces > 1 then
             local lnspaces = {}
@@ -499,7 +497,7 @@ local Class = Node:clone {
         self:gen_ffi(s)
         s:write("]]\n\n")
 
-        local nspaces = self.klass:namespaces_list_get()
+        local nspaces = self.klass:namespaces_get():to_array()
         local mname
         if #nspaces > 1 then
             local lnspaces = {}
@@ -602,7 +600,7 @@ local gen_contents = function(klass)
     local cnt = {}
     local ft  = eolian.function_type
     -- first try properties
-    local props = klass:functions_list_get(ft.PROPERTY)
+    local props = klass:functions_get(ft.PROPERTY):to_array()
     for i, v in ipairs(props) do
         if v:scope_get() == eolian.function_scope.PUBLIC then
             local ftype  = v:type_get()
@@ -617,14 +615,14 @@ local gen_contents = function(klass)
         end
     end
     -- then methods
-    local meths = klass:functions_list_get(ft.METHOD)
+    local meths = klass:functions_get(ft.METHOD):to_array()
     for i, v in ipairs(meths) do
         if v:scope_get() == eolian.function_scope.PUBLIC then
             cnt[#cnt + 1] = Method(v)
         end
     end
     -- and constructors
-    local ctors = klass:functions_list_get(ft.CTOR)
+    local ctors = klass:functions_get(ft.CTOR):to_array()
     for i, v in ipairs(ctors) do
         cnt[#cnt + 1] = Constructor(v)
     end
@@ -633,7 +631,7 @@ local gen_contents = function(klass)
     end
     -- events
     local evs = {}
-    local events = klass:events_list_get()
+    local events = klass:events_get():to_array()
     for i, v in ipairs(events) do
         local en, et, ed = v:information_get()
         evs[#evs + 1] = Event(en, et, ed)
@@ -646,12 +644,12 @@ local gen_mixin = function(klass)
 end
 
 local gen_class = function(klass)
-    local inherits = klass:inherits_list_get()
+    local inherits = klass:inherits_get()
     local parent
     local mixins   = {}
     local ct = eolian.class_type
-    for i, v in ipairs(inherits) do
-        local tp = eolian.class_find_by_name(v):type_get()
+    for v in inherits do
+        local tp = eolian.class_get_by_name(v):type_get()
         if tp == ct.REGULAR or tp == ct.ABSTRACT then
             if parent then
                 error(klass:full_name_get() .. ": more than 1 parent!")
@@ -684,7 +682,8 @@ M.generate = function(fname, modname, libname, fstream)
     if not eolian.eo_file_parse(fname) then
         error("Failed parsing file: " .. fname)
     end
-    local klass = eolian.class_find_by_file(fname)
+    local sfn = fname:match(".*[\\/](.+)$") or fname
+    local klass = eolian.class_get_by_file(sfn)
     local tp = klass:type_get()
     local ct = eolian.class_type
     local cl
diff --git a/src/bindings/luajit/eina/iterator.lua 
b/src/bindings/luajit/eina/iterator.lua
index c878c3b..dc5d0da 100644
--- a/src/bindings/luajit/eina/iterator.lua
+++ b/src/bindings/luajit/eina/iterator.lua
@@ -96,6 +96,14 @@ M.Iterator = util.Readonly_Object:clone {
         self = dgetmt(self)
         if not self.__iterator then return nil end
         return self.__iterator:container_get()
+    end,
+
+    to_array = function(self)
+        local ret = {}
+        for v in self do
+            ret[#ret + 1] = v
+        end
+        return ret
     end
 }
 
diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua
index 618bf10..c5d66f8 100644
--- a/src/bindings/luajit/eolian.lua
+++ b/src/bindings/luajit/eolian.lua
@@ -106,7 +106,7 @@ ffi.cdef [[
     const char *eolian_function_return_comment_get(const Eolian_Function 
*foo_id, Eolian_Function_Type ftype);
     Eina_Bool eolian_function_return_is_warn_unused(const Eolian_Function 
*foo_id, Eolian_Function_Type ftype);
     Eina_Bool eolian_function_object_is_const(const Eolian_Function 
*function_id);
-    EAPI Eina_Bool eolian_type_is_extern(const Eolian_Type *tp);
+    Eina_Bool eolian_type_is_extern(const Eolian_Type *tp);
     const char *eolian_implement_full_name_get(const Eolian_Implement *impl);
     Eina_Bool eolian_implement_information_get(const Eolian_Implement *impl, 
const Eolian_Class *klass, const Eolian_Function *function, 
Eolian_Function_Type *type);
     Eina_Iterator *eolian_class_implements_get(const Eolian_Class *klass);
@@ -133,7 +133,7 @@ ffi.cdef [[
     const char *eolian_type_c_type_named_get(const Eolian_Type *tp, const char 
*name);
     const char *eolian_type_c_type_get(const Eolian_Type *tp);
     const char *eolian_type_name_get(const Eolian_Type *tp);
-    const cahr *eolian_type_full_name_get(const Eolian_Type *tp);
+    const char *eolian_type_full_name_get(const Eolian_Type *tp);
     Eina_Iterator *eolian_type_namespaces_get(const Eolian_Type *tp);
 ]]
 

-- 


Reply via email to