eolian: fix unit child management
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 15 Mar 2018 23:09:43 +0000 (00:09 +0100)
committerWonki Kim <wonki_.kim@samsung.com>
Tue, 10 Apr 2018 11:21:57 +0000 (20:21 +0900)
Also pass correct unit to validation for performance.

src/lib/eolian/eo_parser.c
src/lib/eolian/eolian_database.c

index 3b535dd..99ea949 100644 (file)
@@ -2197,12 +2197,12 @@ eo_parser_database_fill(Eolian_Unit *parent, const char *filename, Eina_Bool eot
      fname = eina_stringshare_add(filename);
 
    Eolian_Unit *ret = eina_hash_find(parent->state->units, fname);
-   eina_stringshare_del(fname);
 
    if (ret)
      {
-        if ((parent != ret) && !eina_hash_find(parent->children, filename))
-          eina_hash_add(parent->children, filename, ret);
+        if ((parent != ret) && !eina_hash_find(parent->children, fname))
+          eina_hash_add(parent->children, fname, ret);
+        eina_stringshare_del(fname);
         return ret;
      }
 
@@ -2235,12 +2235,14 @@ eo_parser_database_fill(Eolian_Unit *parent, const char *filename, Eina_Bool eot
 
 done:
    ret = ls->unit;
-   eina_hash_add(parent->children, filename, ret);
+   eina_hash_add(parent->children, fname, ret);
+   eina_stringshare_del(fname);
 
    eo_lexer_free(ls);
    return ret;
 
 error:
+   eina_stringshare_del(fname);
    eo_lexer_free(ls);
    return NULL;
 }
index 48a2b20..f3fc255 100644 (file)
@@ -806,8 +806,7 @@ eolian_state_file_parse(Eolian_State *state, const char *filepath)
    if (!_parse_deferred(ret))
      return NULL;
    _merge_units(ret);
-   /* FIXME: pass unit properly */
-   if (!database_validate(state, &state->unit))
+   if (!database_validate(state, ret))
      return NULL;
    return &state->unit;
 }
@@ -840,7 +839,6 @@ eolian_state_all_eot_files_parse(Eolian_State *state)
 
    eina_hash_foreach(state->filenames_eot, _tfile_parse, &pd);
 
-   /* FIXME: pass unit properly */
    if (pd.ret && !database_validate(state, &state->unit))
      return EINA_FALSE;
 
@@ -869,7 +867,6 @@ eolian_state_all_eo_files_parse(Eolian_State *state)
 
    eina_hash_foreach(state->filenames_eo, _file_parse, &pd);
 
-   /* FIXME: pass unit properly */
    if (pd.ret && !database_validate(state, &state->unit))
      return EINA_FALSE;