From 9fb3abc662459ed2a0080e68d065556a71d7fe49 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Wed, 6 Dec 2017 13:59:17 +0100 Subject: [PATCH] eolian: store classes in temporary state --- src/lib/eolian/database_class_api.c | 10 +++++----- src/lib/eolian/eo_parser.c | 4 ++-- src/lib/eolian/eolian_database.c | 11 ++++------- src/lib/eolian/eolian_database.h | 7 +++++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lib/eolian/database_class_api.c b/src/lib/eolian/database_class_api.c index 10fb275..1cc2a2a 100644 --- a/src/lib/eolian/database_class_api.c +++ b/src/lib/eolian/database_class_api.c @@ -35,9 +35,9 @@ EAPI const Eolian_Class * eolian_class_get_by_name(const Eolian_Unit *unit EINA_UNUSED, const char *class_name) { - if (!_classes) return NULL; + if (!_state->unit.classes) return NULL; Eina_Stringshare *shr = eina_stringshare_add(class_name); - Eolian_Class *cl = eina_hash_find(_classes, shr); + Eolian_Class *cl = eina_hash_find(_state->unit.classes, shr); eina_stringshare_del(shr); return cl; } @@ -46,9 +46,9 @@ EAPI const Eolian_Class * eolian_class_get_by_file(const Eolian_Unit *unit EINA_UNUSED, const char *file_name) { - if (!_classesf) return NULL; + if (!_state->classes_f) return NULL; Eina_Stringshare *shr = eina_stringshare_add(file_name); - Eolian_Class *cl = eina_hash_find(_classesf, shr); + Eolian_Class *cl = eina_hash_find(_state->classes_f, shr); eina_stringshare_del(shr); return cl; } @@ -63,7 +63,7 @@ eolian_class_type_get(const Eolian_Class *cl) EAPI Eina_Iterator * eolian_all_classes_get(const Eolian_Unit *unit EINA_UNUSED) { - return (_classes ? eina_hash_iterator_data_new(_classes) : NULL); + return (_state ? eina_hash_iterator_data_new(_state->unit.classes) : NULL); } EAPI const Eolian_Documentation * diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index dcdfc06..8d24dd3 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -2537,8 +2537,8 @@ eo_parser_database_fill(const char *filename, Eina_Bool eot, Eolian_Class **fcl) if (!_db_fill_ctors(cl)) goto error; - eina_hash_set(_classes, cl->full_name, cl); - eina_hash_set(_classesf, cl->base.file, cl); + eina_hash_set(_state->unit.classes, cl->full_name, cl); + eina_hash_set(_state->classes_f, cl->base.file, cl); eolian_object_ref(&cl->base); if (fcl) *fcl = cl; diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index fff1f43..cae2de4 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -8,13 +8,11 @@ #include "eolian_database.h" #include "eolian_priv.h" -Eina_Hash *_classes = NULL; Eina_Hash *_aliases = NULL; Eina_Hash *_structs = NULL; Eina_Hash *_enums = NULL; Eina_Hash *_globals = NULL; Eina_Hash *_constants = NULL; -Eina_Hash *_classesf = NULL; Eina_Hash *_aliasesf = NULL; Eina_Hash *_structsf = NULL; Eina_Hash *_enumsf = NULL; @@ -48,13 +46,11 @@ database_init() { if (_database_init_count > 0) return ++_database_init_count; eina_init(); - _classes = eina_hash_stringshared_new(EINA_FREE_CB(database_class_del)); _aliases = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del)); _structs = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del)); _enums = 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); _aliasesf = eina_hash_stringshared_new(_hashlist_free); _structsf = eina_hash_stringshared_new(_hashlist_free); _enumsf = eina_hash_stringshared_new(_hashlist_free); @@ -84,14 +80,12 @@ database_shutdown() if (_database_init_count == 0) { - eolian_free(_state); - eina_hash_free(_classes ); _classes = NULL; + eolian_free(_state); _state = NULL; eina_hash_free(_aliases ); _aliases = NULL; eina_hash_free(_structs ); _structs = NULL; eina_hash_free(_enums ); _enums = NULL; eina_hash_free(_globals ); _globals = NULL; eina_hash_free(_constants ); _constants = NULL; - eina_hash_free(_classesf ); _classesf = NULL; eina_hash_free(_aliasesf ); _aliasesf = NULL; eina_hash_free(_structsf ); _structsf = NULL; eina_hash_free(_enumsf ); _enumsf = NULL; @@ -648,6 +642,9 @@ eolian_new(void) return NULL; database_unit_init(&state->unit, NULL); + + state->classes_f = eina_hash_stringshared_new(NULL); + return state; } diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index 44878ae..e2d1ee9 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -31,13 +31,11 @@ extern Eina_Prefix *_eolian_prefix; #endif #define DBG(...) EINA_LOG_DOM_DBG(_eolian_log_dom, __VA_ARGS__) -extern Eina_Hash *_classes; extern Eina_Hash *_aliases; extern Eina_Hash *_structs; extern Eina_Hash *_enums; extern Eina_Hash *_globals; extern Eina_Hash *_constants; -extern Eina_Hash *_classesf; extern Eina_Hash *_aliasesf; extern Eina_Hash *_structsf; extern Eina_Hash *_enumsf; @@ -59,6 +57,9 @@ extern Eina_Hash *_parsingeos; /* for deferred dependency parsing */ extern Eina_Hash *_defereos; +/* TODO: remove */ +extern Eolian *_state; + struct _Eolian_Unit { Eolian_Unit *parent; @@ -74,6 +75,8 @@ struct _Eolian_Unit struct _Eolian { Eolian_Unit unit; + + Eina_Hash *classes_f; }; typedef struct _Eolian_Object -- 2.7.4