q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=239e7524dc30093466ee7a6c276ac9fe9c1e4d40

commit 239e7524dc30093466ee7a6c276ac9fe9c1e4d40
Author: Daniel Kolesa <[email protected]>
Date:   Thu Jul 10 15:23:06 2014 +0100

    eolian: refactoring: get rid of Eo_Implement_Def
---
 src/lib/eolian/database_implement.c | 11 +++++------
 src/lib/eolian/eo_definitions.c     | 15 +++------------
 src/lib/eolian/eo_definitions.h     |  9 +--------
 src/lib/eolian/eo_parser.c          | 22 +++++++++++-----------
 src/lib/eolian/eolian_database.h    |  2 +-
 5 files changed, 21 insertions(+), 38 deletions(-)

diff --git a/src/lib/eolian/database_implement.c 
b/src/lib/eolian/database_implement.c
index be6b5f5..68be154 100644
--- a/src/lib/eolian/database_implement.c
+++ b/src/lib/eolian/database_implement.c
@@ -1,11 +1,10 @@
 #include <Eina.h>
 #include "eolian_database.h"
 
-Eolian_Implement *
-database_implement_new(const char *impl_name)
+void
+database_implement_del(Eolian_Implement *impl)
 {
-   Eolian_Implement *impl_desc = calloc(1, sizeof(Eolian_Implement));
-   EINA_SAFETY_ON_NULL_RETURN_VAL(impl_desc, NULL);
-   impl_desc->full_name = eina_stringshare_add(impl_name);
-   return impl_desc;
+   if (!impl) return;
+   if (impl->full_name) eina_stringshare_del(impl->full_name);
+   free(impl);
 }
diff --git a/src/lib/eolian/eo_definitions.c b/src/lib/eolian/eo_definitions.c
index 4bcec97..a4e0b30 100644
--- a/src/lib/eolian/eo_definitions.c
+++ b/src/lib/eolian/eo_definitions.c
@@ -102,15 +102,6 @@ eo_definitions_event_def_free(Eo_Event_Def *sgn)
    free(sgn);
 }
 
-static void
-eo_definitions_impl_def_free(Eo_Implement_Def *impl)
-{
-   if (impl->meth_name)
-     eina_stringshare_del(impl->meth_name);
-
-   free(impl);
-}
-
 void
 eo_definitions_class_def_free(Eo_Class_Def *kls)
 {
@@ -118,7 +109,7 @@ eo_definitions_class_def_free(Eo_Class_Def *kls)
    Eo_Property_Def *prop;
    Eo_Method_Def *meth;
    Eo_Event_Def *sgn;
-   Eo_Implement_Def *impl;
+   Eolian_Implement *impl;
 
    if (kls->name)
      eina_stringshare_del(kls->name);
@@ -135,7 +126,7 @@ eo_definitions_class_def_free(Eo_Class_Def *kls)
      if (s) eina_stringshare_del(s);
 
    EINA_LIST_FREE(kls->implements, impl)
-     eo_definitions_impl_def_free(impl);
+     database_implement_del(impl);
 
    EINA_LIST_FREE(kls->constructors, meth)
      eo_definitions_method_def_free(meth);
@@ -203,5 +194,5 @@ eo_definitions_temps_free(Eo_Lexer_Temps *tmp)
      eo_definitions_event_def_free(tmp->event);
 
    if (tmp->impl)
-     eo_definitions_impl_def_free(tmp->impl);
+     database_implement_del(tmp->impl);
 }
diff --git a/src/lib/eolian/eo_definitions.h b/src/lib/eolian/eo_definitions.h
index ce6c3a8..c27ae9f 100644
--- a/src/lib/eolian/eo_definitions.h
+++ b/src/lib/eolian/eo_definitions.h
@@ -99,13 +99,6 @@ typedef struct _Eo_Event_Def
    Eina_Stringshare *comment;
 } Eo_Event_Def;
 
-/* IMPLEMENT */
-
-typedef struct _Eo_Implement_Def
-{
-   Eina_Stringshare *meth_name;
-} Eo_Implement_Def;
-
 /* CLASS */
 
 typedef struct _Eo_Class_Def
