q66 pushed a commit to branch master.

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

commit bef66f507d9c9dcc540c43a393ac0227a39864d9
Author: Daniel Kolesa <d.kol...@samsung.com>
Date:   Thu Apr 26 16:41:32 2018 +0200

    eolian: check event vs function/part conflicts as well
    
    Still behind the env var, because there would be a lot of failures
    otherwise.
---
 src/lib/eolian/database_validate.c | 45 ++++++++++++++++++++------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/src/lib/eolian/database_validate.c 
b/src/lib/eolian/database_validate.c
index 91dfcd4611..73555813db 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -456,22 +456,29 @@ _validate_part(Eolian_Part *part, Eina_Hash *nhash)
 }
 
 static Eina_Bool
-_validate_event(Validate_State *vals, Eolian_Event *event, Eina_Hash *ehash)
+_validate_event(Validate_State *vals, Eolian_Event *event, Eina_Hash *nhash)
 {
-   const Eolian_Event *oev = eina_hash_find(ehash, &event->base.name);
-   if (EINA_UNLIKELY(!!oev) && vals->event_redef)
+   const Eolian_Object *oobj = NULL;
+   if (vals->event_redef)
      {
-        char buf[512];
-        snprintf(buf, sizeof(buf),
-                 "event '%s' redefined (originally at %s:%d:%d)",
-                 oev->base.name, oev->base.file,
-                 oev->base.line, oev->base.column);
-        _obj_error(&event->base, buf);
-        vals->warned = EINA_TRUE;
+        oobj = eina_hash_find(nhash, &event->base.name);
+        if (EINA_UNLIKELY(!!oobj))
+          {
+             char buf[512];
+             snprintf(buf, sizeof(buf),
+                      "event '%s' conflicts with another symbol (at %s:%d:%d)",
+                      event->base.name, oobj->file, oobj->line, oobj->column);
+             _obj_error(&event->base, buf);
+             vals->warned = EINA_TRUE;
+          }
      }
 
    if (event->base.validated)
-     return EINA_TRUE;
+     {
+        if (vals->event_redef && !oobj)
+          eina_hash_add(nhash, &event->base.name, &event->base);
+        return EINA_TRUE;
+     }
 
    if (event->type && !_validate_type(vals, event->type))
      return EINA_FALSE;
@@ -479,8 +486,8 @@ _validate_event(Validate_State *vals, Eolian_Event *event, 
Eina_Hash *ehash)
    if (!_validate_doc(event->doc))
      return EINA_FALSE;
 
-   if (!oev)
-     eina_hash_add(ehash, &event->base.name, event);
+   if (vals->event_redef && !oobj)
+     eina_hash_add(nhash, &event->base.name, &event->base);
 
    return _validate(&event->base);
 }
@@ -775,7 +782,7 @@ _validate_implement(Eolian_Implement *impl)
 
 static Eina_Bool
 _validate_class(Validate_State *vals, Eolian_Class *cl,
-                Eina_Hash *nhash, Eina_Hash *ehash, Eina_Hash *chash)
+                Eina_Hash *nhash, Eina_Hash *chash)
 {
    Eina_List *l;
    Eolian_Function *func;
@@ -821,7 +828,7 @@ _validate_class(Validate_State *vals, Eolian_Class *cl,
            default:
              break;
           }
-        if (!_validate_class(vals, icl, nhash, ehash, chash))
+        if (!_validate_class(vals, icl, nhash, chash))
           return EINA_FALSE;
      }
 
@@ -834,7 +841,7 @@ _validate_class(Validate_State *vals, Eolian_Class *cl,
        return EINA_FALSE;
 
    EINA_LIST_FOREACH(cl->events, l, event)
-     if (!_validate_event(vals, event, ehash))
+     if (!_validate_event(vals, event, nhash))
        return EINA_FALSE;
 
    EINA_LIST_FOREACH(cl->parts, l, part)
@@ -917,24 +924,20 @@ database_validate(const Eolian_Unit *src)
 
    iter = eolian_unit_classes_get(src);
    Eina_Hash *nhash = eina_hash_pointer_new(NULL);
-   Eina_Hash *ehash = eina_hash_pointer_new(NULL);
    Eina_Hash *chash = eina_hash_pointer_new(NULL);
    EINA_ITERATOR_FOREACH(iter, cl)
      {
         eina_hash_free_buckets(nhash);
-        eina_hash_free_buckets(ehash);
         eina_hash_free_buckets(chash);
-        if (!_validate_class(&vals, cl, nhash, ehash, chash))
+        if (!_validate_class(&vals, cl, nhash, chash))
           {
              eina_iterator_free(iter);
              eina_hash_free(nhash);
-             eina_hash_free(ehash);
              eina_hash_free(chash);
              return EINA_FALSE;
           }
      }
    eina_hash_free(chash);
-   eina_hash_free(ehash);
    eina_hash_free(nhash);
    eina_iterator_free(iter);
 

-- 


Reply via email to