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

-- 


Reply via email to