@@ -142,7 +135,7 @@ typedef struct _Eo_Lexer_Temps
    Eo_Accessor_Param *accessor_param;
    Eina_List *str_items;
    Eo_Event_Def *event;
-   Eo_Implement_Def *impl;
+   Eolian_Implement *impl;
 } Eo_Lexer_Temps;
 
 void eo_definitions_class_def_free(Eo_Class_Def *kls);
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 1590d71..61f9129 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -705,9 +705,9 @@ static void
 parse_implement(Eo_Lexer *ls, Eina_Bool iface)
 {
    Eina_Strbuf *buf = NULL;
-   Eo_Implement_Def *impl = NULL;
+   Eolian_Implement *impl = NULL;
    buf = push_strbuf(ls);
-   impl = calloc(1, sizeof(Eo_Implement_Def));
+   impl = calloc(1, sizeof(Eolian_Implement));
    ls->tmp.impl = impl;
    if (iface)
      check_kw(ls, KW_class);
@@ -727,7 +727,7 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface)
              eina_strbuf_append(buf, "constructor");
           }
         check_next(ls, ';');
-        impl->meth_name = eina_stringshare_add(eina_strbuf_string_get(buf));
+        impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf));
         pop_strbuf(ls);
         return;
      }
@@ -755,7 +755,7 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface)
                }
           }
         check_next(ls, ';');
-        impl->meth_name = eina_stringshare_add(eina_strbuf_string_get(buf));
+        impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf));
         pop_strbuf(ls);
         return;
      }
@@ -790,7 +790,7 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface)
      }
 end:
    check_next(ls, ';');
-   impl->meth_name = eina_stringshare_add(eina_strbuf_string_get(buf));
+   impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf));
    pop_strbuf(ls);
 }
 
@@ -1070,7 +1070,7 @@ _dump_class(Eo_Class_Def *kls)
    Eo_Param_Def *param;
    Eo_Accessor_Def *accessor;
    Eo_Event_Def *sgn;
-   Eo_Implement_Def *impl;
+   Eolian_Implement *impl;
 
    printf("Class: %s (%s)\n",
           kls->name, (kls->comment ? kls->comment : "-"));
@@ -1080,7 +1080,7 @@ _dump_class(Eo_Class_Def *kls)
    printf("\n");
    printf("  implements:");
    EINA_LIST_FOREACH(kls->implements, l, impl)
-      printf(" %s", impl->meth_name);
+      printf(" %s", impl->full_name);
    printf("\n");
    printf("  events:\n");
    EINA_LIST_FOREACH(kls->events, l, sgn)
@@ -1208,7 +1208,7 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
    Eo_Param_Def *param;
    Eo_Accessor_Def *accessor;
    Eo_Event_Def *event;
-   Eo_Implement_Def *impl;
+   Eolian_Implement *impl;
 
    Eolian_Class *class = database_class_add(kls->name, kls->type);
    Eina_Bool is_iface = (kls->type == EOLIAN_CLASS_INTERFACE);
@@ -1345,7 +1345,7 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
 
    EINA_LIST_FOREACH(kls->implements, l, impl)
      {
-        const char *impl_name = impl->meth_name;
+        const char *impl_name = impl->full_name;
         if (!strcmp(impl_name, "class.constructor"))
           {
              database_class_ctor_enable_set(class, EINA_TRUE);
@@ -1382,8 +1382,8 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
              database_function_set_as_virtual_pure(foo_id, ftype);
              continue;
           }
-        Eolian_Implement *impl_desc = database_implement_new(impl_name);
-        database_class_implement_add(class, impl_desc);
+        database_class_implement_add(class, impl);
+        eina_list_data_set(l, NULL); /* prevent double free */
      }
 
    EINA_LIST_FOREACH(kls->events, l, event)
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h
index 5d32434..bd14647 100644
--- a/src/lib/eolian/eolian_database.h
+++ b/src/lib/eolian/eolian_database.h
@@ -211,7 +211,7 @@ void 
database_parameter_nonull_set(Eolian_Function_Parameter *param, Eina_Bool n
 
 /* implements */
 
-Eolian_Implement *database_implement_new(const char *impl_name);
+void database_implement_del(Eolian_Implement *impl);
 
 /* events */
 

-- 


Reply via email to