eolian: update virtual to the new syntax (as per wiki)
authorDaniel Kolesa <d.kolesa@samsung.com>
Fri, 29 Aug 2014 10:40:29 +0000 (11:40 +0100)
committerDaniel Kolesa <d.kolesa@samsung.com>
Fri, 29 Aug 2014 10:40:29 +0000 (11:40 +0100)
12 files changed:
src/lib/ecore_audio/ecore_audio.eo
src/lib/ecore_audio/ecore_audio_in.eo
src/lib/ecore_con/ecore_con_base.eo
src/lib/eolian/database_fill.c
src/lib/eolian/eo_lexer.h
src/lib/eolian/eo_parser.c
src/lib/eolian/eolian_database.h
src/lib/evas/canvas/evas_3d_object.eo
src/tests/eolian/data/base.eo
src/tests/eolian/data/nmsp1_nmsp11_class2.eo
src/tests/eolian/data/object_impl.eo
src/tests/eolian/data/override.eo

index fc62df2..1b61691 100644 (file)
@@ -116,10 +116,10 @@ class Ecore_Audio (Eo.Base)
    }
    implements {
       Eo.Base.constructor;
-      virtual.source.get;
-      virtual.source.set;
-      virtual.format.get;
-      virtual.format.set;
-      virtual.vio_set;
+      @virtual .source.get;
+      @virtual .source.set;
+      @virtual .format.get;
+      @virtual .format.set;
+      @virtual .vio_set;
    }
 }
index cbf0ce8..5115771 100644 (file)
@@ -176,10 +176,10 @@ class Ecore_Audio_In (Ecore_Audio)
       Eo.Base.constructor;
       Eo.Base.destructor;
       Ecore_Audio.vio_set;
-      virtual.preloaded.get;
-      virtual.preloaded.set;
-      virtual.seek;
-      virtual.length.set;
+      @virtual .preloaded.get;
+      @virtual .preloaded.set;
+      @virtual .seek;
+      @virtual .length.set;
    }
    events {
       in,looped; /*@ Called when an input has looped. */
index 7c75bff..e6eed1b 100644 (file)
@@ -157,16 +157,16 @@ abstract Ecore.Con.Base (Eo.Base) {
       }
    }
    implements {
-      virtual.ip.get;
-      virtual.uptime.get;
-      virtual.port.set;
-      virtual.port.get;
-      virtual.fd.get;
-      virtual.connected.get;
-      virtual.timeout.set;
-      virtual.timeout.get;
-      virtual.flush;
-      virtual.send;
+      @virtual .ip.get;
+      @virtual .uptime.get;
+      @virtual .port.set;
+      @virtual .port.get;
+      @virtual .fd.get;
+      @virtual .connected.get;
+      @virtual .timeout.set;
+      @virtual .timeout.get;
+      @virtual .flush;
+      @virtual .send;
    }
    events {
         data,received: Ecore_Con_Event_Data_Received;
index 6210fc2..e9f3703 100644 (file)
@@ -230,57 +230,46 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
 {
    const char *impl_name = impl->full_name;
 
-   if (!strcmp(impl_name, "class.constructor"))
-     {
-        cl->class_ctor_enable = EINA_TRUE;
-        return 1;
-     }
-
-   if (!strcmp(impl_name, "class.destructor"))
-     {
-        cl->class_dtor_enable = EINA_TRUE;
-        return 1;
-     }
-
-   if (!strncmp(impl_name, "virtual.", 8))
+   if (impl->is_virtual)
      {
         Eolian_Function_Type ftype = EOLIAN_UNRESOLVED;
-        char *type_as_str  = NULL;
-        char *virtual_name = strdup(impl_name);
-        char *func         = strchr(virtual_name, '.');
-
-        if (func) *func = '\0';
-        func += 1;
 
-        if ((type_as_str = strchr(func, '.')))
-          {
-             *type_as_str = '\0';
-
-             if (!strcmp(type_as_str+1, "set"))
-               ftype = EOLIAN_PROP_SET;
-             else if (!strcmp(type_as_str+1, "get"))
-               ftype = EOLIAN_PROP_GET;
-          }
+        if (impl->is_prop_get)
+          ftype = EOLIAN_PROP_GET;
+        else if (impl->is_prop_set)
+          ftype = EOLIAN_PROP_SET;
+      printf("name: %s\n", impl_name);
 
         Eolian_Function *foo_id = (Eolian_Function*)
                                    eolian_class_function_get_by_name(cl,
-                                                                      func,
-                                                                      ftype);
-
-        free(virtual_name);
-
+                                                                     impl_name,
+                                                                     ftype);
         if (!foo_id)
           {
-             ERR("Error - %s not known in class %s", impl_name + 8,
-                 eolian_class_name_get(cl));
+             ERR("Error - %s%s not known in class %s", impl_name,
+                 eolian_class_name_get(cl), (impl->is_prop_get ? ".get"
+                        : (impl->is_prop_set ? ".set" : "")));
              return -1;
           }
-        if (ftype == EOLIAN_PROP_SET)
+
+        if (impl->is_prop_set)
           foo_id->set_virtual_pure = EINA_TRUE;
         else
           foo_id->get_virtual_pure = EINA_TRUE;
+
         return 1;
      }
+   else if (impl->is_class_ctor)
+     {
+        cl->class_ctor_enable = EINA_TRUE;
+        return 1;
+     }
+   else if (impl->is_class_dtor)
+     {
+        cl->class_dtor_enable = EINA_TRUE;
+        return 1;
+     }
+
    cl->implements = eina_list_append(cl->implements, impl);
    return 0;
 }
