q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=e75ded5e3fd28a9a5f450a22dbb279f2b723d61d
commit e75ded5e3fd28a9a5f450a22dbb279f2b723d61d Author: Daniel Kolesa <[email protected]> Date: Thu Sep 4 14:29:33 2014 +0100 eolian: prepare for implements list expansion As the implements list will soon contain all methods and properties, do some preparations. The Eolian library now fills in class field in implements early on when the implement is local. The Eolian C generator now checks for local implements and skips them (so that things don't break). --- src/bin/eolian/eo_generator.c | 2 ++ src/bin/eolian/impl_generator.c | 3 +++ src/lib/eolian/database_fill.c | 7 +++++++ 3 files changed, 12 insertions(+) diff --git a/src/bin/eolian/eo_generator.c b/src/bin/eolian/eo_generator.c index ce1d0ad..20f69a0 100644 --- a/src/bin/eolian/eo_generator.c +++ b/src/bin/eolian/eo_generator.c @@ -726,6 +726,8 @@ eo_source_end_generate(const Eolian_Class *class, Eina_Strbuf *buf) if ((impl_class = eolian_implement_class_get(impl_desc))) { + if (impl_class == class) + continue; fnid = eolian_implement_function_get(impl_desc, &ftype); _class_env_create(impl_class, NULL, &impl_env); funcname = eolian_function_name_get(fnid); diff --git a/src/bin/eolian/impl_generator.c b/src/bin/eolian/impl_generator.c index c91ca42..645982d 100644 --- a/src/bin/eolian/impl_generator.c +++ b/src/bin/eolian/impl_generator.c @@ -280,6 +280,9 @@ impl_source_generate(const Eolian_Class *class, Eina_Strbuf *buffer) EINA_ITERATOR_FOREACH(itr, impl_desc) { Eolian_Function_Type ftype; + const Eolian_Class *cl = eolian_implement_class_get(impl_desc); + if (cl == class) + continue; if (!(foo = eolian_implement_function_get(impl_desc, &ftype))) { const char *name = names[eolian_implement_is_prop_get(impl_desc) diff --git a/src/lib/eolian/database_fill.c b/src/lib/eolian/database_fill.c index 4fba89b..555016b 100644 --- a/src/lib/eolian/database_fill.c +++ b/src/lib/eolian/database_fill.c @@ -250,6 +250,7 @@ _get_impl_func(Eolian_Class *cl, Eolian_Implement *impl, return EINA_TRUE; if (strchr(imstr, '.')) return EINA_FALSE; + impl->klass = cl; *foo_id = (Eolian_Function*)eolian_class_function_get_by_name(cl, imstr, ftype); return !!*foo_id; @@ -314,6 +315,12 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl) cl->class_dtor_enable = EINA_TRUE; return 1; } + else + { + Eolian_Function *foo_id; + if (!_get_impl_func(cl, impl, ftype, &foo_id)) + return _func_error(cl, impl); + } pasttags: if (impl_name[0] == '.') --
