eolian: add typedecl delete func and init hashes correctly
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Tue, 15 Dec 2015 16:01:02 +0000 (16:01 +0000)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 3 Mar 2016 18:58:11 +0000 (18:58 +0000)
src/lib/eolian/Eolian.h
src/lib/eolian/database_type.c
src/lib/eolian/eolian_database.c
src/lib/eolian/eolian_database.h

index 0acdf81..f88dd45 100644 (file)
@@ -105,6 +105,12 @@ typedef struct _Eolian_Function Eolian_Function;
  */
 typedef struct _Eolian_Type Eolian_Type;
 
+/* Type declaration.
+ *
+ * @ingroup Eolian
+ */
+typedef struct _Eolian_Typedecl Eolian_Typedecl;
+
 /* Class function parameter information
  *
  * @ingroup Eolian
index 787cc3d..e809858 100644 (file)
@@ -14,8 +14,7 @@ database_type_del(Eolian_Type *tp)
    if (tp->base.file) eina_stringshare_del(tp->base.file);
    if (tp->subtypes) EINA_LIST_FREE(tp->subtypes, stp)
      database_type_del(stp);
-   if (tp->base_type)
-     database_type_del(tp->base_type);
+   database_type_del(tp->base_type);
    if (tp->name) eina_stringshare_del(tp->name);
    if (tp->full_name) eina_stringshare_del(tp->full_name);
    if (tp->fields) eina_hash_free(tp->fields);
@@ -29,6 +28,24 @@ database_type_del(Eolian_Type *tp)
 }
 
 void
+database_typedecl_del(Eolian_Typedecl *tp)
+{
+   if (!tp) return;
+   const char *sp;
+   if (tp->base.file) eina_stringshare_del(tp->base.file);
+   database_type_del(tp->base_type);
+   if (tp->name) eina_stringshare_del(tp->name);
+   if (tp->full_name) eina_stringshare_del(tp->full_name);
+   if (tp->fields) eina_hash_free(tp->fields);
+   if (tp->field_list) eina_list_free(tp->field_list);
+   if (tp->namespaces) EINA_LIST_FREE(tp->namespaces, sp)
+     eina_stringshare_del(sp);
+   if (tp->legacy) eina_stringshare_del(tp->legacy);
+   database_doc_del(tp->doc);
+   free(tp);
+}
+
+void
 database_typedef_del(Eolian_Type *tp)
 {
    if (!tp) return;
index b6da857..c2caac4 100644 (file)
@@ -47,8 +47,11 @@ database_init()
    eina_init();
    _classes    = eina_hash_stringshared_new(EINA_FREE_CB(database_class_del));
    _aliases    = eina_hash_stringshared_new(EINA_FREE_CB(database_typedef_del));
+   _aliasesd   = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
    _structs    = eina_hash_stringshared_new(EINA_FREE_CB(database_type_del));
+   _structsd   = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
    _enums      = eina_hash_stringshared_new(EINA_FREE_CB(database_type_del));
+   _enumsd     = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
    _globals    = eina_hash_stringshared_new(EINA_FREE_CB(database_var_del));
    _constants  = eina_hash_stringshared_new(EINA_FREE_CB(database_var_del));
    _classesf   = eina_hash_stringshared_new(NULL);
index f06949d..ac06cc2 100644 (file)
@@ -187,6 +187,7 @@ struct _Eolian_Typedecl
 {
    Eolian_Object base;
    Eolian_Typedecl_Type type;
+   Eolian_Type      *base_type;
    Eina_Stringshare *name;
    Eina_Stringshare *full_name;
    Eina_List        *namespaces;
@@ -304,6 +305,8 @@ void database_enum_add(Eolian_Type *tp);
 void database_type_del(Eolian_Type *tp);
 void database_typedef_del(Eolian_Type *tp);
 
+void database_typedecl_del(Eolian_Typedecl *tp);
+
 void database_type_print(Eolian_Type *type);
 void database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name);