q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=c54898104656bb556f9206176b49f634bbc3422b
commit c54898104656bb556f9206176b49f634bbc3422b Author: Daniel Kolesa <[email protected]> Date: Mon Jul 14 15:16:46 2014 +0100 elua: update eolian bindings and add Ptr_Iterator and String_Iterator common objects to eina iterator module --- src/bindings/luajit/eina/iterator.lua | 23 +++ src/bindings/luajit/eina/list.lua | 1 + src/bindings/luajit/eolian.lua | 279 +++++++++++++++++++++++----------- 3 files changed, 218 insertions(+), 85 deletions(-) diff --git a/src/bindings/luajit/eina/iterator.lua b/src/bindings/luajit/eina/iterator.lua index c2e9506..c878c3b 100644 --- a/src/bindings/luajit/eina/iterator.lua +++ b/src/bindings/luajit/eina/iterator.lua @@ -99,4 +99,27 @@ M.Iterator = util.Readonly_Object:clone { end } +local Iterator = M.Iterator + +M.Ptr_Iterator = Iterator:clone { + __ctor = function(self, selfmt, ptrtype, iter) + Iterator.__ctor(self, selfmt, iter) + selfmt.ptrtype = ptrtype + end, + + next = function(self) + local v = Iterator.next(self) + if not v then return nil end + return ffi.cast(dgetmt(self).ptrtype, v) + end +} + +M.String_Iterator = Iterator:clone { + next = function(self) + local v = Iterator.next(self) + if not v then return nil end + return ffi.string(v) + end +} + return M diff --git a/src/bindings/luajit/eina/list.lua b/src/bindings/luajit/eina/list.lua index 63167ff..aebfa34 100644 --- a/src/bindings/luajit/eina/list.lua +++ b/src/bindings/luajit/eina/list.lua @@ -285,6 +285,7 @@ M.Ptr_List = List_Base:clone { data_get = function(self, ptr) ptr = List_Base.data_get(self, ptr) + if not ptr then return nil end return ffi.cast(dgetmt(self).ptrtype, ptr) end } diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index 1baf036..45f87e9 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua @@ -16,98 +16,127 @@ ffi.cdef [[ typedef enum { - EOLIAN_UNRESOLVED, - EOLIAN_PROPERTY, - EOLIAN_PROP_SET, - EOLIAN_PROP_GET, - EOLIAN_METHOD, - EOLIAN_CTOR + EOLIAN_UNRESOLVED, + EOLIAN_PROPERTY, + EOLIAN_PROP_SET, + EOLIAN_PROP_GET, + EOLIAN_METHOD, + EOLIAN_CTOR } Eolian_Function_Type; typedef enum { - EOLIAN_IN_PARAM, - EOLIAN_OUT_PARAM, - EOLIAN_INOUT_PARAM + EOLIAN_IN_PARAM, + EOLIAN_OUT_PARAM, + EOLIAN_INOUT_PARAM } Eolian_Parameter_Dir; typedef enum { EOLIAN_CLASS_UNKNOWN_TYPE, - EOLIAN_CLASS_REGULAR, - EOLIAN_CLASS_ABSTRACT, - EOLIAN_CLASS_MIXIN, - EOLIAN_CLASS_INTERFACE + EOLIAN_CLASS_REGULAR, + EOLIAN_CLASS_ABSTRACT, + EOLIAN_CLASS_MIXIN, + EOLIAN_CLASS_INTERFACE } Eolian_Class_Type; typedef enum { - EOLIAN_SCOPE_PUBLIC, - EOLIAN_SCOPE_PROTECTED + EOLIAN_SCOPE_PUBLIC, + EOLIAN_SCOPE_PROTECTED } Eolian_Function_Scope; + typedef enum + { + EOLIAN_TYPE_UNKNOWN_TYPE, + EOLIAN_TYPE_VOID, + EOLIAN_TYPE_REGULAR, + EOLIAN_TYPE_REGULAR_STRUCT, + EOLIAN_TYPE_POINTER, + EOLIAN_TYPE_FUNCTION, + EOLIAN_TYPE_STRUCT + } Eolian_Type_Type; + Eina_Bool eolian_eo_file_parse(const char *filename); Eina_Bool eolian_eot_file_parse(const char *filepath); int eolian_init(void); int eolian_shutdown(void); Eina_Bool eolian_directory_scan(const char *dir); + Eina_Bool eolian_system_directory_scan(); Eina_Bool eolian_all_eo_files_parse(); Eina_Bool eolian_all_eot_files_parse(); - Eina_Bool eolian_show(const Eolian_Class *klass); - Eolian_Class *eolian_class_find_by_name(const char *class_name); - Eolian_Class *eolian_class_find_by_file(const char *file_name); + Eina_Bool eolian_show_class(const Eolian_Class *klass); + Eina_Bool eolian_show_typedef(const char *alias); + Eina_Bool eolian_show_struct(const char *name); + void eolian_show_all(); + const Eolian_Class *eolian_class_find_by_name(const char *class_name); + const Eolian_Class *eolian_class_find_by_file(const char *file_name); 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); Eolian_Class_Type eolian_class_type_get(const Eolian_Class *klass); - const Eina_List *eolian_class_names_list_get(void); + const Eina_List *eolian_all_classes_list_get(void); const char *eolian_class_description_get(const Eolian_Class *klass); const char *eolian_class_legacy_prefix_get(const Eolian_Class *klass); const char *eolian_class_eo_prefix_get(const Eolian_Class *klass); const char *eolian_class_data_type_get(const Eolian_Class *klass); const Eina_List *eolian_class_inherits_list_get(const Eolian_Class *klass); const Eina_List *eolian_class_functions_list_get(const Eolian_Class *klass, Eolian_Function_Type func_type); - Eolian_Function_Type eolian_function_type_get(Eolian_Function *function_id); - Eolian_Function_Scope eolian_function_scope_get(Eolian_Function *function_id); - const char *eolian_function_name_get(Eolian_Function *function_id); - const char *eolian_function_full_c_name_get(Eolian_Function function_id, const char *prefix); - Eolian_Function *eolian_class_function_find_by_name(const Eolian_Class *klass, const char *func_name, Eolian_Function_Type f_type); - const char *eolian_function_data_get(Eolian_Function *function_id, const char *key); - Eina_Bool eolian_function_is_virtual_pure(Eolian_Function *function_id, Eolian_Function_Type f_type); - Eolian_Function_Parameter *eolian_function_parameter_get(const Eolian_Function *function_id, const char *param_name); - const Eina_List *eolian_property_keys_list_get(Eolian_Function *foo_id); - const Eina_List *eolian_property_values_list_get(Eolian_Function *foo_id); - const Eina_List *eolian_parameters_list_get(Eolian_Function *function_id); - void eolian_parameter_information_get(const Eolian_Function_Parameter *param_desc, Eolian_Parameter_Dir *param_dir, const char **type, const char **name, const char **description); - Eolian_Type *eolian_type_information_get(Eolian_Type *etype, const char **type, Eina_Bool *own); - const char *eolian_parameter_type_get(const Eolian_Function_Parameter *param); - Eolian_Type *eolian_parameter_types_list_get(const Eolian_Function_Parameter *param); + Eolian_Function_Type eolian_function_type_get(const Eolian_Function *function_id); + Eolian_Function_Scope eolian_function_scope_get(const Eolian_Function *function_id); + const char *eolian_function_name_get(const Eolian_Function *function_id); + const char *eolian_function_full_c_name_get(const Eolian_Function function_id, const char *prefix); + const Eolian_Function *eolian_class_function_find_by_name(const Eolian_Class *klass, const char *func_name, Eolian_Function_Type f_type); + const char *eolian_function_data_get(const Eolian_Function *function_id, const char *key); + Eina_Bool eolian_function_is_virtual_pure(const Eolian_Function *function_id, Eolian_Function_Type f_type); + const Eolian_Function_Parameter *eolian_function_parameter_get(const Eolian_Function *function_id, const char *param_name); + const Eina_List *eolian_property_keys_list_get(const Eolian_Function *foo_id); + const Eina_List *eolian_property_values_list_get(const Eolian_Function *foo_id); + const Eina_List *eolian_parameters_list_get(const Eolian_Function *function_id); + void eolian_parameter_information_get(const Eolian_Function_Parameter *param_desc, Eolian_Parameter_Dir *param_dir, const Eolian_Type **type, const char **name, const char **description); + const Eolian_Type *eolian_parameter_type_get(const Eolian_Function_Parameter *param); const char *eolian_parameter_name_get(const Eolian_Function_Parameter *param); - Eina_Bool eolian_parameter_const_attribute_get(Eolian_Function_Parameter *param_desc, Eina_Bool is_get); - Eina_Bool eolian_parameter_is_nonull(Eolian_Function_Parameter *param_desc); - const char *eolian_function_return_type_get(Eolian_Function *function_id, Eolian_Function_Type ftype); - Eolian_Type *eolian_function_return_types_list_get(Eolian_Function *foo_id, Eolian_Function_Type ftype); - const char *eolian_function_return_dflt_value_get(Eolian_Function *foo_id, Eolian_Function_Type ftype); - const char *eolian_function_return_comment_get(Eolian_Function *foo_id, Eolian_Function_Type ftype); - Eina_Bool eolian_function_return_is_warn_unused(Eolian_Function *foo_id, Eolian_Function_Type ftype); - Eina_Bool eolian_function_object_is_const(Eolian_Function *function_id); + Eina_Bool eolian_parameter_const_attribute_get(const Eolian_Function_Parameter *param_desc, Eina_Bool is_get); + Eina_Bool eolian_parameter_is_nonull(const Eolian_Function_Parameter *param_desc); + const Eolian_Type *eolian_function_return_type_get(const Eolian_Function *function_id, Eolian_Function_Type ftype); + const char *eolian_function_return_default_value_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype); + 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); const char *eolian_implement_full_name_get(const Eolian_Implement *impl); - Eina_Bool eolian_implement_information_get(const Eolian_Implement *impl, Eolian_Class *klass, Eolian_Function *function, Eolian_Function_Type *type); + Eina_Bool eolian_implement_information_get(const Eolian_Implement *impl, const Eolian_Class *klass, const Eolian_Function *function, Eolian_Function_Type *type); const Eina_List *eolian_class_implements_list_get(const Eolian_Class *klass); const Eina_List *eolian_class_events_list_get(const Eolian_Class *klass); - Eina_Bool eolian_class_event_information_get(Eolian_Event *event, const char **event_name, const char **event_type, const char **event_desc); + Eina_Bool eolian_class_event_information_get(const Eolian_Event *event, const char **event_name, const Eolian_Type **event_type, const char **event_desc); Eina_Bool eolian_class_ctor_enable_get(const Eolian_Class *klass); Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass); - Eolian_Type *eolian_type_find_by_alias(const char *alias); + const Eolian_Type *eolian_type_find_by_alias(const char *alias); + const Eolian_Type *eolian_type_struct_find_by_name(const char *name); + Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp); + Eina_Iterator *eolian_type_arguments_list_get(const Eolian_Type *tp); + Eina_Iterator *eolian_type_subtypes_list_get(const Eolian_Type *tp); + Eina_Iterator *eolian_type_struct_field_names_list_get(const Eolian_Type *tp); + const Eolian_Type *eolian_type_struct_field_get(const Eolian_Type *tp, const char *field); + Eina_Stringshare *eolian_type_struct_field_description_get(const Eolian_Type *tp, const char *field); + Eina_Stringshare *eolian_type_struct_description_get(const Eolian_Type *tp); + const Eolian_Type *eolian_type_return_type_get(const Eolian_Type *tp); + const Eolian_Type *eolian_type_base_type_get(const Eolian_Type *tp); + Eina_Bool eolian_type_is_own(const Eolian_Type *tp); + Eina_Bool eolian_type_is_const(const Eolian_Type *tp); + Eina_Stringshare *eolian_type_c_type_named_get(const Eolian_Type *tp, const char *name); + Eina_Stringshare *eolian_type_c_type_get(const Eolian_Type *tp); + Eina_Stringshare *eolian_type_name_get(const Eolian_Type *tp); ]] local cutil = require("cutil") local util = require("util") local list = require("eina.list") +local iterator = require("eina.iterator") local Ptr_List = list.Ptr_List +local Ptr_Iterator = iterator.Ptr_Iterator local M = {} @@ -129,6 +158,9 @@ M.directory_scan = function(dir) return eolian.eolian_directory_scan(dir) ~= 0 end +M.system_directory_scan = function() + return eolian.eolian_system_directory_scan() ~= 0 + M.all_eo_files_parse = function() return eolian.eolian_all_eo_files_parse() ~= 0 end @@ -145,18 +177,97 @@ M.eot_file_parse = function(fname) return eolian.eolian_eot_file_parse(fname) ~= 0 end -M.show = function(klass) - return eolian.eolian_show(klass) ~= 0 +M.show_class = function(klass) + return eolian.eolian_show_class(klass) ~= 0 +end + +M.show_typedef = function(alias) + return eolian.eolian_show_typedef(alias) ~= 0 +end + +M.show_struct = function(name) + return eolian.eolian_show_typedef(name) ~= 0 +end + +M.show_all = function() + eolian.eolian_show_all() end M.Type = ffi.metatype("Eolian_Type", { __index = { - information_get = function(self) - local tp = ffi.new("const char*[1]") - local on = ffi.new("Eina_Bool[1]") - local nx = eolian.eolian_type_information_get(self, tp, on) - if nx == nil then nx = nil end - return nx, (tp[0] ~= nil) and ffi.string(tp[0]) or nil, on[0] ~= 0 + type_get = function(self) + return eolian.eolian_type_type_get(self) + end, + + arguments_list_get = function(self) + return Ptr_Iterator("const Eolian_Type*", + eolian.eolian_type_arguments_list_get(self)) + end, + + subtypes_list_get = function(self) + return Ptr_Iterator("const Eolian_Type*", + eolian.eolian_type_subtypes_list_get(self)) + end, + + struct_field_names_list_get = function(self) + return iterator.String_Iterator( + eolian.eolian_type_struct_field_names_list_get(self)) + end, + + struct_field_get = function(self, name) + local v = eolian.eolian_type_struct_field_get(self, name) + if v == nil then return nil end + return v + end, + + struct_field_description_get = function(self, name) + local v = eolian.eolian_type_struct_field_description_get(self, name) + if v == nil then return nil end + return ffi.string(v) + end, + + struct_description_get = function(self, name) + local v = eolian.eolian_type_struct_description_get(self) + if v == nil then return nil end + return ffi.string(v) + end, + + return_type_get = function(self) + local v = eolian.eolian_type_return_type_get(self) + if v == nil then return nil end + return v + end, + + base_type_get = function(self) + local v = eolian.eolian_type_base_type_get(self) + if v == nil then return nil end + return v + end, + + is_own = function(self) + return eolian.eolian_type_is_own(self) ~= 0 + end, + + is_const = function(self) + return eolian.eolian_type_is_const(self) ~= 0 + end, + + c_type_named_get = function(self, name) + local v = eolian.eolian_type_c_type_named_get(self, name) + if v == nil then return v end + return ffi.string(v) + end, + + c_type_get = function(self) + local v = eolian.eolian_type_c_type_get(self) + if v == nil then return v end + return ffi.string(v) + end, + + name_get = function(self) + local v = eolian.eolian_type_name_get(self) + if v == nil then return v end + return ffi.string(v) end } }) @@ -218,34 +329,28 @@ M.Function = ffi.metatype("Eolian_Function", { end, property_keys_list_get = function(self) - return Ptr_List("Eolian_Function_Parameter*", + return Ptr_List("const Eolian_Function_Parameter*", eolian.eolian_property_keys_list_get(self)):to_array() end, property_values_list_get = function(self) - return Ptr_List("Eolian_Function_Parameter*", + return Ptr_List("const Eolian_Function_Parameter*", eolian.eolian_property_values_list_get(self)):to_array() end, parameters_list_get = function(self) - return Ptr_List("Eolian_Function_Parameter*", + return Ptr_List("const Eolian_Function_Parameter*", eolian.eolian_parameters_list_get(self)):to_array() end, return_type_get = function(self, ftype) local v = eolian.eolian_function_return_type_get(self, ftype) if v == nil then return nil end - return ffi.string(v) - end, - - return_types_list_get = function(self, ftype) - local v = eolian.eolian_function_return_types_list_get(self, ftype) - if v == nil then return nil end return v end, - return_dflt_value_get = function(self, ftype) - local v = eolian.eolian_function_return_dflt_value_get(self, ftype) + return_default_value_get = function(self, ftype) + local v = eolian.eolian_function_return_default_value_get(self, ftype) if v == nil then return nil end return ffi.string(v) end, @@ -277,11 +382,11 @@ ffi.metatype("Eolian_Function_Parameter", { __index = { information_get = function(self) local dir = ffi.new("Eolian_Parameter_Dir[1]") - local str = ffi.new("const char*[3]") - eolian.eolian_parameter_information_get(self, dir, str, str + 1, - str + 2) - local tp, nm, dsc = str[0], str[1], str[2] - tp, nm, dsc = (tp ~= nil) and ffi.string(tp ) or nil, + local str = ffi.new("const char*[2]") + local tp = ffi.new("const Eolian_Type*[1]") + eolian.eolian_parameter_information_get(self, dir, tp, str, str + 1) + local tp, nm, dsc = tp[0], str[0], str[1] + tp, nm, dsc = (tp ~= nil) and tp or nil, (nm ~= nil) and ffi.string(nm ) or nil, (dsc ~= nil) and ffi.string(dsc) or nil return dir[0], tp, nm, dsc @@ -290,12 +395,6 @@ ffi.metatype("Eolian_Function_Parameter", { type_get = function(self) local v = eolian.eolian_parameter_type_get(self) if v == nil then return nil end - return ffi.string(v) - end, - - types_list_get = function(self) - local v = eolian.eolian_parameter_types_list_get(self) - if v == nil then return nil end return v end, @@ -336,11 +435,12 @@ ffi.metatype("Eolian_Implement", { ffi.metatype("Eolian_Event", { __index = { information_get = function(self) - local ev = ffi.new("const char*[3]") - eolian.eolian_class_event_information_get(self, ev, ev + 1, ev + 2) - local en, et, ed = ev[0], ev[1], ev[2] + local ev = ffi.new("const char*[2]") + local tp = ffi.new("const Eolian_Type*[1]"); + eolian.eolian_class_event_information_get(self, ev, tp, ev + 1) + local en, et, ed = ev[0], tp[0], ev[1] en, et, ed = (en ~= nil) and ffi.string(en) or nil, - (et ~= nil) and ffi.string(et) or nil, + (et ~= nil) and et or nil, (ed ~= nil) and ffi.string(ed) or nil return en, et, ed end @@ -359,8 +459,9 @@ M.class_find_by_file = function(fname) return v end -M.class_names_list_get = function() - return list.String_List(eolian.eolian_class_names_list_get()):to_array() +M.all_classes_list_get = function() + return Ptr_List("const Eolian_Class*", + eolian.eolain_all_classes_list_get()):to_array() end M.class_type = { @@ -434,7 +535,7 @@ M.Class = ffi.metatype("Eolian_Class", { end, functions_list_get = function(self, func_type) - return Ptr_List("Eolian_Function*", + return Ptr_List("const Eolian_Function*", eolian.eolian_class_functions_list_get(self, func_type)) :to_array() end, @@ -447,12 +548,12 @@ M.Class = ffi.metatype("Eolian_Class", { end, implements_list_get = function(self) - return Ptr_List("Eolian_Implement*", + return Ptr_List("const Eolian_Implement*", eolian.eolian_class_implements_list_get(self)):to_array() end, events_list_get = function(self) - return Ptr_List("Eolian_Event*", + return Ptr_List("const Eolian_Event*", eolian.eolian_class_events_list_get(self)):to_array() end, @@ -467,7 +568,15 @@ M.Class = ffi.metatype("Eolian_Class", { }) M.type_find_by_alias = function(alias) - return eolian.eolian_type_find_by_alias(alias) + local v = eolian.eolian_type_find_by_alias(alias) + if v == nil then return nil end + return v +end + +M.type_struct_find_by_name = function(name) + local v = eolian.eolian_type_struct_find_by_name(name) + if v == nil then return nil end + return v end return M --
