zmike pushed a commit to branch efl-1.22. http://git.enlightenment.org/core/efl.git/commit/?id=5f7be6a3e589ffb3f832ab6fb2447e49889af5d8
commit 5f7be6a3e589ffb3f832ab6fb2447e49889af5d8 Author: Daniel Kolesa <d.kol...@samsung.com> Date: Fri Apr 12 15:48:36 2019 +0200 elua: add all missing eolian api bindings --- src/bindings/luajit/eolian.lua | 140 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index 4d17e4790d..0b99715ed9 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua @@ -17,6 +17,7 @@ ffi.cdef [[ typedef struct _Eolian_Object Eolian_Object; typedef struct _Eolian_Class Eolian_Class; typedef struct _Eolian_Function Eolian_Function; + typedef struct _Eolian_Part Eolian_Part; typedef struct _Eolian_Type Eolian_Type; typedef struct _Eolian_Typedecl Eolian_Typedecl; typedef struct _Eolian_Function_Parameter Eolian_Function_Parameter; @@ -31,6 +32,9 @@ ffi.cdef [[ typedef struct _Eolian_Value Eolian_Value; typedef struct _Eolian_Unit Eolian_Unit; + typedef void (*Eolian_Panic_Cb)(const Eolian_State *state, const char *msg); + typedef void (*Eolian_Error_Cb)(const Eolian_Object *obj, const char *msg, void *data); + typedef enum { EOLIAN_OBJECT_UNKNOWN = 0, EOLIAN_OBJECT_CLASS, @@ -288,7 +292,11 @@ ffi.cdef [[ int eolian_shutdown(void); Eolian_State *eolian_state_new(void); void eolian_state_free(Eolian_State *state); + Eolian_Panic_Cb eolian_state_panic_cb_set(Eolian_State *state, Eolian_Panic_Cb cb); + Eolian_Error_Cb eolian_state_error_cb_set(Eolian_State *state, Eolian_Error_Cb cb); + void *eolian_state_error_data_set(Eolian_State *state, void *data); Eolian_Object_Type eolian_object_type_get(const Eolian_Object *obj); + const Eolian_Unit *eolian_object_unit_get(const Eolian_Object *obj); const char *eolian_object_file_get(const Eolian_Object *obj); int eolian_object_line_get(const Eolian_Object *obj); int eolian_object_column_get(const Eolian_Object *obj); @@ -309,8 +317,10 @@ ffi.cdef [[ const Eolian_Unit *eolian_state_unit_by_file_get(const Eolian_State *state, const char *file_name); Eina_Iterator *eolian_state_units_get(const Eolian_State *state); + const Eolian_State *eolian_unit_state_get(const Eolian_Unit *unit); Eina_Iterator *eolian_unit_children_get(const Eolian_Unit *unit); const char *eolian_unit_file_get(const Eolian_Unit *unit); + const char *eolian_unit_file_path_get(const Eolian_Unit *unit); const Eolian_Object *eolian_unit_object_by_name_get(const Eolian_Unit *unit, const char *name); Eina_Iterator *eolian_unit_objects_get(const Eolian_Unit *unit); const Eolian_Class *eolian_unit_class_by_name_get(const Eolian_Unit *unit, const char *class_name); @@ -336,8 +346,10 @@ ffi.cdef [[ Eolian_Class_Type eolian_class_type_get(const Eolian_Class *klass); const Eolian_Documentation *eolian_class_documentation_get(const Eolian_Class *klass); const char *eolian_class_eo_prefix_get(const Eolian_Class *klass); + const char *eolian_class_event_prefix_get(const Eolian_Class *klass); const char *eolian_class_data_type_get(const Eolian_Class *klass); const Eolian_Class *eolian_class_parent_get(const Eolian_Class *klass); + Eina_Iterator *eolian_class_requires_get(const Eolian_Class *klass); Eina_Iterator *eolian_class_extensions_get(const Eolian_Class *klass); Eina_Iterator *eolian_class_functions_get(const Eolian_Class *klass, Eolian_Function_Type func_type); Eolian_Function_Type eolian_function_type_get(const Eolian_Function *function_id); @@ -363,6 +375,7 @@ ffi.cdef [[ const Eolian_Documentation *eolian_function_return_documentation_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 Eolian_Class *eolian_function_class_get(const Eolian_Function *function_id); const Eolian_Class *eolian_implement_class_get(const Eolian_Implement *impl); const Eolian_Class *eolian_implement_implementing_class_get(const Eolian_Implement *impl); const Eolian_Function *eolian_implement_function_get(const Eolian_Implement *impl, Eolian_Function_Type *func_type); @@ -376,6 +389,7 @@ ffi.cdef [[ const Eolian_Class *eolian_constructor_class_get(const Eolian_Constructor *ctor); const Eolian_Function *eolian_constructor_function_get(const Eolian_Constructor *ctor); Eina_Bool eolian_constructor_is_optional(const Eolian_Constructor *ctor); + Eina_Bool eolian_constructor_is_ctor_param(const Eolian_Constructor *ctor); Eina_Iterator *eolian_class_constructors_get(const Eolian_Class *klass); Eina_Iterator *eolian_class_events_get(const Eolian_Class *klass); const Eolian_Type *eolian_event_type_get(const Eolian_Event *event); @@ -384,12 +398,18 @@ ffi.cdef [[ Eolian_Object_Scope eolian_event_scope_get(const Eolian_Event *event); Eina_Bool eolian_event_is_hot(const Eolian_Event *event); Eina_Bool eolian_event_is_restart(const Eolian_Event *event); + Eina_Iterator *eolian_class_parts_get(const Eolian_Class *klass); const char *eolian_event_c_name_get(const Eolian_Event *event); + const Eolian_Class *eolian_part_class_get(const Eolian_Part *part); + const Eolian_Documentation *eolian_part_documentation_get(const Eolian_Part *part); + const Eolian_Event *eolian_class_event_by_name_get(const Eolian_Class *klass, const char *event_name); Eina_Bool eolian_class_ctor_enable_get(const Eolian_Class *klass); Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass); const char *eolian_class_c_get_function_name_get(const Eolian_Class *klass); Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp); Eolian_Type_Builtin_Type eolian_type_builtin_type_get(const Eolian_Type *tp); + const char *eolian_class_c_name_get(const Eolian_Class *klass); + const char *eolian_class_c_data_type_get(const Eolian_Class *klass); Eolian_Typedecl_Type eolian_typedecl_type_get(const Eolian_Typedecl *tp); Eina_Iterator *eolian_typedecl_struct_fields_get(const Eolian_Typedecl *tp); const Eolian_Struct_Type_Field *eolian_typedecl_struct_field_get(const Eolian_Typedecl *tp, const char *field); @@ -534,6 +554,14 @@ local object_idx, wrap_object = gen_wrap { return tonumber(eolian.eolian_object_type_get(cast_obj(self))) end, + unit_get = function(self) + local v = eolian.eolian_object_unit_get(cast_obj(self)) + if v == nil then + return nil + end + return v + end, + line_get = function(self) return tonumber(eolian.eolian_object_line_get(cast_obj(self))) end, @@ -579,6 +607,12 @@ local object_idx, wrap_object = gen_wrap { ffi.metatype("Eolian_Object", { __index = object_idx }) local unit_idx, wrap_unit = gen_wrap { + state_get = function(self) + local v = eolian.eolian_unit_state_get(cast_unit(self)) + if v == nil then return nil end + return v + end, + children_get = function(self) return Ptr_Iterator("const Eolian_Unit*", eolian.eolian_unit_children_get(cast_unit(self))) @@ -590,6 +624,12 @@ local unit_idx, wrap_unit = gen_wrap { return ffi.string(v) end, + file_path_get = function(self) + local v = eolian.eolian_unit_file_path_get(cast_unit(self)) + if v == nil then return nil end + return ffi.string(v) + end, + object_by_name_get = function(self, name) local v = eolian.eolian_unit_object_by_name_get(cast_unit(self), name) if v == nil then return nil end @@ -670,8 +710,43 @@ local unit_idx, wrap_unit = gen_wrap { ffi.metatype("Eolian_Unit", { __index = unit_idx }) +local panic_cbs = {} +local error_cbs = {} + +local obj_to_idx = function(obj) + return tonumber(ffi.cast("size_t", obj)) +end + +local panic_cb, err_cb + +panic_cb = ffi.gc(ffi.cast("Eolian_Panic_Cb", function(state, msg) + local pcb = panic_cbs[obj_to_idx(self)] + assert(pcb, "internal error: no prror cb") + pcb(state, ffi.string(msg)) +end), function(cb) + cb:free() +end) + +err_cb = ffi.gc(ffi.cast("Eolian_Panic_Cb", function(obj, msg, data) + local ecb = error_cbs[obj_to_idx(self)] + assert(ecb, "internal error: no error cb") + ecb(obj, ffi.string(msg)) +end), function(cb) + cb:free() +end) + ffi.metatype("Eolian_State", { __index = wrap_unit { + panic_cb_set = function(self, cb) + panic_cbs[obj_to_idx(self)] = cb + eolian.eolian_state_panic_cb_set(self, panic_cb) + end, + + error_cb_set = function(self, cb) + error_cbs[obj_to_idx(self)] = cb + eolian.eolian_state_error_cb_set(self, err_cb) + end, + directory_add = function(self, dir) return eolian.eolian_state_directory_add(self, dir) ~= 0 end, @@ -770,6 +845,9 @@ ffi.metatype("Eolian_State", { end }, __gc = function(self) + local idx = obj_to_idx(self) + panic_cbs[idx] = nil + error_cbs[idx] = nil eolian.eolian_state_free(self) end }) @@ -1127,6 +1205,12 @@ M.Function = ffi.metatype("Eolian_Function", { is_const = function(self) return eolian.eolian_function_object_is_const(self) ~= 0 + end, + + class_get = function(self) + local v = eolian.eolian_function_class_get(self) + if v == nil then return nil end + return v end } }) @@ -1241,6 +1325,10 @@ ffi.metatype("Eolian_Constructor", { is_optional = function(self) return eolian.eolian_constructor_is_optional(self) ~= 0 + end, + + is_ctor_param = function(self) + return eolian.eolian_constructor_is_ctor_param(self) ~= 0 end } }) @@ -1285,6 +1373,22 @@ ffi.metatype("Eolian_Event", { } }) +ffi.metatype("Eolian_Part", { + __index = wrap_object { + class_get = function(self) + local v = eolian.eolian_part_class_get(self) + if v == nil then return nil end + return v + end, + + documentation_get = function(self) + local v = eolian.eolian_part_documentation_get(self) + if v == nil then return nil end + return v + end + } +}) + M.class_type = { UNKNOWN = 0, REGULAR = 1, @@ -1315,6 +1419,14 @@ M.Class = ffi.metatype("Eolian_Class", { return ffi.string(v) end, + event_prefix_get = function(self) + local v = eolian.eolian_class_event_prefix_get(self) + if v == nil then + return self:eo_prefix_get() + end + return ffi.string(v) + end, + data_type_get = function(self) local v = eolian.eolian_class_data_type_get(self) if v == nil then return nil end @@ -1332,6 +1444,11 @@ M.Class = ffi.metatype("Eolian_Class", { eolian.eolian_class_extensions_get(self)) end, + requires_get = function(self) + return Ptr_Iterator("const Eolian_Class*", + eolian.eolian_class_requires_get(self)) + end, + functions_get = function(self, func_type) return Ptr_Iterator("const Eolian_Function*", eolian.eolian_class_functions_get(self, func_type)) @@ -1359,6 +1476,17 @@ M.Class = ffi.metatype("Eolian_Class", { eolian.eolian_class_events_get(self)) end, + event_by_name_get = function(self, name) + local v = eolian.eolian_class_event_by_name_get(self, name) + if v == nil then return nil end + return v + end, + + parts_get = function(self) + return Ptr_Iterator("const Eolian_Part*", + eolian.eolian_class_parts_get(self)) + end, + ctor_enable_get = function(self) return eolian.eolian_class_ctor_enable_get(self) ~= 0 end, @@ -1371,6 +1499,18 @@ M.Class = ffi.metatype("Eolian_Class", { local v = eolian.eolian_class_c_get_function_name_get(self) if v == nil then return nil end return ffi_stringshare(v) + end, + + c_name_get = function(self) + local v = eolian.eolian_class_c_name_get(self) + if v == nil then return nil end + return ffi_stringshare(v) + end, + + c_data_type_get = function(self) + local v = eolian.eolian_class_c_data_type_get(self) + if v == nil then return nil end + return ffi_stringshare(v) end } }) --