q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=efb419fd7408f4c570804a40071c8236f6eb5193
commit efb419fd7408f4c570804a40071c8236f6eb5193 Author: Daniel Kolesa <[email protected]> Date: Fri Dec 22 15:34:53 2017 +0100 eolian: prevent unnecessary hash table allocs --- src/lib/eolian/database_validate.c | 56 ++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c index 9fd9e59379..9ac74dba76 100644 --- a/src/lib/eolian/database_validate.c +++ b/src/lib/eolian/database_validate.c @@ -447,17 +447,12 @@ _validate_class(const Eolian_Unit *src, Eolian_Class *cl, Eina_Hash *nhash) Eolian_Part *part; Eolian_Implement *impl; Eolian_Class *icl; - Eina_Bool res = EINA_TRUE; if (!cl) return EINA_FALSE; /* if this happens something is very wrong though */ Eina_Bool valid = cl->base.validated; - Eina_Bool ahash = (nhash == NULL); - if (ahash) - nhash = eina_hash_string_small_new(NULL); - EINA_LIST_FOREACH(cl->inherits, l, icl) { /* first inherit needs some checking done on it */ @@ -486,42 +481,37 @@ _validate_class(const Eolian_Unit *src, Eolian_Class *cl, Eina_Hash *nhash) default: break; } - if (!(res = _validate_class(src, icl, nhash))) - goto freehash; + if (!_validate_class(src, icl, nhash)) + return EINA_FALSE; } EINA_LIST_FOREACH(cl->properties, l, func) - if (!(res = _validate_function(src, func, nhash))) - goto freehash; + if (!_validate_function(src, func, nhash)) + return EINA_FALSE; EINA_LIST_FOREACH(cl->methods, l, func) - if (!(res = _validate_function(src, func, nhash))) - goto freehash; + if (!_validate_function(src, func, nhash)) + return EINA_FALSE; EINA_LIST_FOREACH(cl->events, l, event) - if (!(res = _validate_event(src, event))) - goto freehash; + if (!_validate_event(src, event)) + return EINA_FALSE; EINA_LIST_FOREACH(cl->parts, l, part) - if (!(res = _validate_part(src, part, nhash))) - goto freehash; + if (!_validate_part(src, part, nhash)) + return EINA_FALSE; EINA_LIST_FOREACH(cl->implements, l, impl) - if (!(res = _validate_implement(src, impl))) - goto freehash; + if (!_validate_implement(src, impl)) + return EINA_FALSE; /* all the checks that need to be done every time are performed now */ if (valid) - goto freehash; - - if (!(res = _validate_doc(src, cl->doc))) - goto freehash; + return EINA_TRUE; -freehash: - if (ahash) - eina_hash_free(nhash); - if (!res) + if (!_validate_doc(src, cl->doc)) return EINA_FALSE; + return _validate(&cl->base); } @@ -563,12 +553,18 @@ database_validate(Eolian *state, const Eolian_Unit *src) Eolian_Class *cl; Eina_Iterator *iter = eolian_all_classes_get(src); + Eina_Hash *nhash = eina_hash_string_small_new(NULL); EINA_ITERATOR_FOREACH(iter, cl) - if (!_validate_class(src, cl, NULL)) - { - eina_iterator_free(iter); - return EINA_FALSE; - } + { + eina_hash_free_buckets(nhash); + if (!_validate_class(src, cl, nhash)) + { + eina_iterator_free(iter); + eina_hash_free(nhash); + return EINA_FALSE; + } + } + eina_hash_free(nhash); eina_iterator_free(iter); Cb_Ret rt = { src, EINA_TRUE }; --
