q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=3e5da03f7dd3b99e1c92ae4c73285cebebb37e18
commit 3e5da03f7dd3b99e1c92ae4c73285cebebb37e18 Author: Daniel Kolesa <[email protected]> Date: Fri Aug 29 11:40:29 2014 +0100 eolian: update virtual to the new syntax (as per wiki) --- src/lib/ecore_audio/ecore_audio.eo | 10 ++--- src/lib/ecore_audio/ecore_audio_in.eo | 8 ++-- src/lib/ecore_con/ecore_con_base.eo | 20 ++++----- src/lib/eolian/database_fill.c | 61 ++++++++++++---------------- src/lib/eolian/eo_lexer.h | 8 ++-- src/lib/eolian/eo_parser.c | 21 ++++------ src/lib/eolian/eolian_database.h | 5 +++ src/lib/evas/canvas/evas_3d_object.eo | 4 +- src/tests/eolian/data/base.eo | 2 +- src/tests/eolian/data/nmsp1_nmsp11_class2.eo | 2 +- src/tests/eolian/data/object_impl.eo | 4 +- src/tests/eolian/data/override.eo | 4 +- 12 files changed, 69 insertions(+), 80 deletions(-) diff --git a/src/lib/ecore_audio/ecore_audio.eo b/src/lib/ecore_audio/ecore_audio.eo index fc62df2..1b61691 100644 --- a/src/lib/ecore_audio/ecore_audio.eo +++ b/src/lib/ecore_audio/ecore_audio.eo @@ -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; } } diff --git a/src/lib/ecore_audio/ecore_audio_in.eo b/src/lib/ecore_audio/ecore_audio_in.eo index cbf0ce8..5115771 100644 --- a/src/lib/ecore_audio/ecore_audio_in.eo +++ b/src/lib/ecore_audio/ecore_audio_in.eo @@ -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. */ diff --git a/src/lib/ecore_con/ecore_con_base.eo b/src/lib/ecore_con/ecore_con_base.eo index 7c75bff..e6eed1b 100644 --- a/src/lib/ecore_con/ecore_con_base.eo +++ b/src/lib/ecore_con/ecore_con_base.eo @@ -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; diff --git a/src/lib/eolian/database_fill.c b/src/lib/eolian/database_fill.c index 6210fc2..e9f3703 100644 --- a/src/lib/eolian/database_fill.c +++ b/src/lib/eolian/database_fill.c @@ -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; } diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h index 5530178..432cef8 100644 --- a/src/lib/eolian/eo_lexer.h +++ b/src/lib/eolian/eo_lexer.h @@ -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), \ diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index 76f0cf5..6b03a08 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -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, '.'); diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index ae30521..d098493 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -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 diff --git a/src/lib/evas/canvas/evas_3d_object.eo b/src/lib/evas/canvas/evas_3d_object.eo index b15ba6a..6202f60 100644 --- a/src/lib/evas/canvas/evas_3d_object.eo +++ b/src/lib/evas/canvas/evas_3d_object.eo @@ -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; } } diff --git a/src/tests/eolian/data/base.eo b/src/tests/eolian/data/base.eo index 948389a..4527e83 100644 --- a/src/tests/eolian/data/base.eo +++ b/src/tests/eolian/data/base.eo @@ -6,6 +6,6 @@ class Base { } } implements { - virtual.constructor; + @virtual .constructor; } } diff --git a/src/tests/eolian/data/nmsp1_nmsp11_class2.eo b/src/tests/eolian/data/nmsp1_nmsp11_class2.eo index 9b042af..84f6325 100644 --- a/src/tests/eolian/data/nmsp1_nmsp11_class2.eo +++ b/src/tests/eolian/data/nmsp1_nmsp11_class2.eo @@ -7,6 +7,6 @@ class nmsp1.nmsp11.class2 } } implements { - virtual.a.set; + @virtual .a.set; } } diff --git a/src/tests/eolian/data/object_impl.eo b/src/tests/eolian/data/object_impl.eo index 425002d..bec9d8f 100644 --- a/src/tests/eolian/data/object_impl.eo +++ b/src/tests/eolian/data/object_impl.eo @@ -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; } } diff --git a/src/tests/eolian/data/override.eo b/src/tests/eolian/data/override.eo index d4aa199..008b139 100644 --- a/src/tests/eolian/data/override.eo +++ b/src/tests/eolian/data/override.eo @@ -13,7 +13,7 @@ class Override (Base) { } implements { Base.constructor; - virtual.a.set; - virtual.foo; + @virtual .a.set; + @virtual .foo; } } --
