q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=6f9c8779c01b5308ed3c9d20b9ca0975976fe101

commit 6f9c8779c01b5308ed3c9d20b9ca0975976fe101
Author: Daniel Kolesa <[email protected]>
Date:   Mon Jul 21 13:56:20 2014 +0100

    eolian: initial code and struct layout for revamped alias API
---
 src/lib/eolian/Eolian.h          |  3 ++-
 src/lib/eolian/database_class.c  |  4 ++++
 src/lib/eolian/database_type.c   | 29 +++++++++++++++++------------
 src/lib/eolian/eolian_database.h | 15 ++++++++++-----
 4 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index 906ea15..46798c4 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -121,7 +121,8 @@ typedef enum
    EOLIAN_TYPE_REGULAR_STRUCT,
    EOLIAN_TYPE_POINTER,
    EOLIAN_TYPE_FUNCTION,
-   EOLIAN_TYPE_STRUCT
+   EOLIAN_TYPE_STRUCT,
+   EOLIAN_TYPE_ALIAS
 } Eolian_Type_Type;
 
 /*
diff --git a/src/lib/eolian/database_class.c b/src/lib/eolian/database_class.c
index 3e4e36a..7beb1c3 100644
--- a/src/lib/eolian/database_class.c
+++ b/src/lib/eolian/database_class.c
@@ -8,6 +8,7 @@ database_class_del(Eolian_Class *cl)
    Eina_List *inherits = cl->inherits;
    Eolian_Function *fid;
    Eolian_Event *ev;
+   const char *sp;
 
    EINA_LIST_FREE(inherits, inherit_name)
      eina_stringshare_del(inherit_name);
@@ -33,6 +34,9 @@ database_class_del(Eolian_Class *cl)
    eina_stringshare_del(cl->eo_prefix);
    eina_stringshare_del(cl->data_type);
 
+   if (cl->namespaces) EINA_LIST_FREE(cl->namespaces, sp)
+      eina_stringshare_del(sp);
+
    free(cl);
 }
 
diff --git a/src/lib/eolian/database_type.c b/src/lib/eolian/database_type.c
index c58ce76..8ab8988 100644
--- a/src/lib/eolian/database_type.c
+++ b/src/lib/eolian/database_type.c
@@ -6,20 +6,25 @@ void
 database_type_del(Eolian_Type *tp)
 {
    if (!tp) return;
-   Eolian_Type *stp;
-   if (tp->name) eina_stringshare_del(tp->name);
-   if (tp->type == EOLIAN_TYPE_STRUCT)
+   if (tp->type == EOLIAN_TYPE_POINTER || tp->type == EOLIAN_TYPE_FUNCTION)
      {
-        eina_hash_free(tp->fields);
-        eina_stringshare_del(tp->file);
-        free(tp);
-        return;
+        Eolian_Type *stp;
+        if (tp->subtypes) EINA_LIST_FREE(tp->subtypes, stp)
+          database_type_del(stp);
+        if (tp->base_type)
+          database_type_del(tp->base_type);
+     }
+   else
+     {
+        const char *sp;
+        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->namespaces) EINA_LIST_FREE(tp->namespaces, sp)
+           eina_stringshare_del(sp);
+        if (tp->comment) eina_stringshare_del(tp->comment);
+        if (tp->file) eina_stringshare_del(tp->file);
      }
-   /* for function types, this will map to arguments and ret_type */
-   if (tp->subtypes) EINA_LIST_FREE(tp->subtypes, stp)
-     database_type_del(stp);
-   if (tp->base_type)
-     database_type_del(tp->base_type);
    free(tp);
 }
 
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h
index 6b94a6d..47c6263 100644
--- a/src/lib/eolian/eolian_database.h
+++ b/src/lib/eolian/eolian_database.h
@@ -98,21 +98,26 @@ struct _Eolian_Function_Parameter
 
 struct _Eolian_Type
 {
-   Eina_Stringshare  *name;
-   Eolian_Type_Type   type;
+   Eolian_Type_Type type;
    union {
+      /* pointers */
       struct {
          Eina_List   *subtypes;
          Eolian_Type *base_type;
       };
+      /* functions */
       struct {
          Eina_List   *arguments;
          Eolian_Type *ret_type;
       };
+      /* structs, aliases, regular types */
       struct {
-         Eina_Hash        *fields;
-         Eina_Stringshare *comment;
-         Eina_Stringshare *file;
+         Eina_Stringshare *name;       /* all */
+         Eina_Stringshare *full_name;  /* structs, aliases */
+         Eina_List        *namespaces; /* structs, aliases */
+         Eina_Hash        *fields;     /* structs */
+         Eina_Stringshare *comment;    /* structs, aliases */
+         Eina_Stringshare *file;       /* structs, aliases */
       };
    };
    Eina_Bool is_const  :1;

-- 


Reply via email to