q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=3acbdaa8c7c1521db0d22acb91dd424331c06823

commit 3acbdaa8c7c1521db0d22acb91dd424331c06823
Author: Daniel Kolesa <d.kol...@samsung.com>
Date:   Fri Jun 20 12:24:10 2014 +0100

    eolian: mark all methods/properties in interfaces as virtual by default and 
disallow everything but class.(con|de)structor in their implements
---
 src/lib/eolian/eo_parser.c                   | 30 +++++++++++++++++++---------
 src/lib/evas/canvas/evas_common_interface.eo |  3 ---
 2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index f1619ce..8951e3e 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -572,13 +572,15 @@ end:
 }
 
 static void
-parse_implement(Eo_Lexer *ls)
+parse_implement(Eo_Lexer *ls, Eina_Bool iface)
 {
    Eina_Strbuf *buf = NULL;
    Eo_Implement_Def *impl = NULL;
    buf = push_strbuf(ls);
    impl = calloc(1, sizeof(Eo_Implement_Def));
    ls->tmp.impl = impl;
+   if (iface)
+      check_kw(ls, KW_class);
    if (ls->t.kw == KW_class)
      {
         eina_strbuf_append(buf, "class.");
@@ -753,7 +755,7 @@ parse_properties(Eo_Lexer *ls)
 }
 
 static void
-parse_implements(Eo_Lexer *ls)
+parse_implements(Eo_Lexer *ls, Eina_Bool iface)
 {
    int line;
    eo_lexer_get(ls);
@@ -761,7 +763,7 @@ parse_implements(Eo_Lexer *ls)
    check_next(ls, '{');
    while (ls->t.token != '}')
      {
-        parse_implement(ls);
+        parse_implement(ls, iface);
         ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements,
                                                    ls->tmp.impl);
         ls->tmp.impl = NULL;
@@ -788,7 +790,7 @@ parse_events(Eo_Lexer *ls)
 }
 
 static void
-parse_class_body(Eo_Lexer *ls, Eina_Bool allow_ctors)
+parse_class_body(Eo_Lexer *ls, Eina_Bool allow_ctors, Eolian_Class_Type type)
 {
    Eina_Bool has_legacy_prefix = EINA_FALSE,
              has_eo_prefix     = EINA_FALSE,
@@ -864,7 +866,7 @@ parse_class_body(Eo_Lexer *ls, Eina_Bool allow_ctors)
                 if (has_implements)
                    eo_lexer_syntax_error(ls, "double implements definition");
                 has_implements = EINA_TRUE;
-                parse_implements(ls);
+                parse_implements(ls, type == EOLIAN_CLASS_INTERFACE);
                 break;
              case KW_events:
                 if (has_events)
@@ -902,7 +904,7 @@ parse_class(Eo_Lexer *ls, Eina_Bool allow_ctors, 
Eolian_Class_Type type)
      }
    line = ls->line_number;
    check_next(ls, '{');
-   parse_class_body(ls, allow_ctors);
+   parse_class_body(ls, allow_ctors, type);
    check_match(ls, '}', '{', line);
 }
 
@@ -1137,6 +1139,7 @@ eo_parser_database_fill(const char *filename)
    EINA_LIST_FOREACH(ls->classes, k, kls)
      {
         Eolian_Class class = database_class_add(kls->name, kls->type);
+        Eina_Bool is_iface = (kls->type == EOLIAN_CLASS_INTERFACE);
         database_class_file_set(class, filename);
 
         if (kls->comment) database_class_description_set(class, kls->comment);
@@ -1190,10 +1193,10 @@ eo_parser_database_fill(const char *filename)
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
                {
                   database_function_type_set(foo_id, (accessor->type == 
SETTER?EOLIAN_PROP_SET:EOLIAN_PROP_GET));
+                  Eolian_Function_Type ftype =
+                     accessor->type == SETTER?EOLIAN_PROP_SET:EOLIAN_PROP_GET;
                   if (accessor->ret && accessor->ret->type)
                     {
-                       Eolian_Function_Type ftype =
-                          accessor->type == 
SETTER?EOLIAN_PROP_SET:EOLIAN_PROP_GET;
                        database_function_return_type_set(foo_id, ftype, 
accessor->ret->type);
                        database_function_return_comment_set(foo_id,
                              ftype, accessor->ret->comment);
@@ -1227,8 +1230,15 @@ eo_parser_database_fill(const char *filename)
                                database_parameter_const_attribute_set(desc, 
accessor->type == GETTER, EINA_TRUE);
                             }
                     }
+                  if (is_iface)
+                     database_function_set_as_virtual_pure(foo_id, ftype);
+               }
+             if (!prop->accessors)
+               {
+                  database_function_type_set(foo_id, EOLIAN_PROPERTY);
+                  if (is_iface)
+                    database_function_set_as_virtual_pure(foo_id, 
EOLIAN_UNRESOLVED);
                }
-             if (!prop->accessors) database_function_type_set(foo_id, 
EOLIAN_PROPERTY);
              database_class_function_add(class, foo_id);
           }
 
@@ -1257,6 +1267,8 @@ eo_parser_database_fill(const char *filename)
                   database_parameter_nonull_set(p, param->nonull);
                   param->type = NULL;
                }
+             if (is_iface)
+               database_function_set_as_virtual_pure(foo_id, EOLIAN_METHOD);
           }
 
         EINA_LIST_FOREACH(kls->implements, l, impl)
diff --git a/src/lib/evas/canvas/evas_common_interface.eo 
b/src/lib/evas/canvas/evas_common_interface.eo
index a71b618..3cd7368 100644
--- a/src/lib/evas/canvas/evas_common_interface.eo
+++ b/src/lib/evas/canvas/evas_common_interface.eo
@@ -13,7 +13,4 @@ interface Evas_Common_Interface ()
          }
       }
    }
-   implements {
-      virtual.evas.get;
-   }
 }
\ No newline at end of file

-- 


Reply via email to