q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=e4fd05469de16ea0382b4cda84a9cbcccfa6f0c9
commit e4fd05469de16ea0382b4cda84a9cbcccfa6f0c9 Author: Daniel Kolesa <[email protected]> Date: Tue Mar 27 13:27:32 2018 +0200 eolian: validate each class with its own unit's in mind only This is stricter (doesn't allow outer symbols to leak in). Also needed fixing some eo files. --- src/lib/ecore_con/efl_net_control_technology.eo | 2 ++ src/lib/efl/interfaces/efl_gfx_size_hint.eo | 1 + src/lib/efl/interfaces/efl_image_load.eo | 1 + src/lib/efl/interfaces/efl_ui_direction.eo | 2 ++ src/lib/eolian/database_validate.c | 16 +++++++++------- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/lib/ecore_con/efl_net_control_technology.eo b/src/lib/ecore_con/efl_net_control_technology.eo index 116adbeb66..7c94b9a0e4 100644 --- a/src/lib/ecore_con/efl_net_control_technology.eo +++ b/src/lib/ecore_con/efl_net_control_technology.eo @@ -1,3 +1,5 @@ +import efl_net_control_access_point; + enum Efl.Net.Control.Technology.Type { [[Technology types diff --git a/src/lib/efl/interfaces/efl_gfx_size_hint.eo b/src/lib/efl/interfaces/efl_gfx_size_hint.eo index 7b344d8693..f8dae0fae6 100644 --- a/src/lib/efl/interfaces/efl_gfx_size_hint.eo +++ b/src/lib/efl/interfaces/efl_gfx_size_hint.eo @@ -1,3 +1,4 @@ +import eina_types; import efl_gfx_types; const Efl.Gfx.Size.Hint.Expand: double = 1.0; diff --git a/src/lib/efl/interfaces/efl_image_load.eo b/src/lib/efl/interfaces/efl_image_load.eo index 1f2f8d247d..8396109e0d 100644 --- a/src/lib/efl/interfaces/efl_image_load.eo +++ b/src/lib/efl/interfaces/efl_image_load.eo @@ -1,3 +1,4 @@ +import eina_types; import efl_gfx_types; /* diff --git a/src/lib/efl/interfaces/efl_ui_direction.eo b/src/lib/efl/interfaces/efl_ui_direction.eo index daf4e0cf6d..de0cda082d 100644 --- a/src/lib/efl/interfaces/efl_ui_direction.eo +++ b/src/lib/efl/interfaces/efl_ui_direction.eo @@ -1,6 +1,8 @@ // FIXME: Documentation lacks proper references due to cyclic imports. // FIXME: What about AnyRTL? And other strange directions? +import efl_orientation; + enum Efl.Ui.Dir { [[Direction for UI objects and layouts. diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c index 8dfc23c3de..d5dbe449f3 100644 --- a/src/lib/eolian/database_validate.c +++ b/src/lib/eolian/database_validate.c @@ -660,7 +660,7 @@ end: /* FIXME: need much better error handling here */ static Eina_Bool -_db_fill_inherits(const Eolian_Unit *src, Eolian_Class *cl, Eina_Hash *fhash) +_db_fill_inherits(Eolian_Class *cl, Eina_Hash *fhash) { if (eina_hash_find(fhash, cl->base.name)) return EINA_TRUE; @@ -677,7 +677,7 @@ _db_fill_inherits(const Eolian_Unit *src, Eolian_Class *cl, Eina_Hash *fhash) eina_stringshare_del(inn); continue; } - Eolian_Class *icl = eina_hash_find(src->classes, inn); + Eolian_Class *icl = eina_hash_find(cl->base.unit->classes, inn); if (!icl) { succ = EINA_FALSE; @@ -689,7 +689,7 @@ _db_fill_inherits(const Eolian_Unit *src, Eolian_Class *cl, Eina_Hash *fhash) { cl->inherits = eina_list_append(cl->inherits, icl); /* recursively fill so the tree is valid */ - if (!icl->valid_impls && !_db_fill_inherits(src, icl, fhash)) + if (!icl->valid_impls && !_db_fill_inherits(icl, fhash)) succ = EINA_FALSE; } eina_stringshare_del(inn); @@ -725,7 +725,7 @@ _validate_implement(const Eolian_Unit *src, Eolian_Implement *impl) } static Eina_Bool -_validate_class(Validate_State *vals, const Eolian_Unit *src, Eolian_Class *cl, +_validate_class(Validate_State *vals, Eolian_Class *cl, Eina_Hash *nhash, Eina_Hash *chash) { Eina_List *l; @@ -742,6 +742,8 @@ _validate_class(Validate_State *vals, const Eolian_Unit *src, Eolian_Class *cl, if (eina_hash_find(chash, cl->base.name)) return EINA_TRUE; + const Eolian_Unit *src = cl->base.unit; + Eina_Bool valid = cl->base.validated; EINA_LIST_FOREACH(cl->inherits, l, icl) @@ -772,7 +774,7 @@ _validate_class(Validate_State *vals, const Eolian_Unit *src, Eolian_Class *cl, default: break; } - if (!_validate_class(vals, src, icl, nhash, chash)) + if (!_validate_class(vals, icl, nhash, chash)) return EINA_FALSE; } @@ -859,7 +861,7 @@ database_validate(const Eolian_Unit *src) if (cl->valid_impls) continue; Eina_Hash *fhash = eina_hash_stringshared_new(NULL); - if (!_db_fill_inherits(src, cl, fhash)) + if (!_db_fill_inherits(cl, fhash)) { eina_hash_free(fhash); return EINA_FALSE; @@ -874,7 +876,7 @@ database_validate(const Eolian_Unit *src) EINA_ITERATOR_FOREACH(iter, cl) { eina_hash_free_buckets(nhash); - if (!_validate_class(&vals, src, cl, nhash, chash)) + if (!_validate_class(&vals, cl, nhash, chash)) { eina_iterator_free(iter); eina_hash_free(nhash); --
