eolian: add API to get file name of a unit

This commit is contained in:
Daniel Kolesa 2018-02-27 15:53:35 +01:00
parent 7d001fd93f
commit 436f2d3363
4 changed files with 26 additions and 4 deletions

View File

@ -570,6 +570,18 @@ EAPI Eina_Iterator *eolian_state_units_get(const Eolian_State *state);
*/
EAPI Eina_Iterator *eolian_unit_children_get(const Eolian_Unit *unit);
/*
* @brief Get the file name a unit is associated with.
*
* This will be `NULL` if not associated with a file (like the master unit
* within `Eolian_State`).
*
* @param[in] unit The unit.
*
* @ingroup Eolian
*/
EAPI const char *eolian_unit_file_get(const Eolian_Unit *unit);
/*
* @brief Parse the given .eo or .eot file and fill the database.
*

View File

@ -1038,7 +1038,7 @@ eo_lexer_set_input(Eo_Lexer *ls, Eolian_State *state, const char *source)
Eolian_Unit *ncunit = calloc(1, sizeof(Eolian_Unit));
ls->unit = ncunit;
database_unit_init(state, ncunit);
database_unit_init(state, ncunit, ls->filename);
eina_hash_add(state->units, ls->filename, ncunit);
if (ls->current != 0xEF)

View File

@ -514,8 +514,9 @@ eolian_doc_token_ref_get(const Eolian_Unit *unit, const Eolian_Doc_Token *tok,
}
void
database_unit_init(Eolian_State *state, Eolian_Unit *unit)
database_unit_init(Eolian_State *state, Eolian_Unit *unit, const char *file)
{
unit->file = eina_stringshare_ref(file);
unit->state = state;
unit->children = eina_hash_stringshared_new(NULL);
@ -534,6 +535,7 @@ database_unit_del(Eolian_Unit *unit)
if (!unit)
return;
eina_stringshare_del(unit->file);
eina_hash_free(unit->classes);
eina_hash_free(unit->globals);
eina_hash_free(unit->constants);
@ -556,7 +558,7 @@ eolian_state_new(void)
if (!state)
return NULL;
database_unit_init(state, &state->unit);
database_unit_init(state, &state->unit, NULL);
state->filenames_eo = eina_hash_string_small_new(free);
state->filenames_eot = eina_hash_string_small_new(free);
@ -684,6 +686,13 @@ eolian_unit_children_get(const Eolian_Unit *unit)
return eina_hash_iterator_data_new(unit->children);
}
EAPI const char *
eolian_unit_file_get(const Eolian_Unit *unit)
{
if (!unit) return NULL;
return unit->file;
}
char *
database_class_to_filename(const char *cname)
{

View File

@ -33,6 +33,7 @@ extern Eina_Prefix *_eolian_prefix;
struct _Eolian_Unit
{
const char *file;
Eolian_State *state;
Eina_Hash *children;
Eina_Hash *classes;
@ -346,7 +347,7 @@ void database_decl_add(Eolian_Unit *unit, Eina_Stringshare *name,
void database_doc_del(Eolian_Documentation *doc);
void database_unit_init(Eolian_State *state, Eolian_Unit *unit);
void database_unit_init(Eolian_State *state, Eolian_Unit *unit, const char *file);
void database_unit_del(Eolian_Unit *unit);
/* types */