From aae4567b4d24f47e357646272693bfbae545b271 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Wed, 16 Apr 2014 13:38:51 +0100 Subject: [PATCH] elua: eina bindings fixes, include support in lualian --- src/bin/elua/modules/lualian.lua | 59 +++++++++++++++++++++--------- src/bindings/luajit/eina/file.lua | 49 +++++++++++++------------ src/bindings/luajit/eina/xattr.lua | 37 ++++++++++--------- 3 files changed, 86 insertions(+), 59 deletions(-) diff --git a/src/bin/elua/modules/lualian.lua b/src/bin/elua/modules/lualian.lua index 566ed98c12..aa48b59ba8 100644 --- a/src/bin/elua/modules/lualian.lua +++ b/src/bin/elua/modules/lualian.lua @@ -26,6 +26,7 @@ local Node = util.Object:clone { gen_children = function(self, s) for i, v in ipairs(self.children) do + v.parent_node = self v:generate(s) end end @@ -43,7 +44,18 @@ local Property = Node:clone { end, generate = function(self, s) - + local prop = self.property + local par = self.parent_node + local name = prop:name_get() + local isget = prop:type_get() == eolian.function_type.PROP_GET + local suffix = isget and "_get" or "_set" + local ret = isget and "return " or "" + s:write(([[ + %s%s = function(self) + %slibname.%s_%s%s() + end + +]]):format(name, suffix, ret, par.prefix, name, suffix)) end } @@ -56,6 +68,7 @@ local Destructor = Node:clone { local Mixin = Node:clone { __ctor = function(self, cname, ch) self.cname = cname + self.prefix = eolian.class_eo_prefix_get(cname) self.children = ch end, @@ -76,6 +89,7 @@ local Class = Node:clone { self.parent = parent self.interfaces = interfaces self.mixins = mixins + self.prefix = eolian.class_eo_prefix_get(cname) self.children = ch end, @@ -91,7 +105,8 @@ M.%s = Parent:clone { s:write("\n}\n") for i, v in ipairs(self.mixins) do - s:write("\nM.%s:mixin(eo.class_get(\"%s\"))\n", self.cname, v) + s:write(("\nM.%s:mixin(eo.class_get(\"%s\"))\n") + :format(self.cname, v)) end end } @@ -160,28 +175,38 @@ local gen_class = function(classn) elseif tp == ct.MIXIN or tp == ct.INTERFACE then mixins[#mixins + 1] = v else - error(classn .. ": unknown inherit") + error(classn .. ": unknown inherit " .. v) end end return Class(classn, parent, mixins, gen_contents(classn)) end -M.generate = function(fname, fstream) - if not eolian.eo_file_parse(fname) then - error("Failed parsing file: " .. fname) +M.generate = function(files, include_files, fstream) + for i, file in ipairs(include_files) do + if not eolian.eo_file_parse(file) then + error("Failed parsing include file: " .. file) + end end - local classn = eolian.class_find_by_file(fname) - local tp = eolian.class_type_get(classn) - local ct = eolian.class_type - local cl - if tp == ct.MIXIN or tp == ct.INTERFACE then - cl = gen_mixin(classn) - elseif tp == ct.REGULAR or tp == ct.ABSTRACT then - cl = gen_class(classn) - else - error(classn .. ": unknown type") + for i, file in ipairs(files) do + if not eolian.eo_file_parse(file) then + error("Failed parsing file: " .. file) + end + end + for i, file in ipairs(files) do + local fname = files[i] + local classn = eolian.class_find_by_file(fname) + local tp = eolian.class_type_get(classn) + local ct = eolian.class_type + local cl + if tp == ct.MIXIN or tp == ct.INTERFACE then + cl = gen_mixin(classn) + elseif tp == ct.REGULAR or tp == ct.ABSTRACT then + cl = gen_class(classn) + else + error(classn .. ": unknown type") + end + File(fname, classn, { cl }):generate(fstream) end - File(fname, classn, { cl }):generate(fstream) end return M \ No newline at end of file diff --git a/src/bindings/luajit/eina/file.lua b/src/bindings/luajit/eina/file.lua index b1747a329a..55295fafc0 100644 --- a/src/bindings/luajit/eina/file.lua +++ b/src/bindings/luajit/eina/file.lua @@ -9,6 +9,7 @@ require("eina.xattr") ffi.cdef [[ typedef unsigned char Eina_Bool; + typedef long time_t; typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info; typedef struct _Eina_Stat Eina_Stat; @@ -77,14 +78,14 @@ ffi.cdef [[ unsigned long long length; }; - EAPI Eina_Bool eina_file_dir_list(const char *dir, Eina_Bool recursive, + Eina_Bool eina_file_dir_list(const char *dir, Eina_Bool recursive, Eina_File_Dir_List_Cb cb, void *data); - EAPI Eina_Iterator *eina_file_ls(const char *dir); - EAPI Eina_Iterator *eina_file_stat_ls(const char *dir); - EAPI int eina_file_statat(void *container, Eina_File_Direct_Info *info, + Eina_Iterator *eina_file_ls(const char *dir); + Eina_Iterator *eina_file_stat_ls(const char *dir); + int eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *buf); - EAPI Eina_Iterator *eina_file_direct_ls(const char *dir); - EAPI char *eina_file_path_sanitize(const char *path); + Eina_Iterator *eina_file_direct_ls(const char *dir); + char *eina_file_path_sanitize(const char *path); typedef enum { EINA_FILE_COPY_DATA = 0, @@ -92,29 +93,29 @@ ffi.cdef [[ EINA_FILE_COPY_XATTR = (1 << 1) } Eina_File_Copy_Flags; - EAPI Eina_Bool eina_file_copy(const char *src, const char *dst, + Eina_Bool eina_file_copy(const char *src, const char *dst, Eina_File_Copy_Flags flags, Eina_File_Copy_Progress cb, const void *cb_data); - EAPI Eina_File *eina_file_open(const char *name, Eina_Bool shared); - EAPI Eina_File *eina_file_virtualize(const char *virtual_name, + Eina_File *eina_file_open(const char *name, Eina_Bool shared); + Eina_File *eina_file_virtualize(const char *virtual_name, const void *data, unsigned long long length, Eina_Bool copy); - EAPI Eina_Bool eina_file_virtual(Eina_File *file); - EAPI Eina_Bool eina_file_refresh(Eina_File *file); - EAPI Eina_File *eina_file_dup(const Eina_File *file); - EAPI void eina_file_close(Eina_File *file); - EAPI size_t eina_file_size_get(const Eina_File *file); - EAPI time_t eina_file_mtime_get(const Eina_File *file); - EAPI const char *eina_file_filename_get(const Eina_File *file); - EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file); - EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file); - EAPI void *eina_file_map_all(Eina_File *file, Eina_File_Populate rule); - EAPI void *eina_file_map_new(Eina_File *file, Eina_File_Populate rule, + Eina_Bool eina_file_virtual(Eina_File *file); + Eina_Bool eina_file_refresh(Eina_File *file); + Eina_File *eina_file_dup(const Eina_File *file); + void eina_file_close(Eina_File *file); + size_t eina_file_size_get(const Eina_File *file); + time_t eina_file_mtime_get(const Eina_File *file); + const char *eina_file_filename_get(const Eina_File *file); + Eina_Iterator *eina_file_xattr_get(Eina_File *file); + Eina_Iterator *eina_file_xattr_value_get(Eina_File *file); + void *eina_file_map_all(Eina_File *file, Eina_File_Populate rule); + void *eina_file_map_new(Eina_File *file, Eina_File_Populate rule, unsigned long int offset, unsigned long int length); - EAPI void eina_file_map_free(Eina_File *file, void *map); - EAPI void eina_file_map_populate(Eina_File *file, Eina_File_Populate rule, + void eina_file_map_free(Eina_File *file, void *map); + void eina_file_map_populate(Eina_File *file, Eina_File_Populate rule, const void *map, unsigned long int offset, unsigned long int length); - EAPI Eina_Iterator *eina_file_map_lines(Eina_File *file); - EAPI Eina_Bool eina_file_map_faulted(Eina_File *file, void *map); + Eina_Iterator *eina_file_map_lines(Eina_File *file); + Eina_Bool eina_file_map_faulted(Eina_File *file, void *map); void eina_stringshare_del (const char *str); int eina_stringshare_strlen(const char *str); diff --git a/src/bindings/luajit/eina/xattr.lua b/src/bindings/luajit/eina/xattr.lua index 3a75bf79ef..8669868112 100644 --- a/src/bindings/luajit/eina/xattr.lua +++ b/src/bindings/luajit/eina/xattr.lua @@ -8,6 +8,7 @@ local iterator = require("eina.iterator") ffi.cdef [[ typedef unsigned char Eina_Bool; + typedef ptrdiff_t ssize_t; typedef enum { EINA_XATTR_INSERT, @@ -22,24 +23,24 @@ ffi.cdef [[ size_t length; }; - EAPI Eina_Iterator *eina_xattr_ls(const char *file); - EAPI Eina_Iterator *eina_xattr_value_ls(const char *file); - EAPI Eina_Iterator *eina_xattr_fd_ls(int fd); - EAPI Eina_Iterator *eina_xattr_value_fd_ls(int fd); - EAPI Eina_Bool eina_xattr_copy(const char *src, const char *dst); - EAPI Eina_Bool eina_xattr_fd_copy(int src, int dst); - EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size); - EAPI void *eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size); - EAPI Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags); - EAPI Eina_Bool eina_xattr_fd_set(int fd, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags); - EAPI Eina_Bool eina_xattr_del(const char *file, const char *attribute); - EAPI Eina_Bool eina_xattr_fd_del(int fd, const char *attribute); - EAPI Eina_Bool eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags); - EAPI char *eina_xattr_string_get(const char *file, const char *attribute); - EAPI Eina_Bool eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags); - EAPI Eina_Bool eina_xattr_double_get(const char *file, const char *attribute, double *value); - EAPI Eina_Bool eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags); - EAPI Eina_Bool eina_xattr_int_get(const char *file, const char *attribute, int *value); + Eina_Iterator *eina_xattr_ls(const char *file); + Eina_Iterator *eina_xattr_value_ls(const char *file); + Eina_Iterator *eina_xattr_fd_ls(int fd); + Eina_Iterator *eina_xattr_value_fd_ls(int fd); + Eina_Bool eina_xattr_copy(const char *src, const char *dst); + Eina_Bool eina_xattr_fd_copy(int src, int dst); + void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size); + void *eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size); + Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags); + Eina_Bool eina_xattr_fd_set(int fd, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags); + Eina_Bool eina_xattr_del(const char *file, const char *attribute); + Eina_Bool eina_xattr_fd_del(int fd, const char *attribute); + Eina_Bool eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags); + char *eina_xattr_string_get(const char *file, const char *attribute); + Eina_Bool eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags); + Eina_Bool eina_xattr_double_get(const char *file, const char *attribute, double *value); + Eina_Bool eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags); + Eina_Bool eina_xattr_int_get(const char *file, const char *attribute, int *value); void free(void*); ]]