index 5530178..432cef8 100644 (file)
@@ -22,15 +22,15 @@ enum Tokens
 /* all keywords in eolian, they can still be used as names (they're TOK_VALUE)
  * they just fill in the "kw" field of the token */
 #define KEYWORDS KW(class), KW(const), KW(enum), KW(return), KW(struct), \
-    KW(virtual), \
     \
     KW(abstract), KW(constructor), KW(data), KW(destructor), KW(eo), \
     KW(eo_prefix), KW(events), KW(free), KW(func), KW(get), KW(implements), \
     KW(interface), KW(keys), KW(legacy), KW(legacy_prefix), KW(methods), \
     KW(mixin), KW(own), KW(params), KW(properties), KW(set), KW(type), \
-    KW(values), KW(var), KWAT(class), KWAT(const), KWAT(constructor), \
-    KWAT(extern), KWAT(free), KWAT(in), KWAT(inout), KWAT(nonull), KWAT(out), \
-    KWAT(private), KWAT(protected), KWAT(warn_unused), \
+    KW(values), KW(var), KWAT(auto), KWAT(class), KWAT(const), \
+    KWAT(constructor), KWAT(empty), KWAT(extern), KWAT(free), KWAT(in), \
+    KWAT(inout), KWAT(nonull), KWAT(out), KWAT(private), KWAT(protected), \
+    KWAT(virtual), KWAT(warn_unused), \
     \
     KW(byte), KW(ubyte), KW(char), KW(short), KW(ushort), KW(int), KW(uint), \
     KW(long), KW(ulong), KW(llong), KW(ullong), \
index 76f0cf5..6b03a08 100644 (file)
@@ -1481,7 +1481,6 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface)
 {
    Eina_Strbuf *buf = NULL;
    Eolian_Implement *impl = NULL;
-   buf = push_strbuf(ls);
    impl = calloc(1, sizeof(Eolian_Implement));
    impl->base.file = eina_stringshare_ref(ls->filename);
    impl->base.line = ls->line_number;
@@ -1491,54 +1490,50 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface)
      check_kw(ls, KW_class);
    if (ls->t.kw == KW_class)
      {
-        eina_strbuf_append(buf, "class.");
         eo_lexer_get(ls);
         check_next(ls, '.');
         if (ls->t.kw == KW_destructor)
           {
-             eina_strbuf_append(buf, "destructor");
+             impl->is_class_dtor = EINA_TRUE;
              eo_lexer_get(ls);
           }
         else
           {
              check_kw_next(ls, KW_constructor);
-             eina_strbuf_append(buf, "constructor");
+             impl->is_class_ctor = EINA_TRUE;
           }
         check_next(ls, ';');
-        impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf));
-        pop_strbuf(ls);
         return;
      }
