eolian: use implements only to retrieve functions list

This also changes the implements list so that it also includes virtual functions.
This commit is contained in:
Daniel Kolesa 2014-09-05 10:43:50 +01:00
parent 99b03d4f3c
commit dff8d56475
6 changed files with 151 additions and 184 deletions

View File

@ -83,7 +83,7 @@ tmpl_eo_retdesc[] =" * @return %s\n";
#endif #endif
static Eina_Bool static Eina_Bool
eo_fundef_generate(const Eolian_Class *class, Eolian_Function *func, Eolian_Function_Type ftype, Eina_Strbuf *functext) eo_fundef_generate(const Eolian_Class *class, const Eolian_Function *func, Eolian_Function_Type ftype, Eina_Strbuf *functext)
{ {
_eolian_class_func_vars func_env; _eolian_class_func_vars func_env;
const char *str_dir[] = {"in", "out", "inout"}; const char *str_dir[] = {"in", "out", "inout"};
@ -229,10 +229,8 @@ eo_fundef_generate(const Eolian_Class *class, Eolian_Function *func, Eolian_Func
Eina_Bool Eina_Bool
eo_header_generate(const Eolian_Class *class, Eina_Strbuf *buf) eo_header_generate(const Eolian_Class *class, Eina_Strbuf *buf)
{ {
const Eolian_Function_Type ftype_order[] = {EOLIAN_PROPERTY, EOLIAN_METHOD};
Eina_Iterator *itr; Eina_Iterator *itr;
Eolian_Event *event; Eolian_Event *event;
Eolian_Function *fid;
char *tmpstr = malloc(0x1FF); char *tmpstr = malloc(0x1FF);
Eina_Strbuf * str_hdr = eina_strbuf_new(); Eina_Strbuf * str_hdr = eina_strbuf_new();
@ -300,27 +298,27 @@ eo_header_generate(const Eolian_Class *class, Eina_Strbuf *buf)
} }
} }
int i; if ((itr = eolian_class_implements_get(class)))
for (i = 0; i < (int)EINA_C_ARRAY_LENGTH(ftype_order); i++)
{ {
itr = eolian_class_functions_get(class, ftype_order[i]); const Eolian_Implement *impl;
EINA_ITERATOR_FOREACH(itr, fid) EINA_ITERATOR_FOREACH(itr, impl)
{ {
const Eolian_Function_Type ftype = eolian_function_type_get(fid); if (eolian_implement_class_get(impl) != class)
Eina_Bool prop_read = (ftype == EOLIAN_PROPERTY || ftype == EOLIAN_PROP_GET ) ? EINA_TRUE : EINA_FALSE ; continue;
Eina_Bool prop_write = (ftype == EOLIAN_PROPERTY || ftype == EOLIAN_PROP_SET ) ? EINA_TRUE : EINA_FALSE ; Eolian_Function_Type ftype = EOLIAN_UNRESOLVED;
const Eolian_Function *fid = eolian_implement_function_get(impl, &ftype);
if (!prop_read && !prop_write) switch (ftype)
{
eo_fundef_generate(class, fid, EOLIAN_UNRESOLVED, str_hdr);
}
if (prop_write)
{ {
case EOLIAN_PROP_GET: case EOLIAN_PROP_SET:
eo_fundef_generate(class, fid, ftype, str_hdr);
break;
case EOLIAN_PROPERTY:
eo_fundef_generate(class, fid, EOLIAN_PROP_SET, str_hdr); eo_fundef_generate(class, fid, EOLIAN_PROP_SET, str_hdr);
}
if (prop_read)
{
eo_fundef_generate(class, fid, EOLIAN_PROP_GET, str_hdr); eo_fundef_generate(class, fid, EOLIAN_PROP_GET, str_hdr);
break;
default:
eo_fundef_generate(class, fid, EOLIAN_UNRESOLVED, str_hdr);
break;
} }
} }
eina_iterator_free(itr); eina_iterator_free(itr);
@ -570,7 +568,7 @@ eo_bind_func_generate(const Eolian_Class *class, const Eolian_Function *funcid,
} }
static Eina_Bool static Eina_Bool
eo_op_desc_generate(const Eolian_Class *class, Eolian_Function *fid, Eolian_Function_Type ftype, eo_op_desc_generate(const Eolian_Class *class, const Eolian_Function *fid, Eolian_Function_Type ftype,
const char *desc, Eina_Strbuf *buf) const char *desc, Eina_Strbuf *buf)
{ {
_eolian_class_func_vars func_env; _eolian_class_func_vars func_env;
@ -636,12 +634,25 @@ eo_source_beginning_generate(const Eolian_Class *class, Eina_Strbuf *buf)
return EINA_TRUE; return EINA_TRUE;
} }
static void
_desc_generate(const Eolian_Class *class, const Eolian_Function *fid, Eolian_Function_Type ftype, Eina_Strbuf *tmpbuf, Eina_Strbuf *str_op)
{
const char *funcname = eolian_function_name_get(fid);
char tmpstr[256];
snprintf(tmpstr, sizeof(tmpstr), "%s%s", funcname, (ftype == EOLIAN_PROP_SET)
? "_set" : ((ftype == EOLIAN_PROP_GET) ? "_get" : ""));
char *desc = _source_desc_get(eolian_function_description_get(fid, ftype));
eo_op_desc_generate(class, fid, ftype, desc, tmpbuf);
eina_strbuf_append(str_op, eina_strbuf_string_get(tmpbuf));
free(desc);
}
static Eina_Bool static Eina_Bool
eo_source_end_generate(const Eolian_Class *class, Eina_Strbuf *buf) eo_source_end_generate(const Eolian_Class *class, Eina_Strbuf *buf)
{ {
Eina_Bool ret = EINA_FALSE; Eina_Bool ret = EINA_FALSE;
Eina_Iterator *itr; Eina_Iterator *itr;
Eolian_Function *fn;
Eolian_Implement *impl_desc; Eolian_Implement *impl_desc;
Eolian_Event *event; Eolian_Event *event;
const char *inherit_name; const char *inherit_name;
@ -777,51 +788,28 @@ eo_source_end_generate(const Eolian_Class *class, Eina_Strbuf *buf)
} }
eina_iterator_free(itr); eina_iterator_free(itr);
//Properties if ((itr = eolian_class_implements_get(class)))
itr = eolian_class_functions_get(class, EOLIAN_PROPERTY);
EINA_ITERATOR_FOREACH(itr, fn)
{ {
const char *funcname = eolian_function_name_get(fn); const Eolian_Implement *impl;
const Eolian_Function_Type ftype = eolian_function_type_get(fn); EINA_ITERATOR_FOREACH(itr, impl)
char tmpstr[0xFF];
Eina_Bool prop_read = ( ftype == EOLIAN_PROP_SET ) ? EINA_FALSE : EINA_TRUE;
Eina_Bool prop_write = ( ftype == EOLIAN_PROP_GET ) ? EINA_FALSE : EINA_TRUE;
if (prop_write && !eolian_function_is_legacy_only(fn, EOLIAN_PROP_SET))
{ {
char *desc = _source_desc_get(eolian_function_description_get(fn, EOLIAN_PROP_SET)); if (eolian_implement_class_get(impl) != class)
sprintf(tmpstr, "%s_set", funcname);
eo_op_desc_generate(class, fn, EOLIAN_PROP_SET, desc, tmpbuf);
eina_strbuf_append(str_op, eina_strbuf_string_get(tmpbuf));
free(desc);
}
if (prop_read && !eolian_function_is_legacy_only(fn, EOLIAN_PROP_GET))
{
char *desc = _source_desc_get(eolian_function_description_get(fn, EOLIAN_PROP_GET));
sprintf(tmpstr, "%s_get", funcname);
eo_op_desc_generate(class, fn, EOLIAN_PROP_GET, desc, tmpbuf);
eina_strbuf_append(str_op, eina_strbuf_string_get(tmpbuf));
free(desc);
}
}
eina_iterator_free(itr);
//Methods
itr = eolian_class_functions_get(class, EOLIAN_METHOD);
EINA_ITERATOR_FOREACH(itr, fn)
{
if (eolian_function_is_legacy_only(fn, EOLIAN_METHOD))
continue; continue;
Eolian_Function_Type ftype = EOLIAN_UNRESOLVED;
const Eolian_Function *fid = eolian_implement_function_get(impl, &ftype);
char *desc = _source_desc_get(eolian_function_description_get(fn, EOLIAN_METHOD)); Eina_Bool prop_read = (ftype == EOLIAN_PROPERTY || ftype == EOLIAN_PROP_GET);
eo_op_desc_generate(class, fn, EOLIAN_METHOD, desc, tmpbuf); Eina_Bool prop_write = (ftype == EOLIAN_PROPERTY || ftype == EOLIAN_PROP_SET);
eina_strbuf_append(str_op, eina_strbuf_string_get(tmpbuf));
free(desc); if (!prop_read && !prop_write && !eolian_function_is_legacy_only(fid, EOLIAN_METHOD))
_desc_generate(class, fid, EOLIAN_METHOD, tmpbuf, str_op);
if (prop_write && !eolian_function_is_legacy_only(fid, EOLIAN_PROP_SET))
_desc_generate(class, fid, EOLIAN_PROP_SET, tmpbuf, str_op);
if (prop_read && !eolian_function_is_legacy_only(fid, EOLIAN_PROP_GET))
_desc_generate(class, fid, EOLIAN_PROP_GET, tmpbuf, str_op);
} }
eina_iterator_free(itr); eina_iterator_free(itr);
}
itr = eolian_class_events_get(class); itr = eolian_class_events_get(class);
EINA_ITERATOR_FOREACH(itr, event) EINA_ITERATOR_FOREACH(itr, event)
@ -921,7 +909,6 @@ eo_source_generate(const Eolian_Class *class, Eina_Strbuf *buf)
{ {
Eina_Bool ret = EINA_FALSE; Eina_Bool ret = EINA_FALSE;
Eina_Iterator *itr; Eina_Iterator *itr;
Eolian_Function *fn;
Eina_Strbuf *str_bodyf = eina_strbuf_new(); Eina_Strbuf *str_bodyf = eina_strbuf_new();
@ -930,33 +917,36 @@ eo_source_generate(const Eolian_Class *class, Eina_Strbuf *buf)
if (!eo_source_beginning_generate(class, buf)) goto end; if (!eo_source_beginning_generate(class, buf)) goto end;
//Properties if ((itr = eolian_class_implements_get(class)))
itr = eolian_class_functions_get(class, EOLIAN_PROPERTY);
EINA_ITERATOR_FOREACH(itr, fn)
{ {
const Eolian_Function_Type ftype = eolian_function_type_get(fn); const Eolian_Implement *impl;
EINA_ITERATOR_FOREACH(itr, impl)
Eina_Bool prop_read = ( ftype == EOLIAN_PROP_SET ) ? EINA_FALSE : EINA_TRUE;
Eina_Bool prop_write = ( ftype == EOLIAN_PROP_GET ) ? EINA_FALSE : EINA_TRUE;
if (prop_write)
{ {
if (!eo_bind_func_generate(class, fn, EOLIAN_PROP_SET, str_bodyf, NULL)) goto end; if (eolian_implement_class_get(impl) != class)
} continue;
if (prop_read) Eolian_Function_Type ftype = EOLIAN_UNRESOLVED;
const Eolian_Function *fid = eolian_implement_function_get(impl, &ftype);
switch (ftype)
{ {
if (!eo_bind_func_generate(class, fn, EOLIAN_PROP_GET, str_bodyf, NULL)) goto end; case EOLIAN_PROP_GET: case EOLIAN_PROP_SET:
if (!eo_bind_func_generate(class, fid, ftype, str_bodyf, NULL))
goto end;
break;
case EOLIAN_PROPERTY:
if (!eo_bind_func_generate(class, fid, EOLIAN_PROP_SET, str_bodyf, NULL))
goto end;
if (!eo_bind_func_generate(class, fid, EOLIAN_PROP_GET, str_bodyf, NULL))
goto end;
break;
default:
if (!eo_bind_func_generate(class, fid, EOLIAN_UNRESOLVED, str_bodyf, NULL))
goto end;
break;
} }
} }
eina_iterator_free(itr); eina_iterator_free(itr);
itr = NULL;
//Methods
itr = eolian_class_functions_get(class, EOLIAN_METHOD);
EINA_ITERATOR_FOREACH(itr, fn)
{
if (!eo_bind_func_generate(class, fn, EOLIAN_UNRESOLVED, str_bodyf, NULL)) goto end;
} }
eina_iterator_free(itr);
eina_strbuf_append(buf, eina_strbuf_string_get(str_bodyf)); eina_strbuf_append(buf, eina_strbuf_string_get(str_bodyf));
eina_strbuf_reset(str_bodyf); eina_strbuf_reset(str_bodyf);
@ -965,6 +955,7 @@ eo_source_generate(const Eolian_Class *class, Eina_Strbuf *buf)
ret = EINA_TRUE; ret = EINA_TRUE;
end: end:
if (itr) eina_iterator_free(itr);
eina_hash_free(_funcs_params_init); eina_hash_free(_funcs_params_init);
_funcs_params_init = NULL; _funcs_params_init = NULL;
eina_strbuf_free(str_bodyf); eina_strbuf_free(str_bodyf);

View File

@ -251,27 +251,6 @@ impl_source_generate(const Eolian_Class *class, Eina_Strbuf *buffer)
eina_strbuf_prepend_printf(buffer, "%s", eina_strbuf_string_get(begin)); eina_strbuf_prepend_printf(buffer, "%s", eina_strbuf_string_get(begin));
eina_strbuf_free(begin); eina_strbuf_free(begin);
/* Properties */
itr = eolian_class_functions_get(class, EOLIAN_PROPERTY);
EINA_ITERATOR_FOREACH(itr, foo)
{
const Eolian_Function_Type ftype = eolian_function_type_get(foo);
if (ftype == EOLIAN_PROP_SET || ftype == EOLIAN_PROPERTY)
_prototype_generate(foo, EOLIAN_PROP_SET, data_type_buf, NULL, buffer);
if (ftype == EOLIAN_PROP_GET || ftype == EOLIAN_PROPERTY)
_prototype_generate(foo, EOLIAN_PROP_GET, data_type_buf, NULL, buffer);
}
eina_iterator_free(itr);
/* Methods */
itr = eolian_class_functions_get(class, EOLIAN_METHOD);
EINA_ITERATOR_FOREACH(itr, foo)
{
_prototype_generate(foo, EOLIAN_METHOD, data_type_buf, NULL, buffer);
}
eina_iterator_free(itr);
itr = eolian_class_implements_get(class); itr = eolian_class_implements_get(class);
if (itr) if (itr)
{ {
@ -280,24 +259,26 @@ impl_source_generate(const Eolian_Class *class, Eina_Strbuf *buffer)
EINA_ITERATOR_FOREACH(itr, impl_desc) EINA_ITERATOR_FOREACH(itr, impl_desc)
{ {
Eolian_Function_Type ftype; Eolian_Function_Type ftype;
const Eolian_Class *cl = eolian_implement_class_get(impl_desc); Eolian_Implement *idesc = (eolian_implement_class_get(impl_desc) == class) ? NULL : impl_desc;
if (cl == class)
continue;
if (!(foo = eolian_implement_function_get(impl_desc, &ftype))) if (!(foo = eolian_implement_function_get(impl_desc, &ftype)))
{ {
const char *name = names[eolian_implement_is_prop_get(impl_desc) const char *name = names[eolian_implement_is_prop_get(impl_desc)
| (eolian_implement_is_prop_set(impl_desc) << 1)]; | (eolian_implement_is_prop_set(impl_desc) << 1)];
ERR ("Failed to generate implementation of %s%s - missing form super class", ERR ("Failed to generate implementation of %s%s - missing from class",
name, eolian_implement_full_name_get(impl_desc)); name, eolian_implement_full_name_get(impl_desc));
goto end; goto end;
} }
switch (ftype) switch (ftype)
{ {
case EOLIAN_PROP_SET: case EOLIAN_PROP_GET: case EOLIAN_PROP_SET: case EOLIAN_PROP_GET:
_prototype_generate(foo, ftype, data_type_buf, impl_desc, buffer); _prototype_generate(foo, ftype, data_type_buf, idesc, buffer);
break;
case EOLIAN_PROPERTY:
_prototype_generate(foo, EOLIAN_PROP_SET, data_type_buf, idesc, buffer);
_prototype_generate(foo, EOLIAN_PROP_GET, data_type_buf, idesc, buffer);
break; break;
default: default:
_prototype_generate(foo, eolian_function_type_get(foo), data_type_buf, impl_desc, buffer); _prototype_generate(foo, eolian_function_type_get(foo), data_type_buf, idesc, buffer);
break; break;
} }
} }

View File

@ -355,8 +355,6 @@ end:
Eina_Bool Eina_Bool
legacy_header_generate(const Eolian_Class *class, Eina_Strbuf *buf) legacy_header_generate(const Eolian_Class *class, Eina_Strbuf *buf)
{ {
const Eolian_Function_Type ftype_order[] = {EOLIAN_PROPERTY, EOLIAN_METHOD};
_class_env_create(class, NULL, &class_env); _class_env_create(class, NULL, &class_env);
const char *desc = eolian_class_description_get(class); const char *desc = eolian_class_description_get(class);
@ -372,28 +370,28 @@ legacy_header_generate(const Eolian_Class *class, Eina_Strbuf *buf)
eina_strbuf_free(linedesc); eina_strbuf_free(linedesc);
} }
int i; Eina_Iterator *itr = eolian_class_implements_get(class);
for (i = 0; i < 2; i++) if (itr)
{ {
void *data; const Eolian_Implement *impl;
Eina_Iterator *itr = eolian_class_functions_get(class, ftype_order[i]); EINA_ITERATOR_FOREACH(itr, impl)
EINA_ITERATOR_FOREACH(itr, data)
{ {
const Eolian_Function_Type ftype = eolian_function_type_get((Eolian_Function*)data); if (eolian_implement_class_get(impl) != class)
Eina_Bool prop_read = (ftype == EOLIAN_PROPERTY || ftype == EOLIAN_PROP_GET ) ? EINA_TRUE : EINA_FALSE ; continue;
Eina_Bool prop_write = (ftype == EOLIAN_PROPERTY || ftype == EOLIAN_PROP_SET ) ? EINA_TRUE : EINA_FALSE ; Eolian_Function_Type ftype = EOLIAN_UNRESOLVED;
const Eolian_Function *fid = eolian_implement_function_get(impl, &ftype);
if (!prop_read && !prop_write) switch (ftype)
{ {
_eapi_decl_func_generate(class, (Eolian_Function*)data, EOLIAN_METHOD, buf); case EOLIAN_PROP_GET: case EOLIAN_PROP_SET:
} _eapi_decl_func_generate(class, fid, ftype, buf);
if (prop_write) break;
{ case EOLIAN_PROPERTY:
_eapi_decl_func_generate(class, (Eolian_Function*)data, EOLIAN_PROP_SET, buf); _eapi_decl_func_generate(class, fid, EOLIAN_PROP_SET, buf);
} _eapi_decl_func_generate(class, fid, EOLIAN_PROP_GET, buf);
if (prop_read) break;
{ default:
_eapi_decl_func_generate(class, (Eolian_Function*)data, EOLIAN_PROP_GET, buf); _eapi_decl_func_generate(class, fid, EOLIAN_METHOD, buf);
break;
} }
} }
eina_iterator_free(itr); eina_iterator_free(itr);
@ -406,40 +404,37 @@ legacy_source_generate(const Eolian_Class *class, Eina_Strbuf *buf)
{ {
Eina_Bool ret = EINA_FALSE; Eina_Bool ret = EINA_FALSE;
Eina_Iterator *itr; Eina_Iterator *itr;
Eolian_Function *fn;
_class_env_create(class, NULL, &class_env); _class_env_create(class, NULL, &class_env);
Eina_Strbuf *tmpbuf = eina_strbuf_new(); Eina_Strbuf *tmpbuf = eina_strbuf_new();
Eina_Strbuf *str_bodyf = eina_strbuf_new(); Eina_Strbuf *str_bodyf = eina_strbuf_new();
//Properties if ((itr = eolian_class_implements_get(class)))
itr = eolian_class_functions_get(class, EOLIAN_PROPERTY);
EINA_ITERATOR_FOREACH(itr, fn)
{ {
const Eolian_Function_Type ftype = eolian_function_type_get(fn); const Eolian_Implement *impl;
EINA_ITERATOR_FOREACH(itr, impl)
Eina_Bool prop_read = ( ftype == EOLIAN_PROP_SET ) ? EINA_FALSE : EINA_TRUE;
Eina_Bool prop_write = ( ftype == EOLIAN_PROP_GET ) ? EINA_FALSE : EINA_TRUE;
if (prop_write)
{ {
_eapi_func_generate(class, fn, EOLIAN_PROP_SET, str_bodyf); if (eolian_implement_class_get(impl) != class)
} continue;
if (prop_read) Eolian_Function_Type ftype = EOLIAN_UNRESOLVED;
const Eolian_Function *fid = eolian_implement_function_get(impl, &ftype);
switch (ftype)
{ {
_eapi_func_generate(class, fn, EOLIAN_PROP_GET, str_bodyf); case EOLIAN_PROP_GET: case EOLIAN_PROP_SET:
_eapi_func_generate(class, fid, ftype, str_bodyf);
break;
case EOLIAN_PROPERTY:
_eapi_func_generate(class, fid, EOLIAN_PROP_SET, str_bodyf);
_eapi_func_generate(class, fid, EOLIAN_PROP_GET, str_bodyf);
break;
default:
_eapi_func_generate(class, fid, EOLIAN_METHOD, str_bodyf);
break;
} }
} }
eina_iterator_free(itr); eina_iterator_free(itr);
//Methods
itr = eolian_class_functions_get(class, EOLIAN_METHOD);
EINA_ITERATOR_FOREACH(itr, fn)
{
_eapi_func_generate(class, fn, EOLIAN_UNRESOLVED, str_bodyf);
} }
eina_iterator_free(itr);
eina_strbuf_append(buf, eina_strbuf_string_get(str_bodyf)); eina_strbuf_append(buf, eina_strbuf_string_get(str_bodyf));

View File

@ -342,7 +342,7 @@ pasttags:
static Eina_Bool static Eina_Bool
_db_build_implement(Eolian_Class *cl, Eolian_Function *foo_id) _db_build_implement(Eolian_Class *cl, Eolian_Function *foo_id)
{ {
if (foo_id->impl || foo_id->get_virtual_pure || foo_id->set_virtual_pure) if (foo_id->impl)
return EINA_TRUE; return EINA_TRUE;
Eolian_Implement *impl = calloc(1, sizeof(Eolian_Implement)); Eolian_Implement *impl = calloc(1, sizeof(Eolian_Implement));

View File

@ -7,6 +7,19 @@ typedef struct
} Object_Impl_Data; } Object_Impl_Data;
EOLIAN static void
_object_impl_base_constructor(Eo *obj, Object_Impl_Data *pd)
{
}
EOLIAN static void
_object_impl_base_destructor(Eo *obj, Object_Impl_Data *pd)
{
eo_do_super(obj, OBJECT_IMPL_CLASS, base_destructor());
}
EOLIAN static Eina_Bool EOLIAN static Eina_Bool
_object_impl_a_set(Eo *obj, Object_Impl_Data *pd, const char *part, const Eina_List *value) _object_impl_a_set(Eo *obj, Object_Impl_Data *pd, const char *part, const Eina_List *value)
{ {
@ -49,19 +62,6 @@ _object_impl_foo2(const Eo *obj, Object_Impl_Data *pd, int a, const char *b)
} }
EOLIAN static void
_object_impl_base_constructor(Eo *obj, Object_Impl_Data *pd)
{
}
EOLIAN static void
_object_impl_base_destructor(Eo *obj, Object_Impl_Data *pd)
{
eo_do_super(obj, OBJECT_IMPL_CLASS, base_destructor());
}
EOLIAN static void EOLIAN static void
_object_impl_class_constructor(Eo_Class *klass) _object_impl_class_constructor(Eo_Class *klass)
{ {

View File

@ -7,6 +7,19 @@ typedef struct
} Object_Impl_Data; } Object_Impl_Data;
EOLIAN static void
_object_impl_base_constructor(Eo *obj, Object_Impl_Data *pd)
{
}
EOLIAN static void
_object_impl_base_destructor(Eo *obj, Object_Impl_Data *pd)
{
eo_do_super(obj, OBJECT_IMPL_CLASS, base_destructor());
}
EOLIAN static Eina_Bool EOLIAN static Eina_Bool
_object_impl_a_set(Eo *obj, Object_Impl_Data *pd, const char *part, const Eina_List *value) _object_impl_a_set(Eo *obj, Object_Impl_Data *pd, const char *part, const Eina_List *value)
{ {
@ -49,19 +62,6 @@ _object_impl_foo2(const Eo *obj, Object_Impl_Data *pd, int a, const char *b)
} }
EOLIAN static void
_object_impl_base_constructor(Eo *obj, Object_Impl_Data *pd)
{
}
EOLIAN static void
_object_impl_base_destructor(Eo *obj, Object_Impl_Data *pd)
{
eo_do_super(obj, OBJECT_IMPL_CLASS, base_destructor());
}
EOLIAN static void EOLIAN static void
_object_impl_class_constructor(Eo_Class *klass) _object_impl_class_constructor(Eo_Class *klass)
{ {