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; --
