eolian: make parsing/parsed files mapping non-global

This commit is contained in:
Daniel Kolesa 2017-12-07 18:54:00 +01:00
parent 9d09d722b9
commit 2343e6cc54
3 changed files with 12 additions and 17 deletions

View 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;
}

View 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);

View 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;