local bit = require("bit")
ffi.cdef [[
+ void eina_stringshare_del(const char *str);
+]]
+
+ffi.cdef [[
typedef unsigned char Eina_Bool;
typedef struct _Eina_Iterator Eina_Iterator;
local M = {}
local eolian
+local eina
local init = function()
eolian = util.lib_load("eolian")
+ eina = util.lib_load("eina")
eolian.eolian_init()
end
local shutdown = function()
eolian.eolian_shutdown()
util.lib_unload("eolian")
+ util.lib_unload("eina")
+end
+
+local ffi_stringshare = function(s)
+ local r = ffi.string(s)
+ eina.eina_stringshare_del(s)
+ return r
end
cutil.init_module(init, shutdown)
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)
+ return ffi_stringshare(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)
+ return ffi_stringshare(v)
end,
name_get = function(self)
full_c_name_get = function(self, prefix)
local v = eolian.eolian_function_full_c_name_get(self, prefix)
if v == nil then return nil end
- return ffi.string(v)
+ return ffi_stringshare(v)
end,
legacy_get = function(self, ftype)
to_literal = function(self)
local v = eolian.eolian_expression_value_to_literal(self)
if v == nil then return nil end
- return ffi.string(v)
+ return ffi_stringshare(v)
end
}
})
serialize = function(self)
local v = eolian.eolian_expression_serialize(self)
if v == nil then return nil end
- return ffi.string(v)
+ return ffi_stringshare(v)
end
}
})
fail_if(strcmp(name, "clicked,double"));
type_name = eolian_type_name_get(type);
fail_if(strcmp(type_name, "Evas_Event_Clicked_Double_Info"));
- eina_stringshare_del(type_name);
fail_if(eina_iterator_next(iter, &dummy));
eina_iterator_free(iter);
fail_if(eolian_type_type_get(atype) != EOLIAN_TYPE_ALIAS);
fail_if(!(type_name = eolian_type_name_get(atype)));
fail_if(strcmp(type_name, "Coord"));
- eina_stringshare_del(type_name);
fail_if(!(type_name = eolian_type_c_type_get(atype)));
fail_if(strcmp(type_name, "typedef int Evas_Coord"));
eina_stringshare_del(type_name);
fail_if(eolian_type_is_const(type));
fail_if(eolian_type_base_type_get(type));
fail_if(strcmp(type_name, "int"));
- eina_stringshare_del(type_name);
/* File */
fail_if(!(file = eolian_type_file_get(atype)));
fail_if(strcmp(file, "typedef.eo"));
- eina_stringshare_del(file);
/* Complex type */
fail_if(!(atype = eolian_type_alias_get_by_name("List_Objects")));
fail_if(!(type_name = eolian_type_name_get(atype)));
fail_if(strcmp(type_name, "List_Objects"));
- eina_stringshare_del(type_name);
fail_if(!(type = eolian_type_base_type_get(atype)));
fail_if(!(type_name = eolian_type_c_type_get(type)));
fail_if(!eolian_type_is_own(type));
fail_if(!eina_iterator_next(iter, (void**)&atype));
fail_if(!(type_name = eolian_type_name_get(atype)));
fail_if(strcmp(type_name, "Coord"));
- eina_stringshare_del(type_name);
fail_if(!eina_iterator_next(iter, (void**)&atype));
fail_if(!(type_name = eolian_type_name_get(atype)));
fail_if(strcmp(type_name, "List_Objects"));
- eina_stringshare_del(type_name);
fail_if(eina_iterator_next(iter, (void**)&atype));
eolian_shutdown();
fail_if(eolian_parameter_direction_get(param) != EOLIAN_INOUT_PARAM);
ptype = eolian_type_name_get(eolian_parameter_type_get(param));
fail_if(strcmp(ptype, "char"));
- eina_stringshare_del(ptype);
fail_if(strcmp(eolian_parameter_name_get(param), "b"));
fail_if(eolian_parameter_description_get(param));
fail_if(!(eina_iterator_next(iter, (void**)¶m)));
fail_if(eolian_type_is_own(type));
fail_if(eolian_type_is_const(type));
fail_if(strcmp(type_name, "Named"));
- eina_stringshare_del(type_name);
fail_if(strcmp(file, "struct.eo"));
- eina_stringshare_del(file);
fail_if(!(field = eolian_type_struct_field_get(type, "field")));
fail_if(!(type_name = eolian_type_name_get(field)));
fail_if(strcmp(type_name, "int"));
- eina_stringshare_del(type_name);
fail_if(!(field = eolian_type_struct_field_get(type, "something")));
fail_if(!(type_name = eolian_type_c_type_get(field)));
fail_if(strcmp(type_name, "const char *"));
fail_if(!(file = eolian_type_file_get(type)));
fail_if(eolian_type_type_get(type) != EOLIAN_TYPE_STRUCT);
fail_if(strcmp(type_name, "Another"));
- eina_stringshare_del(type_name);
fail_if(strcmp(file, "struct.eo"));
- eina_stringshare_del(file);
fail_if(!(field = eolian_type_struct_field_get(type, "field")));
fail_if(!(type_name = eolian_type_name_get(field)));
fail_if(strcmp(type_name, "Named"));
- eina_stringshare_del(type_name);
fail_if(eolian_type_type_get(field) != EOLIAN_TYPE_REGULAR_STRUCT);
/* typedef */
fail_if(!(type_name = eolian_type_name_get(type)));
fail_if(eolian_type_type_get(type) != EOLIAN_TYPE_STRUCT);
fail_if(strcmp(type_name, "_Foo"));
- eina_stringshare_del(type_name);
/* typedef - anon */
fail_if(!(atype = eolian_type_alias_get_by_name("Bar")));
fail_if(!(type = eolian_variable_base_type_get(var)));
fail_if(!(name = eolian_type_name_get(type)));
fail_if(strcmp(name, "int"));
- eina_stringshare_del(name);
fail_if(!(exp = eolian_variable_value_get(var)));
v = eolian_expression_eval_type(exp, type);
fail_if(v.type != EOLIAN_EXPR_INT);
fail_if(!(type = eolian_variable_base_type_get(var)));
fail_if(!(name = eolian_type_name_get(type)));
fail_if(strcmp(name, "float"));
- eina_stringshare_del(name);
fail_if(!(exp = eolian_variable_value_get(var)));
v = eolian_expression_eval_type(exp, type);
fail_if(v.type != EOLIAN_EXPR_FLOAT);
fail_if(!(type = eolian_variable_base_type_get(var)));
fail_if(!(name = eolian_type_name_get(type)));
fail_if(strcmp(name, "long"));
- eina_stringshare_del(name);
fail_if(eolian_variable_value_get(var));
/* extern global */
fail_if(!(type = eolian_variable_base_type_get(var)));
fail_if(!(name = eolian_type_name_get(type)));
fail_if(strcmp(name, "double"));
- eina_stringshare_del(name);
fail_if(eolian_variable_value_get(var));
eolian_shutdown();
fail_if(!(type = eolian_variable_base_type_get(var)));
fail_if(!(name = eolian_type_name_get(type)));
fail_if(strcmp(name, "int"));
- eina_stringshare_del(name);
fail_if(!(exp = eolian_variable_value_get(var)));
v = eolian_expression_eval(exp, EOLIAN_MASK_ALL);
fail_if(v.type != EOLIAN_EXPR_INT);