eolian: make parsing/parsed files mapping non-global
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 7 Dec 2017 17:54:00 +0000 (18:54 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 7 Dec 2017 18:11:58 +0000 (19:11 +0100)
src/lib/eolian/eo_parser.c
src/lib/eolian/eolian_database.c
src/lib/eolian/eolian_database.h

index 887bfd3..a077245 100644 (file)
@@ -680,7 +680,7 @@ parse_struct_attrs(Eo_Lexer *ls, Eina_Bool is_enum, Eina_Bool *is_extern,
 static Eolian_Class *
 _parse_dep(Eo_Lexer *ls, const char *fname, const char *name)
 {
-   if (eina_hash_find(_parsingeos, fname))
+   if (eina_hash_find(ls->state->parsing, fname))
      return NULL;
    Eolian_Class *cl = NULL;
    if (!eo_parser_database_fill(ls->state, fname, EINA_FALSE, &cl) || !cl)
@@ -2499,14 +2499,14 @@ end:
 Eina_Bool
 eo_parser_database_fill(Eolian *state, const char *filename, Eina_Bool eot, Eolian_Class **fcl)
 {
-   Eolian_Class *cl = eina_hash_find(_parsedeos, filename);
+   Eolian_Class *cl = eina_hash_find(state->parsed, filename);
    if (cl)
      {
         if (!eot && fcl) *fcl = cl;
         return EINA_TRUE;
      }
 
-   eina_hash_set(_parsingeos, filename, (void *)EINA_TRUE);
+   eina_hash_set(state->parsing, filename, (void *)EINA_TRUE);
 
    Eo_Lexer *ls = eo_lexer_new(state, filename);
    if (!ls)
@@ -2544,14 +2544,14 @@ eo_parser_database_fill(Eolian *state, const char *filename, Eina_Bool eot, Eoli
    if (fcl) *fcl = cl;
 
 done:
-   eina_hash_set(_parsedeos, filename, eot ? (void *)EINA_TRUE : cl);
-   eina_hash_set(_parsingeos, filename, (void *)EINA_FALSE);
+   eina_hash_set(state->parsed, filename, eot ? (void *)EINA_TRUE : cl);
+   eina_hash_set(state->parsing, filename, (void *)EINA_FALSE);
 
    eo_lexer_free(ls);
    return EINA_TRUE;
 
 error:
-   eina_hash_set(_parsingeos, filename, (void *)EINA_FALSE);
+   eina_hash_set(state->parsing, filename, (void *)EINA_FALSE);
    eo_lexer_free(ls);
    return EINA_FALSE;
 }
index 7f7c5a2..8ebb974 100644 (file)
@@ -12,9 +12,6 @@ Eina_Hash *_decls      = NULL;
 Eina_Hash *_declsf     = NULL;
 Eina_Hash *_units      = NULL;
 
-Eina_Hash *_parsedeos  = NULL;
-Eina_Hash *_parsingeos = NULL;
-
 Eina_Hash *_defereos = NULL;
 
 static Eolian_Unit *_cunit = NULL;
@@ -34,8 +31,6 @@ database_init()
    eina_init();
    _decls      = eina_hash_stringshared_new(free);
    _declsf     = eina_hash_stringshared_new(_hashlist_free);
-   _parsedeos  = eina_hash_string_small_new(NULL);
-   _parsingeos = eina_hash_string_small_new(NULL);
    _defereos   = eina_hash_string_small_new(NULL);
    _units      = eina_hash_stringshared_new(EINA_FREE_CB(database_unit_del));
    return ++_database_init_count;
@@ -55,8 +50,6 @@ database_shutdown()
      {
         eina_hash_free(_decls     ); _decls      = NULL;
         eina_hash_free(_declsf    ); _declsf     = NULL;
-        eina_hash_free(_parsedeos ); _parsedeos  = NULL;
-        eina_hash_free(_parsingeos); _parsingeos = NULL;
         eina_hash_free(_defereos  ); _defereos   = NULL;
         eina_hash_free(_units     ); _units      = NULL;
         eina_shutdown();
@@ -608,6 +601,9 @@ eolian_new(void)
    state->filenames_eo  = eina_hash_string_small_new(free);
    state->filenames_eot = eina_hash_string_small_new(free);
 
+   state->parsed  = eina_hash_string_small_new(NULL);
+   state->parsing = eina_hash_string_small_new(NULL);
+
    state->classes_f   = eina_hash_stringshared_new(NULL);
    state->aliases_f   = eina_hash_stringshared_new(_hashlist_free);
    state->structs_f   = eina_hash_stringshared_new(_hashlist_free);
index c59e6e6..eaf55f8 100644 (file)
@@ -37,10 +37,6 @@ extern Eina_Hash *_declsf;
 
 extern Eina_Hash *_units;
 
-/* holds parsed/currently parsing eot files to keep track */
-extern Eina_Hash *_parsedeos;
-extern Eina_Hash *_parsingeos;
-
 /* for deferred dependency parsing */
 extern Eina_Hash *_defereos;
 
@@ -64,6 +60,9 @@ struct _Eolian
    Eina_Hash *filenames_eo; /* filename to full path mapping */
    Eina_Hash *filenames_eot;
 
+   Eina_Hash *parsing;
+   Eina_Hash *parsed;
+
    Eina_Hash *classes_f;
    Eina_Hash *aliases_f;
    Eina_Hash *structs_f;