diff --git a/src/bindings/luajit/eina/list.lua b/src/bindings/luajit/eina/list.lua index 694235a704..54343c9bed 100644 --- a/src/bindings/luajit/eina/list.lua +++ b/src/bindings/luajit/eina/list.lua @@ -277,14 +277,17 @@ local List_Base = util.Readonly_Object:clone { } M.List_Base = List_Base -M.gen_list_type = function(tp) - return List_Base:clone { - data_get = function(self, ptr) - ptr = List_Base.data_get(self, ptr) - return ffi.cast(tp, ptr) - end - } -end +M.Ptr_List = List_Base:clone { + __ctor = function(self, selfmt, ptrtype, list, freefunc) + List_Base.__ctor(self, selfmt, list, freefunc) + selfmt.ptrtype = ptrtype + end, + + data_get = function(self, ptr) + ptr = List_Base.data_get(self, ptr) + return ffi.cast(dgetmt(self).ptrtype, ptr) + end +} M.String_List = List_Base:clone { data_get = function(self, ptr) diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index ebf4854cbb..5b0e66e85e 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua @@ -104,6 +104,8 @@ local util = require("util") local list = require("eina.list") +local Ptr_List = list.Ptr_List + local M = {} local eolian @@ -162,8 +164,6 @@ M.function_scope = { PROTECTED = 1 } -local Eolian_Parameters_List = list.gen_list_type("Eolian_Function_Parameter*") - M.Function = ffi.metatype("Eolian_Function", { __index = { type_get = function(self) @@ -201,17 +201,17 @@ M.Function = ffi.metatype("Eolian_Function", { end, property_keys_list_get = function(self) - return Eolian_Parameters_List( + return Ptr_List("Eolian_Function_Parameter*", eolian.eolian_property_keys_list_get(self)):to_array() end, property_values_list_get = function(self) - return Eolian_Parameters_List( + return Ptr_List("Eolian_Function_Parameter*", eolian.eolian_property_values_list_get(self)):to_array() end, parameters_list_get = function(self) - return Eolian_Parameters_List( + return Ptr_List("Eolian_Function_Parameter*", eolian.eolian_parameters_list_get(self)):to_array() end, @@ -354,10 +354,6 @@ M.class_type = { INTERFACE = 4 } -local Eolian_Functions_List = list.gen_list_type("Eolian_Function*") -local Eolian_Implements_List = list.gen_list_type("Eolian_Implement*") -local Eolian_Events_List = list.gen_list_type("Eolian_Event*") - M.Class = ffi.metatype("Eolian_Class", { __index = { file_get = function(self) @@ -417,7 +413,7 @@ M.Class = ffi.metatype("Eolian_Class", { end, functions_list_get = function(self, func_type) - return Eolian_Functions_List( + return Ptr_List("Eolian_Function*", eolian.eolian_class_functions_list_get(self, func_type)) :to_array() end, @@ -430,12 +426,12 @@ M.Class = ffi.metatype("Eolian_Class", { end, implements_list_get = function(self) - return Eolian_Implements_List( + return Ptr_List("Eolian_Implement*", eolian.eolian_class_implements_list_get(self)):to_array() end, events_list_get = function(self) - return Eolian_Events_List( + return Ptr_List("Eolian_Event*", eolian.eolian_class_events_list_get(self)):to_array() end,