}
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;
}
}
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. */
}
}
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;
{
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;
}
/* 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), \
{
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;
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, '.');
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
implements {
Eo.Base.constructor;
Evas.Common_Interface.evas.get;
- virtual.update_notify;
- virtual.change_notify;
+ @virtual .update_notify;
+ @virtual .change_notify;
}
}
}
}
implements {
- virtual.constructor;
+ @virtual .constructor;
}
}
}
}
implements {
- virtual.a.set;
+ @virtual .a.set;
}
}
class.destructor;
Base.constructor;
Base.destructor;
- virtual.pure_foo3;
- virtual.b.get;
+ @virtual .pure_foo3;
+ @virtual .b.get;
}
}
}
implements {
Base.constructor;
- virtual.a.set;
- virtual.foo;
+ @virtual .a.set;
+ @virtual .foo;
}
}