local Mixin = Node:clone {
__ctor = function(self, klass, iface, ch, evs)
self.klass = klass
- self.prefix = klass:eo_prefix_get()
self.children = ch
self.events = evs
self.is_iface = iface
end,
gen_ffi = function(self, s)
- local prefix = self.is_iface and "interface" or "mixin"
- s:write(" const Eo_Class *", self.prefix, "_", prefix,
- "_get(void);\n")
+ s:write(" const Eo_Class *", self.klass:c_get_function_name_get(),
+ "(void);\n")
for i, v in ipairs(self.children) do
v.parent_node = self
v:gen_ffi(s)
self.parent = parent
self.interfaces = interfaces
self.mixins = mixins
- self.prefix = klass:eo_prefix_get()
self.children = ch
self.events = evs
end,
const char *eolian_event_c_name_get(const Eolian_Event *event);
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);
const Eolian_Type *eolian_type_alias_get_by_name(const char *name);
const Eolian_Type *eolian_type_struct_get_by_name(const char *name);
const Eolian_Type *eolian_type_enum_get_by_name(const char *name);
dtor_enable_get = function(self)
return eolian.eolian_class_dtor_enable_get(self) ~= 0
+ end,
+
+ c_get_function_name_get = function(self)
+ local v = eolian.eolian_class_c_get_function_name_get(self)
+ if v == nil then return nil end
+ return ffi_stringshare(v)
end
}
})
EAPI Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
/*
+ * @brief Returns the name of the C function used to get the Eo_Class pointer.
+ *
+ * @param[in] klass the class.
+ * @return a stringshare containing the func name or NULL on error.
+ *
+ * You have to delete the stringshare manually.
+ *
+ * @ingroup Eolian
+ */
+EAPI Eina_Stringshare *eolian_class_c_get_function_name_get(const Eolian_Class *klass);
+
+/*
* @brief Get an alias type by name. Supports namespaces.
*
* @param[in] name the name of the alias
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
return cl->class_dtor_enable;
}
+
+EAPI Eina_Stringshare *
+eolian_class_c_get_function_name_get(const Eolian_Class *cl)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
+ Eina_Stringshare *ret;
+ Eina_Strbuf *buf = eina_strbuf_new();
+ char *bufp;
+ eina_strbuf_append(buf, cl->full_name);
+ switch (cl->type)
+ {
+ case EOLIAN_CLASS_INTERFACE:
+ eina_strbuf_append(buf, "_interface_get");
+ break;
+ case EOLIAN_CLASS_MIXIN:
+ eina_strbuf_append(buf, "_mixin_get");
+ break;
+ default:
+ eina_strbuf_append(buf, "_class_get");
+ break;
+ }
+ eina_strbuf_replace_all(buf, ".", "_");
+ bufp = eina_strbuf_string_steal(buf);
+ eina_str_tolower(&bufp);
+ ret = eina_stringshare_add(bufp);
+ free(bufp);
+ return ret;
+}