q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=7b9438e76ed4ba18126084ef5aa15dd02bf84d68
commit 7b9438e76ed4ba18126084ef5aa15dd02bf84d68 Author: Daniel Kolesa <[email protected]> Date: Thu Jul 10 15:10:24 2014 +0100 eolian: refactoring: remove Eo_Type_Def --- src/lib/eolian/database_type.c | 16 +++++++++++----- src/lib/eolian/eo_definitions.c | 15 +-------------- src/lib/eolian/eo_definitions.h | 13 +++---------- src/lib/eolian/eo_lexer.c | 5 ++--- src/lib/eolian/eo_lexer.h | 2 +- src/lib/eolian/eo_parser.c | 21 +++++++++++---------- src/lib/eolian/eolian_database.c | 10 +--------- src/lib/eolian/eolian_database.h | 3 ++- 8 files changed, 32 insertions(+), 53 deletions(-) diff --git a/src/lib/eolian/database_type.c b/src/lib/eolian/database_type.c index bca7ece..873d508 100644 --- a/src/lib/eolian/database_type.c +++ b/src/lib/eolian/database_type.c @@ -22,15 +22,21 @@ database_type_del(Eolian_Type *tp) free(tp); } +void +database_typedef_del(Eolian_Typedef *def) +{ + if (!def) return; + eina_stringshare_del(def->alias); + database_type_del(def->type); + free(def); +} + Eina_Bool -database_type_add(const char *alias, Eolian_Type *type) +database_type_add(Eolian_Typedef *def) { if (_types) { - Eolian_Typedef *desc = calloc(1, sizeof(*desc)); - desc->alias = eina_stringshare_add(alias); - desc->type = type; - eina_hash_set(_types, desc->alias, desc); + eina_hash_set(_types, def->alias, def); return EINA_TRUE; } return EINA_FALSE; diff --git a/src/lib/eolian/eo_definitions.c b/src/lib/eolian/eo_definitions.c index 2bb2328..4bcec97 100644 --- a/src/lib/eolian/eo_definitions.c +++ b/src/lib/eolian/eo_definitions.c @@ -2,7 +2,6 @@ #include <stdlib.h> #include "eo_definitions.h" -#include "eolian_database.h" static void eo_definitions_ret_free(Eo_Ret_Def *ret) @@ -113,18 +112,6 @@ eo_definitions_impl_def_free(Eo_Implement_Def *impl) } void -eo_definitions_typedef_def_free(Eo_Typedef_Def *type) -{ - if (type->alias) - eina_stringshare_del(type->alias); - - if (type->type) - database_type_del(type->type); - - free(type); -} - -void eo_definitions_class_def_free(Eo_Class_Def *kls) { const char *s; @@ -189,7 +176,7 @@ eo_definitions_temps_free(Eo_Lexer_Temps *tmp) eo_definitions_ret_free(tmp->ret_def); if (tmp->typedef_def) - eo_definitions_typedef_def_free(tmp->typedef_def); + database_typedef_del(tmp->typedef_def); EINA_LIST_FREE(tmp->type_defs, tp) database_type_del(tp); diff --git a/src/lib/eolian/eo_definitions.h b/src/lib/eolian/eo_definitions.h index 35af8c0..ce6c3a8 100644 --- a/src/lib/eolian/eo_definitions.h +++ b/src/lib/eolian/eo_definitions.h @@ -4,6 +4,8 @@ #include <Eina.h> #include <Eolian.h> +#include "eolian_database.h" + /* RET */ typedef struct _Eo_Ret_Def @@ -122,14 +124,6 @@ typedef struct _Eo_Class_Def Eina_List *methods; } Eo_Class_Def; -/* TYPE */ - -typedef struct _Eo_Typedef_Def -{ - Eina_Stringshare *alias; - Eolian_Type *type; -} Eo_Typedef_Def; - /* TEMPS */ typedef struct _Eo_Lexer_Temps @@ -139,7 +133,7 @@ typedef struct _Eo_Lexer_Temps Eina_Stringshare *legacy_def; Eo_Class_Def *kls; Eo_Ret_Def *ret_def; - Eo_Typedef_Def *typedef_def; + Eolian_Typedef *typedef_def; Eina_List *type_defs; Eo_Property_Def *prop; Eo_Method_Def *meth; @@ -152,7 +146,6 @@ typedef struct _Eo_Lexer_Temps } Eo_Lexer_Temps; void eo_definitions_class_def_free(Eo_Class_Def *kls); -void eo_definitions_typedef_def_free(Eo_Typedef_Def *type); void eo_definitions_temps_free(Eo_Lexer_Temps *tmp); #endif /* __EO_DEFINITIONS_H__ */ diff --git a/src/lib/eolian/eo_lexer.c b/src/lib/eolian/eo_lexer.c index 60bc2b1..28332fe 100644 --- a/src/lib/eolian/eo_lexer.c +++ b/src/lib/eolian/eo_lexer.c @@ -5,7 +5,6 @@ #include <assert.h> #include "eo_lexer.h" -#include "eolian_database.h" int _eo_lexer_log_dom = -1; @@ -357,10 +356,10 @@ eo_lexer_free(Eo_Lexer *ls) eo_definitions_class_def_free(nd->def_class); break; case NODE_TYPEDEF: - eo_definitions_typedef_def_free(nd->def_typedef); + database_typedef_del(nd->def_typedef); break; case NODE_STRUCT: - if (nd->def_struct) database_type_del(nd->def_struct); + database_type_del(nd->def_struct); default: break; } diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h index e40bd38..7ada2bf 100644 --- a/src/lib/eolian/eo_lexer.h +++ b/src/lib/eolian/eo_lexer.h @@ -66,7 +66,7 @@ typedef struct _Eo_Node union { void *def; Eo_Class_Def *def_class; - Eo_Typedef_Def *def_typedef; + Eolian_Typedef *def_typedef; Eolian_Type *def_struct; }; } Eo_Node; diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index 388ab59..1590d71 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -1,5 +1,4 @@ #include "eo_parser.h" -#include "eolian_database.h" #define CASE_LOCK(ls, var, msg) \ if (has_##var) \ @@ -384,7 +383,7 @@ parse_type_void(Eo_Lexer *ls) static void parse_typedef(Eo_Lexer *ls) { - ls->tmp.typedef_def = calloc(1, sizeof(Eo_Typedef_Def)); + ls->tmp.typedef_def = calloc(1, sizeof(Eolian_Typedef)); eo_lexer_get(ls); check(ls, TOK_VALUE); ls->tmp.typedef_def->alias = eina_stringshare_add(ls->t.value); @@ -1150,7 +1149,7 @@ _dump_class(Eo_Class_Def *kls) } static void -_dump_type(Eo_Typedef_Def *type) +_dump_type(Eolian_Typedef *type) { printf("Typedef: %s ", type->alias); database_type_print(type->type); @@ -1397,11 +1396,9 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename) } static Eina_Bool -_db_fill_type(Eo_Typedef_Def *type_def) +_db_fill_type(Eolian_Typedef *type_def) { - Eina_Bool ret = database_type_add(type_def->alias, type_def->type); - type_def->type = NULL; - return ret; + return database_type_add(type_def); } static Eina_Bool @@ -1458,9 +1455,13 @@ nodeloop: goto error; break; case NODE_TYPEDEF: - if (!_db_fill_type(nd->def_typedef)) - goto error; - break; + { + Eolian_Typedef *def = nd->def_typedef; + nd->def_typedef = NULL; + if (!_db_fill_type(def)) + goto error; + break; + } case NODE_STRUCT: { Eolian_Type *def = nd->def_struct; diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index 7239148..eb6ec72 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -10,20 +10,12 @@ Eina_Hash *_tfilenames = NULL; static int _database_init_count = 0; -static void _type_hash_free_cb(void *data) -{ - Eolian_Typedef *type = data; - eina_stringshare_del(type->alias); - database_type_del(type->type); - free(type); -} - int database_init() { if (_database_init_count > 0) return ++_database_init_count; eina_init(); - _types = eina_hash_stringshared_new(_type_hash_free_cb); + _types = eina_hash_stringshared_new(EINA_FREE_CB(database_typedef_del)); _structs = eina_hash_stringshared_new(EINA_FREE_CB(database_type_del)); _filenames = eina_hash_string_small_new(free); _tfilenames = eina_hash_string_small_new(free); diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index d09c6c9..5d32434 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -151,9 +151,10 @@ int database_shutdown(); /* types */ -Eina_Bool database_type_add(const char *alias, Eolian_Type *type); +Eina_Bool database_type_add(Eolian_Typedef *def); Eina_Bool database_struct_add(Eolian_Type *type); void database_type_del(Eolian_Type *type); +void database_typedef_del(Eolian_Typedef *def); void database_type_print(Eolian_Type *type); void database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name); --
