q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=6abb24b717b2dbedfa1fca168f2193d2a481c1f7

commit 6abb24b717b2dbedfa1fca168f2193d2a481c1f7
Author: Daniel Kolesa <[email protected]>
Date:   Sun Dec 3 20:57:43 2017 +0100

    eolian: create an actual unit structure for files
    
    Units now form an actual tree stored in their own hash. This will
    later replace all global state of Eolian, by introducing a master
    unit that you will pass around.
---
 src/lib/eolian/eo_lexer.c        |  4 ++++
 src/lib/eolian/eolian_database.c | 31 ++++++++++++++++++++++++++++++-
 src/lib/eolian/eolian_database.h | 19 ++++++++++++-------
 3 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/src/lib/eolian/eo_lexer.c b/src/lib/eolian/eo_lexer.c
index 4da3942c51..e7ed6b1b20 100644
--- a/src/lib/eolian/eo_lexer.c
+++ b/src/lib/eolian/eo_lexer.c
@@ -1043,6 +1043,10 @@ eo_lexer_set_input(Eo_Lexer *ls, const char *source)
    if (ls->current != 0xBF)
      return;
    next_char(ls);
+
+   Eolian_Unit *ncunit = calloc(1, sizeof(Eolian_Unit));
+   database_unit_init(ncunit, ls->filename);
+   eina_hash_add(_units, ls->filename, ncunit);
 }
 
 static void
diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c
index 0141450275..59cebfa202 100644
--- a/src/lib/eolian/eolian_database.c
+++ b/src/lib/eolian/eolian_database.c
@@ -31,6 +31,8 @@ Eina_Hash *_parsingeos = NULL;
 
 Eina_Hash *_defereos = NULL;
 
+static Eolian_Unit *_cunit = NULL;
+
 static int _database_init_count = 0;
 
 static void
@@ -598,8 +600,35 @@ eolian_doc_token_ref_get(const Eolian_Unit *unit, const 
Eolian_Doc_Token *tok,
 }
 
 void
-database_unit_del(Eolian_Unit *unit EINA_UNUSED)
+database_unit_init(Eolian_Unit *unit, Eina_Stringshare *fname)
+{
+   Eolian_Unit *ocunit = _cunit;
+   unit->parent = ocunit;
+   if (ocunit)
+     eina_hash_add(ocunit->children, fname, unit);
+
+   unit->children   = eina_hash_stringshared_new(NULL);
+   unit->classes    = eina_hash_stringshared_new(NULL);
+   unit->globals    = eina_hash_stringshared_new(NULL);
+   unit->constants  = eina_hash_stringshared_new(NULL);
+   unit->aliases    = eina_hash_stringshared_new(NULL);
+   unit->structs    = eina_hash_stringshared_new(NULL);
+   unit->enums      = eina_hash_stringshared_new(NULL);
+   _cunit = unit;
+}
+
+void
+database_unit_del(Eolian_Unit *unit)
 {
+   if (!unit)
+     return;
+
+   eina_hash_free(unit->classes);
+   eina_hash_free(unit->globals);
+   eina_hash_free(unit->constants);
+   eina_hash_free(unit->aliases);
+   eina_hash_free(unit->structs);
+   eina_hash_free(unit->enums);
 }
 
 #define EO_SUFFIX ".eo"
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h
index a8c1dbb637..1ab61b0b66 100644
--- a/src/lib/eolian/eolian_database.h
+++ b/src/lib/eolian/eolian_database.h
@@ -48,6 +48,9 @@ extern Eina_Hash *_tfilenames;
 
 /* a hash holding all declarations, for redef checking etc */
 extern Eina_Hash *_decls;
+extern Eina_Hash *_declsf;
+
+extern Eina_Hash *_units;
 
 /* holds parsed/currently parsing eot files to keep track */
 extern Eina_Hash *_parsedeos;
@@ -293,13 +296,14 @@ struct _Eolian_Variable
 
 struct _Eolian_Unit
 {
-   Eina_List     *dependencies;
-   Eina_List     *classes;
-   Eina_List     *globals;
-   Eina_List     *constants;
-   Eina_List     *aliases;
-   Eina_List     *structs;
-   Eina_List     *enums;
+   Eolian_Unit   *parent;
+   Eina_Hash     *children;
+   Eina_Hash     *classes;
+   Eina_Hash     *globals;
+   Eina_Hash     *constants;
+   Eina_Hash     *aliases;
+   Eina_Hash     *structs;
+   Eina_Hash     *enums;
 };
 
 int database_init(void);
@@ -313,6 +317,7 @@ void database_decl_add(Eina_Stringshare *name, 
Eolian_Declaration_Type type,
 
 void database_doc_del(Eolian_Documentation *doc);
 
+void database_unit_init(Eolian_Unit *unit, Eina_Stringshare *fname);
 void database_unit_del(Eolian_Unit *unit);
 
 /* types */

-- 


Reply via email to