q66 pushed a commit to branch master.

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

commit e7bf69fc0476b46790bb1b74f7d0fa63b6d8bd88
Author: Daniel Kolesa <[email protected]>
Date:   Thu Dec 7 18:58:21 2017 +0100

    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;

-- 


Reply via email to