eolian gen2: fully implement the main func for impl gen
This commit is contained in:
parent
9cc0ca20f4
commit
08e2703917
|
@ -813,14 +813,21 @@ eo_gen_source_gen(const Eolian_Class *cl, Eina_Strbuf *buf)
|
||||||
eina_hash_free(_funcs_params_init);
|
eina_hash_free(_funcs_params_init);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gen_proto(const Eolian_Class *cl, const Eolian_Function *fid,
|
||||||
|
Eolian_Function_Type ftype, Eina_Strbuf *buf,
|
||||||
|
const Eolian_Implement *impl, const char *dtype)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
eo_gen_impl_gen(const Eolian_Class *cl, Eina_Strbuf *buf)
|
eo_gen_impl_gen(const Eolian_Class *cl, Eina_Strbuf *buf)
|
||||||
{
|
{
|
||||||
if (!cl)
|
if (!cl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
char *cname = NULL, *cnameu = NULL, *cnamel = NULL;
|
char *cname = NULL, *cnamel = NULL;
|
||||||
eo_gen_class_names_get(cl, &cname, &cnameu, &cnamel);
|
eo_gen_class_names_get(cl, &cname, NULL, &cnamel);
|
||||||
|
|
||||||
Eina_Strbuf *beg = eina_strbuf_new();
|
Eina_Strbuf *beg = eina_strbuf_new();
|
||||||
|
|
||||||
|
@ -860,7 +867,69 @@ eo_gen_impl_gen(const Eolian_Class *cl, Eina_Strbuf *buf)
|
||||||
|
|
||||||
eina_strbuf_free(beg);
|
eina_strbuf_free(beg);
|
||||||
|
|
||||||
|
/* method section */
|
||||||
|
{
|
||||||
|
Eina_Iterator *itr = eolian_class_implements_get(cl);
|
||||||
|
const Eolian_Implement *imp;
|
||||||
|
EINA_ITERATOR_FOREACH(itr, imp)
|
||||||
|
{
|
||||||
|
Eolian_Function_Type ftype = EOLIAN_UNRESOLVED;
|
||||||
|
const Eolian_Function *fid = eolian_implement_function_get(imp, &ftype);
|
||||||
|
switch (ftype)
|
||||||
|
{
|
||||||
|
case EOLIAN_PROP_GET:
|
||||||
|
case EOLIAN_PROP_SET:
|
||||||
|
_gen_proto(cl, fid, ftype, buf, imp, adt);
|
||||||
|
break;
|
||||||
|
case EOLIAN_PROPERTY:
|
||||||
|
_gen_proto(cl, fid, EOLIAN_PROP_SET, buf, imp, adt);
|
||||||
|
_gen_proto(cl, fid, EOLIAN_PROP_GET, buf, imp, adt);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
_gen_proto(cl, fid, EOLIAN_UNRESOLVED, buf, imp, adt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
eina_iterator_free(itr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eolian_class_ctor_enable_get(cl))
|
||||||
|
{
|
||||||
|
char fname[128];
|
||||||
|
snprintf(fname, sizeof(fname), "_%s_class_constructor", cnamel);
|
||||||
|
if (!_function_exists(fname, buf))
|
||||||
|
{
|
||||||
|
printf("generating function %s...\n", fname);
|
||||||
|
eina_strbuf_append_printf(buf,
|
||||||
|
"EOLIAN static void\n"
|
||||||
|
"_%s_class_constructor(Efl_Class *klass)\n"
|
||||||
|
"{\n"
|
||||||
|
"}\n\n", cnamel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eolian_class_dtor_enable_get(cl))
|
||||||
|
{
|
||||||
|
char fname[128];
|
||||||
|
snprintf(fname, sizeof(fname), "_%s_class_destructor", cnamel);
|
||||||
|
if (!_function_exists(fname, buf))
|
||||||
|
{
|
||||||
|
printf("generating function %s...\n", fname);
|
||||||
|
eina_strbuf_append_printf(buf,
|
||||||
|
"EOLIAN static void\n"
|
||||||
|
"_%s_class_destructor(Efl_Class *klass)\n"
|
||||||
|
"{\n"
|
||||||
|
"}\n\n", cnamel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("removing includes for \"%s.eo.c\"\n", cnamel);
|
||||||
|
char ibuf[512];
|
||||||
|
snprintf(ibuf, sizeof(ibuf), "\n#include \"%s.eo.c\"\n", cnamel);
|
||||||
|
eina_strbuf_replace_all(buf, ibuf, "\n");
|
||||||
|
|
||||||
|
printf("generating include for \"%s.eo.c\"\n", cnamel);
|
||||||
|
eina_strbuf_append_printf(buf, "#include \"%s.eo.c\"\n", cnamel);
|
||||||
|
|
||||||
free(cname);
|
free(cname);
|
||||||
free(cnameu);
|
|
||||||
free(cnamel);
|
free(cnamel);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue