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).
This commit is contained in:
Daniel Kolesa 2014-09-04 14:29:33 +01:00
parent debb51e5df
commit e75ded5e3f
3 changed files with 12 additions and 0 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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] == '.')