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 */

-- 


Reply via email to