q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=38223ed693b8ab1f48d6fc0180056bbe3f608a32

commit 38223ed693b8ab1f48d6fc0180056bbe3f608a32
Author: Daniel Kolesa <[email protected]>
Date:   Wed Jul 3 14:45:02 2019 +0200

    eolian_gen: remove reliance on builtin freefuncs
---
 src/bin/eolian/sources.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)

diff --git a/src/bin/eolian/sources.c b/src/bin/eolian/sources.c
index d729b63283..d060eed811 100644
--- a/src/bin/eolian/sources.c
+++ b/src/bin/eolian/sources.c
@@ -150,10 +150,50 @@ _append_defval(Eina_Strbuf *buf, const Eolian_Expression 
*exp, const Eolian_Type
    eina_strbuf_append(buf, "0");
 }
 
+static const char *
+_free_func_get(const Eolian_Type *type)
+{
+   const Eolian_Type *ab = eolian_type_aliased_base_get(type);
+   switch (eolian_type_builtin_type_get(ab))
+     {
+      /* simple types */
+      case EOLIAN_TYPE_BUILTIN_MSTRING:
+        return "free";
+      case EOLIAN_TYPE_BUILTIN_STRINGSHARE:
+        return "eina_stringshare_del";
+      case EOLIAN_TYPE_BUILTIN_ANY_VALUE:
+        return "eina_value_flush";
+      case EOLIAN_TYPE_BUILTIN_ANY_VALUE_PTR:
+        return "eina_value_free";
+      /* complex types */
+      case EOLIAN_TYPE_BUILTIN_ACCESSOR:
+        return "eina_accessor_free";
+      case EOLIAN_TYPE_BUILTIN_ARRAY:
+        return "eina_array_free";
+      case EOLIAN_TYPE_BUILTIN_FUTURE:
+        return "(void)";
+      case EOLIAN_TYPE_BUILTIN_ITERATOR:
+        return "eina_iterator_free";
+      case EOLIAN_TYPE_BUILTIN_HASH:
+        return "eina_hash_free";
+      case EOLIAN_TYPE_BUILTIN_LIST:
+        return "eina_list_free";
+      /* class and user types */
+      case EOLIAN_TYPE_BUILTIN_INVALID:
+        if (eolian_type_type_get(ab) == EOLIAN_TYPE_CLASS)
+          return "efl_del";
+        else
+          return eolian_type_free_func_get(ab);
+      /* no free func */
+      default:
+        return NULL;
+     }
+}
+
 static void
 _generate_normal_free(Eina_Strbuf **buf, const Eolian_Type *type, const 
Eina_Strbuf *parameter, const char *additional_intention)
 {
-   const char *free_func = eolian_type_free_func_get(type);
+   const char *free_func = _free_func_get(type);
    if (!free_func)
      {
         printf("No free type %s\n", eolian_type_short_name_get(type));
@@ -230,7 +270,7 @@ _generate_iterative_free(Eina_Strbuf **buf, const 
Eolian_Type *type, const Eolia
      {
         eina_strbuf_append_printf(*buf,"   eina_hash_free_cb_set(");
         eina_strbuf_append_buffer(*buf, param);
-        eina_strbuf_append_printf(*buf, 
",%s);\n",eolian_type_free_func_get(inner_type));
+        eina_strbuf_append_printf(*buf, ",%s);\n",_free_func_get(inner_type));
         eina_strbuf_append_printf(*buf,"   eina_hash_free(");
         eina_strbuf_append_buffer(*buf, param);
         eina_strbuf_append(*buf, ");\n");

-- 


Reply via email to