free(sgn);
}
-static void
-eo_definitions_impl_def_free(Eo_Implement_Def *impl)
-{
- if (impl->meth_name)
- eina_stringshare_del(impl->meth_name);
-
- free(impl);
-}
-
void
eo_definitions_class_def_free(Eo_Class_Def *kls)
{
Eo_Property_Def *prop;
Eo_Method_Def *meth;
Eo_Event_Def *sgn;
- Eo_Implement_Def *impl;
+ Eolian_Implement *impl;
if (kls->name)
eina_stringshare_del(kls->name);
if (s) eina_stringshare_del(s);
EINA_LIST_FREE(kls->implements, impl)
- eo_definitions_impl_def_free(impl);
+ database_implement_del(impl);
EINA_LIST_FREE(kls->constructors, meth)
eo_definitions_method_def_free(meth);
eo_definitions_event_def_free(tmp->event);
if (tmp->impl)
- eo_definitions_impl_def_free(tmp->impl);
+ database_implement_del(tmp->impl);
}
parse_implement(Eo_Lexer *ls, Eina_Bool iface)
{
Eina_Strbuf *buf = NULL;
- Eo_Implement_Def *impl = NULL;
+ Eolian_Implement *impl = NULL;
buf = push_strbuf(ls);
- impl = calloc(1, sizeof(Eo_Implement_Def));
+ impl = calloc(1, sizeof(Eolian_Implement));
ls->tmp.impl = impl;
if (iface)
check_kw(ls, KW_class);
eina_strbuf_append(buf, "constructor");
}
check_next(ls, ';');
- impl->meth_name = eina_stringshare_add(eina_strbuf_string_get(buf));
+ impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf));
pop_strbuf(ls);
return;
}
}
}
check_next(ls, ';');
- impl->meth_name = eina_stringshare_add(eina_strbuf_string_get(buf));
+ impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf));
pop_strbuf(ls);
return;
}
}
end:
check_next(ls, ';');
- impl->meth_name = eina_stringshare_add(eina_strbuf_string_get(buf));
+ impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf));
pop_strbuf(ls);
}
Eo_Param_Def *param;
Eo_Accessor_Def *accessor;
Eo_Event_Def *sgn;
- Eo_Implement_Def *impl;
+ Eolian_Implement *impl;
printf("Class: %s (%s)\n",
kls->name, (kls->comment ? kls->comment : "-"));
printf("\n");
printf(" implements:");
EINA_LIST_FOREACH(kls->implements, l, impl)
- printf(" %s", impl->meth_name);
+ printf(" %s", impl->full_name);
printf("\n");
printf(" events:\n");
EINA_LIST_FOREACH(kls->events, l, sgn)
Eo_Param_Def *param;
Eo_Accessor_Def *accessor;
Eo_Event_Def *event;
- Eo_Implement_Def *impl;
+ Eolian_Implement *impl;
Eolian_Class *class = database_class_add(kls->name, kls->type);
Eina_Bool is_iface = (kls->type == EOLIAN_CLASS_INTERFACE);
EINA_LIST_FOREACH(kls->implements, l, impl)
{
- const char *impl_name = impl->meth_name;
+ const char *impl_name = impl->full_name;
if (!strcmp(impl_name, "class.constructor"))
{
database_class_ctor_enable_set(class, EINA_TRUE);
database_function_set_as_virtual_pure(foo_id, ftype);
continue;
}
- Eolian_Implement *impl_desc = database_implement_new(impl_name);
- database_class_implement_add(class, impl_desc);
+ database_class_implement_add(class, impl);
+ eina_list_data_set(l, NULL); /* prevent double free */
}
EINA_LIST_FOREACH(kls->events, l, event)