q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=436f2d33630efe0fb683bcc8058c7f5e058a589b
commit 436f2d33630efe0fb683bcc8058c7f5e058a589b Author: Daniel Kolesa <d.kol...@osg.samsung.com> Date: Tue Feb 27 15:53:35 2018 +0100 eolian: add API to get file name of a unit --- src/lib/eolian/Eolian.h | 12 ++++++++++++ src/lib/eolian/eo_lexer.c | 2 +- src/lib/eolian/eolian_database.c | 13 +++++++++++-- src/lib/eolian/eolian_database.h | 3 ++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index dbd6ed891e..1afe024de4 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -571,6 +571,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. * * The input can be either a full path to the file or only a filename. diff --git a/src/lib/eolian/eo_lexer.c b/src/lib/eolian/eo_lexer.c index 70c3afdf2b..9c4f751850 100644 --- a/src/lib/eolian/eo_lexer.c +++ b/src/lib/eolian/eo_lexer.c @@ -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) diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index af786fa07f..42c38812df 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -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) { diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index 4eed189fbe..675373c690 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -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 */ --