eolian: store classes in temporary state
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Wed, 6 Dec 2017 12:59:17 +0000 (13:59 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Wed, 6 Dec 2017 14:07:31 +0000 (15:07 +0100)
src/lib/eolian/database_class_api.c
src/lib/eolian/eo_parser.c
src/lib/eolian/eolian_database.c
src/lib/eolian/eolian_database.h

index 10fb275..1cc2a2a 100644 (file)
@@ -35,9 +35,9 @@ EAPI const Eolian_Class *
 eolian_class_get_by_name(const Eolian_Unit *unit EINA_UNUSED,
                          const char *class_name)
 {
-   if (!_classes) return NULL;
+   if (!_state->unit.classes) return NULL;
    Eina_Stringshare *shr = eina_stringshare_add(class_name);
-   Eolian_Class *cl = eina_hash_find(_classes, shr);
+   Eolian_Class *cl = eina_hash_find(_state->unit.classes, shr);
    eina_stringshare_del(shr);
    return cl;
 }
@@ -46,9 +46,9 @@ EAPI const Eolian_Class *
 eolian_class_get_by_file(const Eolian_Unit *unit EINA_UNUSED,
                          const char *file_name)
 {
-   if (!_classesf) return NULL;
+   if (!_state->classes_f) return NULL;
    Eina_Stringshare *shr = eina_stringshare_add(file_name);
-   Eolian_Class *cl = eina_hash_find(_classesf, shr);
+   Eolian_Class *cl = eina_hash_find(_state->classes_f, shr);
    eina_stringshare_del(shr);
    return cl;
 }
@@ -63,7 +63,7 @@ eolian_class_type_get(const Eolian_Class *cl)
 EAPI Eina_Iterator *
 eolian_all_classes_get(const Eolian_Unit *unit EINA_UNUSED)
 {
-   return (_classes ? eina_hash_iterator_data_new(_classes) : NULL);
+   return (_state ? eina_hash_iterator_data_new(_state->unit.classes) : NULL);
 }
 
 EAPI const Eolian_Documentation *
index dcdfc06..8d24dd3 100644 (file)
@@ -2537,8 +2537,8 @@ eo_parser_database_fill(const char *filename, Eina_Bool eot, Eolian_Class **fcl)
    if (!_db_fill_ctors(cl))
      goto error;
 
-   eina_hash_set(_classes, cl->full_name, cl);
-   eina_hash_set(_classesf, cl->base.file, cl);
+   eina_hash_set(_state->unit.classes, cl->full_name, cl);
+   eina_hash_set(_state->classes_f, cl->base.file, cl);
    eolian_object_ref(&cl->base);
 
    if (fcl) *fcl = cl;
index fff1f43..cae2de4 100644 (file)
@@ -8,13 +8,11 @@
 #include "eolian_database.h"
 #include "eolian_priv.h"
 
-Eina_Hash *_classes    = NULL;
 Eina_Hash *_aliases    = NULL;
 Eina_Hash *_structs    = NULL;
 Eina_Hash *_enums      = NULL;
 Eina_Hash *_globals    = NULL;
 Eina_Hash *_constants  = NULL;
-Eina_Hash *_classesf   = NULL;
 Eina_Hash *_aliasesf   = NULL;
 Eina_Hash *_structsf   = NULL;
 Eina_Hash *_enumsf     = NULL;
@@ -48,13 +46,11 @@ database_init()
 {
    if (_database_init_count > 0) return ++_database_init_count;
    eina_init();
-   _classes    = eina_hash_stringshared_new(EINA_FREE_CB(database_class_del));
    _aliases    = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
    _structs    = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
    _enums      = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
    _globals    = eina_hash_stringshared_new(EINA_FREE_CB(database_var_del));
    _constants  = eina_hash_stringshared_new(EINA_FREE_CB(database_var_del));
-   _classesf   = eina_hash_stringshared_new(NULL);
    _aliasesf   = eina_hash_stringshared_new(_hashlist_free);
    _structsf   = eina_hash_stringshared_new(_hashlist_free);
    _enumsf     = eina_hash_stringshared_new(_hashlist_free);
@@ -84,14 +80,12 @@ database_shutdown()
 
    if (_database_init_count == 0)
      {
-        eolian_free(_state);
-        eina_hash_free(_classes   ); _classes    = NULL;
+        eolian_free(_state); _state = NULL;
         eina_hash_free(_aliases   ); _aliases    = NULL;
         eina_hash_free(_structs   ); _structs    = NULL;
         eina_hash_free(_enums     ); _enums      = NULL;
         eina_hash_free(_globals   ); _globals    = NULL;
         eina_hash_free(_constants ); _constants  = NULL;
-        eina_hash_free(_classesf  ); _classesf   = NULL;
         eina_hash_free(_aliasesf  ); _aliasesf   = NULL;
         eina_hash_free(_structsf  ); _structsf   = NULL;
         eina_hash_free(_enumsf    ); _enumsf     = NULL;
@@ -648,6 +642,9 @@ eolian_new(void)
      return NULL;
 
    database_unit_init(&state->unit, NULL);
+
+   state->classes_f = eina_hash_stringshared_new(NULL);
+
    return state;
 }
 
index 44878ae..e2d1ee9 100644 (file)
@@ -31,13 +31,11 @@ extern Eina_Prefix *_eolian_prefix;
 #endif
 #define DBG(...) EINA_LOG_DOM_DBG(_eolian_log_dom, __VA_ARGS__)
 
-extern Eina_Hash *_classes;
 extern Eina_Hash *_aliases;
 extern Eina_Hash *_structs;
 extern Eina_Hash *_enums;
 extern Eina_Hash *_globals;
 extern Eina_Hash *_constants;
-extern Eina_Hash *_classesf;
 extern Eina_Hash *_aliasesf;
 extern Eina_Hash *_structsf;
 extern Eina_Hash *_enumsf;
@@ -59,6 +57,9 @@ extern Eina_Hash *_parsingeos;
 /* for deferred dependency parsing */
 extern Eina_Hash *_defereos;
 
+/* TODO: remove */
+extern Eolian *_state;
+
 struct _Eolian_Unit
 {
    Eolian_Unit   *parent;
@@ -74,6 +75,8 @@ struct _Eolian_Unit
 struct _Eolian
 {
    Eolian_Unit unit;
+
+   Eina_Hash *classes_f;
 };
 
 typedef struct _Eolian_Object