From e7bf69fc0476b46790bb1b74f7d0fa63b6d8bd88 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Thu, 7 Dec 2017 18:58:21 +0100 Subject: [PATCH] eolian: make deferred parsing map non-global --- src/lib/eolian/eo_lexer.c | 2 +- src/lib/eolian/eo_parser.c | 2 +- src/lib/eolian/eolian_database.c | 12 +++++------- src/lib/eolian/eolian_database.h | 4 +--- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/lib/eolian/eo_lexer.c b/src/lib/eolian/eo_lexer.c index 9594d4a4b6..e646eaad98 100644 --- a/src/lib/eolian/eo_lexer.c +++ b/src/lib/eolian/eo_lexer.c @@ -278,7 +278,7 @@ doc_ref_class(Eo_Lexer *ls, const char *cname) const char *eop = eina_hash_find(ls->state->filenames_eo, buf); if (!eop) return; - eina_hash_set(_defereos, buf, eop); + eina_hash_set(ls->state->defer, buf, eop); } static void diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index a077245ab6..e8cecef038 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -2189,7 +2189,7 @@ parse_unit(Eo_Lexer *ls, Eina_Bool eot) eo_lexer_syntax_error(ls, errbuf); } } - eina_hash_set(_defereos, eina_strbuf_string_get(buf), found); + eina_hash_set(ls->state->defer, eina_strbuf_string_get(buf), found); pop_strbuf(ls); eo_lexer_get(ls); check_next(ls, ';'); diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index 8ebb974ae0..5629b9e908 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -12,8 +12,6 @@ Eina_Hash *_decls = NULL; Eina_Hash *_declsf = NULL; Eina_Hash *_units = NULL; -Eina_Hash *_defereos = NULL; - static Eolian_Unit *_cunit = NULL; static int _database_init_count = 0; @@ -31,7 +29,6 @@ database_init() eina_init(); _decls = eina_hash_stringshared_new(free); _declsf = eina_hash_stringshared_new(_hashlist_free); - _defereos = eina_hash_string_small_new(NULL); _units = eina_hash_stringshared_new(EINA_FREE_CB(database_unit_del)); return ++_database_init_count; } @@ -50,7 +47,6 @@ database_shutdown() { eina_hash_free(_decls ); _decls = NULL; eina_hash_free(_declsf ); _declsf = NULL; - eina_hash_free(_defereos ); _defereos = NULL; eina_hash_free(_units ); _units = NULL; eina_shutdown(); } @@ -603,6 +599,7 @@ eolian_new(void) state->parsed = eina_hash_string_small_new(NULL); state->parsing = eina_hash_string_small_new(NULL); + state->defer = eina_hash_string_small_new(NULL); state->classes_f = eina_hash_stringshared_new(NULL); state->aliases_f = eina_hash_stringshared_new(_hashlist_free); @@ -621,6 +618,7 @@ eolian_free(Eolian *state) return; database_unit_del(&state->unit); + free(state); } @@ -715,11 +713,11 @@ _eolian_file_parse_nodep(Eolian *state, const char *filepath) static Eina_Bool _parse_deferred(Eolian *state) { - Eina_Hash *defer = _defereos; + Eina_Hash *defer = state->defer; if (!defer || !eina_hash_population(defer)) return EINA_TRUE; /* clean room for more deps for later parsing */ - _defereos = eina_hash_string_small_new(NULL); + state->defer = eina_hash_string_small_new(NULL); Eina_Iterator *itr = eina_hash_iterator_data_new(defer); const char *dep; EINA_ITERATOR_FOREACH(itr, dep) @@ -727,7 +725,7 @@ _parse_deferred(Eolian *state) if (!_eolian_file_parse_nodep(state, dep)) { eina_iterator_free(itr); - eina_hash_free_buckets(_defereos); + eina_hash_free_buckets(state->defer); eina_hash_free(defer); return EINA_FALSE; } diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index eaf55f801a..5168df904f 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -37,9 +37,6 @@ extern Eina_Hash *_declsf; extern Eina_Hash *_units; -/* for deferred dependency parsing */ -extern Eina_Hash *_defereos; - struct _Eolian_Unit { Eolian *state; @@ -62,6 +59,7 @@ struct _Eolian Eina_Hash *parsing; Eina_Hash *parsed; + Eina_Hash *defer; Eina_Hash *classes_f; Eina_Hash *aliases_f;