-   else if (ls->t.kw == KW_virtual)
+   else if (ls->t.kw == KW_at_virtual)
      {
-        eina_strbuf_append(buf, "virtual.");
+        impl->is_virtual = EINA_TRUE;
         eo_lexer_get(ls);
         check_next(ls, '.');
         if ((ls->t.token != TOK_VALUE) || (ls->t.kw == KW_get || ls->t.kw == KW_set))
           eo_lexer_syntax_error(ls, "name expected");
-        eina_strbuf_append(buf, ls->t.value.s);
+        impl->full_name = eina_stringshare_add(ls->t.value.s);
         eo_lexer_get(ls);
         if (ls->t.token == '.')
           {
              eo_lexer_get(ls);
              if (ls->t.kw == KW_set)
                {
-                  eina_strbuf_append(buf, ".set");
+                  impl->is_prop_set = EINA_TRUE;
                   eo_lexer_get(ls);
                }
              else
                {
                   check_kw_next(ls, KW_get);
-                  eina_strbuf_append(buf, ".get");
+                  impl->is_prop_get = EINA_TRUE;
                }
           }
         check_next(ls, ';');
-        impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf));
-        pop_strbuf(ls);
         return;
      }
    if ((ls->t.token != TOK_VALUE) || (ls->t.kw == KW_get || ls->t.kw == KW_set))
      eo_lexer_syntax_error(ls, "class name expected");
+   buf = push_strbuf(ls);
    eina_strbuf_append(buf, ls->t.value.s);
    eo_lexer_get(ls);
    check_next(ls, '.');
index ae30521..d098493 100644 (file)
@@ -159,6 +159,11 @@ struct _Eolian_Implement
    Eolian_Object base;
    const Eolian_Class *klass;
    Eina_Stringshare *full_name;
+   Eina_Bool is_virtual :1;
+   Eina_Bool is_prop_get :1;
+   Eina_Bool is_prop_set :1;
+   Eina_Bool is_class_ctor :1;
+   Eina_Bool is_class_dtor :1;
 };
 
 struct _Eolian_Event
index b15ba6a..6202f60 100644 (file)
@@ -65,8 +65,8 @@ class Evas_3D_Object (Eo.Base, Evas.Common_Interface)
    implements {
       Eo.Base.constructor;
       Evas.Common_Interface.evas.get;
-      virtual.update_notify;
-      virtual.change_notify;
+      @virtual .update_notify;
+      @virtual .change_notify;
    }
 
 }
index 948389a..4527e83 100644 (file)
@@ -6,6 +6,6 @@ class Base {
       }
    }
    implements {
-      virtual.constructor;
+      @virtual .constructor;
    }
 }
index 9b042af..84f6325 100644 (file)
@@ -7,6 +7,6 @@ class nmsp1.nmsp11.class2
       }
    }
    implements {
-      virtual.a.set;
+      @virtual .a.set;
    }
 }
index 425002d..bec9d8f 100644 (file)
@@ -59,7 +59,7 @@ class Object_Impl (Base) {
       class.destructor;
       Base.constructor;
       Base.destructor;
-      virtual.pure_foo3;
-      virtual.b.get;
+      @virtual .pure_foo3;
+      @virtual .b.get;
    }
 }
index d4aa199..008b139 100644 (file)
@@ -13,7 +13,7 @@ class Override (Base) {
    }
    implements {
       Base.constructor;
-      virtual.a.set;
-      virtual.foo;
+      @virtual .a.set;
+      @virtual .foo;
    }
 }