forked from enlightenment/efl
Eolian/Generator: concentrate the function name calculation to one
place. Instead of having the calculation (class name + function name + set/get) in many places in the code, it is now in one place and accessible via a function environment structure.
This commit is contained in:
parent
b9b90ac204
commit
233650ed9d
|
@ -48,29 +48,70 @@ _class_env_create(const Eolian_Class class, const char *over_classname, _eolian_
|
|||
}
|
||||
|
||||
void
|
||||
_class_func_names_fill(const Eolian_Class class EINA_UNUSED, const char *over_classname EINA_UNUSED, const char *funcname)
|
||||
_class_func_env_create(const Eolian_Class class, const char *funcname, Eolian_Function_Type ftype, _eolian_class_func_vars *env)
|
||||
{
|
||||
char *p;
|
||||
if (funcname)
|
||||
const char *suffix = "";
|
||||
const char *legacy = NULL;
|
||||
Eolian_Function funcid = eolian_class_function_find_by_name(class, funcname, ftype);
|
||||
if (ftype == EOLIAN_PROP_GET)
|
||||
{
|
||||
strncpy(capfunc, funcname, sizeof(capfunc) - 1);
|
||||
p = capfunc;
|
||||
eina_str_toupper(&p);
|
||||
suffix = "_get";
|
||||
legacy = eolian_function_data_get(funcid, EOLIAN_LEGACY_GET);
|
||||
}
|
||||
if (ftype == EOLIAN_PROP_SET)
|
||||
{
|
||||
suffix = "_set";
|
||||
legacy = eolian_function_data_get(funcid, EOLIAN_LEGACY_SET);
|
||||
}
|
||||
if (!legacy) legacy = eolian_function_data_get(funcid, EOLIAN_LEGACY);
|
||||
|
||||
_eolian_class_vars tmp_env;
|
||||
_class_env_create(class, NULL, &tmp_env);
|
||||
|
||||
p = strncpy(env->upper_func, funcname, PATH_MAX - 1);
|
||||
eina_str_toupper(&p);
|
||||
|
||||
sprintf(p = env->upper_eo_func, "%s_%s%s", tmp_env.upper_eo_prefix, funcname, suffix);
|
||||
eina_str_toupper(&p);
|
||||
|
||||
sprintf(p = env->lower_eo_func, "%s_%s%s", tmp_env.lower_eo_prefix, funcname, suffix);
|
||||
eina_str_tolower(&p);
|
||||
|
||||
env->legacy_func[0] = '\0';
|
||||
if (legacy && !strcmp(legacy, "null")) goto end;
|
||||
if (legacy)
|
||||
{
|
||||
sprintf(p = env->legacy_func, "%s", legacy);
|
||||
goto end;
|
||||
}
|
||||
|
||||
legacy = eolian_class_legacy_prefix_get(class);
|
||||
if (legacy && !strcmp(legacy, "null")) goto end;
|
||||
|
||||
sprintf(env->legacy_func, "%s_%s%s", legacy?legacy:tmp_env.lower_classname, funcname, suffix);
|
||||
|
||||
end:
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_template_fill(Eina_Strbuf *buf, const char *templ, const Eolian_Class class, const char *classname, const char *funcname, Eina_Bool reset)
|
||||
{
|
||||
_eolian_class_vars tmp_env;
|
||||
_eolian_class_func_vars tmp_func_env;
|
||||
_class_env_create(class, classname, &tmp_env);
|
||||
_class_func_names_fill(NULL, NULL, funcname);
|
||||
if (funcname)
|
||||
_class_func_env_create(class, funcname, EOLIAN_UNRESOLVED, &tmp_func_env);
|
||||
if (buf)
|
||||
{
|
||||
if (reset) eina_strbuf_reset(buf);
|
||||
if (templ) eina_strbuf_append(buf, templ);
|
||||
if (funcname) eina_strbuf_replace_all(buf, "@#func", funcname);
|
||||
eina_strbuf_replace_all(buf, "@#FUNC", capfunc);
|
||||
if (funcname)
|
||||
{
|
||||
eina_strbuf_replace_all(buf, "@#func", funcname);
|
||||
eina_strbuf_replace_all(buf, "@#FUNC", tmp_func_env.upper_func);
|
||||
}
|
||||
eina_strbuf_replace_all(buf, "@#Class", tmp_env.full_classname);
|
||||
eina_strbuf_replace_all(buf, "@#class", tmp_env.lower_classname);
|
||||
eina_strbuf_replace_all(buf, "@#CLASS", tmp_env.upper_classname);
|
||||
|
|
|
@ -44,6 +44,16 @@ typedef struct
|
|||
char lower_classname[PATH_MAX];
|
||||
}_eolian_class_vars;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char upper_func[PATH_MAX];
|
||||
|
||||
char upper_eo_func[PATH_MAX];
|
||||
char lower_eo_func[PATH_MAX];
|
||||
|
||||
char legacy_func[PATH_MAX];
|
||||
}_eolian_class_func_vars;
|
||||
|
||||
void _template_fill(Eina_Strbuf *buf, const char *templ, const Eolian_Class class, const char *classname, const char *funcname, Eina_Bool reset);
|
||||
|
||||
char *_nextline(char *str, unsigned int lines);
|
||||
|
@ -54,7 +64,6 @@ char *_source_desc_get(const char *str);
|
|||
|
||||
void _class_env_create(const Eolian_Class class, const char *over_classname, _eolian_class_vars *env);
|
||||
|
||||
void _class_func_names_fill(const Eolian_Class class, const char *classname, const char *funcname);
|
||||
void _class_func_env_create(const Eolian_Class class, const char *funcname, Eolian_Function_Type ftype EINA_UNUSED, _eolian_class_func_vars *env);
|
||||
|
||||
char capfunc[0xFF];
|
||||
#endif
|
||||
|
|
|
@ -62,7 +62,7 @@ const Eo_Class *@#class_class_get(void) EINA_CONST;\n\
|
|||
static const char
|
||||
tmpl_eo_funcdef_doxygen[] = "\
|
||||
/**\n\
|
||||
* @def @#eoprefix_@#func\n\
|
||||
* @def %s\n\
|
||||
*\n\
|
||||
@#desc\n\
|
||||
*\n\
|
||||
|
@ -71,9 +71,6 @@ tmpl_eo_funcdef_doxygen[] = "\
|
|||
*\n\
|
||||
*/\n";
|
||||
|
||||
static const char
|
||||
tmpl_eo_funcdef[] = "EAPI @#rettype @#eoprefix_@#func(@#full_params);\n";
|
||||
|
||||
static const char
|
||||
tmpl_eo_pardesc[] =" * @param[%s] %s %s\n";
|
||||
|
||||
|
@ -85,6 +82,7 @@ tmpl_eo_retdesc[] =" * @return %s\n";
|
|||
static Eina_Bool
|
||||
eo_fundef_generate(const Eolian_Class class, Eolian_Function func, Eolian_Function_Type ftype, Eina_Strbuf *functext)
|
||||
{
|
||||
_eolian_class_func_vars func_env;
|
||||
const char *str_dir[] = {"in", "out", "inout"};
|
||||
const Eina_List *l;
|
||||
void *data;
|
||||
|
@ -96,6 +94,7 @@ eo_fundef_generate(const Eolian_Class class, Eolian_Function func, Eolian_Functi
|
|||
Eina_Bool ret_const = EINA_FALSE;
|
||||
Eolian_Function_Scope scope = eolian_function_scope_get(func);
|
||||
|
||||
_class_func_env_create(class, eolian_function_name_get(func), ftype, &func_env);
|
||||
char *fsuffix = "";
|
||||
rettype = eolian_function_return_type_get(func, ftype);
|
||||
if (ftype == EOLIAN_PROP_GET)
|
||||
|
@ -122,15 +121,14 @@ eo_fundef_generate(const Eolian_Class class, Eolian_Function func, Eolian_Functi
|
|||
Eina_Strbuf *str_func = eina_strbuf_new();
|
||||
if (scope == EOLIAN_SCOPE_PROTECTED)
|
||||
eina_strbuf_append_printf(str_func, "#ifdef %s_PROTECTED\n", class_env.upper_classname);
|
||||
_template_fill(str_func, tmpl_eo_funcdef_doxygen, class, NULL, funcname, EINA_FALSE);
|
||||
_template_fill(str_func, tmpl_eo_funcdef, class, NULL, funcname, EINA_FALSE);
|
||||
|
||||
eina_strbuf_append_printf(str_func, tmpl_eo_funcdef_doxygen, func_env.lower_eo_func);
|
||||
eina_strbuf_append_printf(str_func, "EAPI @#rettype %s(@#full_params);\n", func_env.lower_eo_func);
|
||||
|
||||
if (scope == EOLIAN_SCOPE_PROTECTED)
|
||||
eina_strbuf_append_printf(str_func, "#endif\n");
|
||||
eina_strbuf_append_printf(str_func, "\n");
|
||||
|
||||
eina_strbuf_replace_all(str_func, "@#EOPREFIX", class_env.upper_eo_prefix);
|
||||
eina_strbuf_replace_all(str_func, "@#eoprefix", class_env.lower_eo_prefix);
|
||||
|
||||
Eina_Strbuf *linedesc = eina_strbuf_new();
|
||||
eina_strbuf_append(linedesc, funcdesc ? funcdesc : "No description supplied.");
|
||||
if (eina_strbuf_length_get(linedesc))
|
||||
|
@ -226,8 +224,8 @@ Eina_Bool
|
|||
eo_header_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
||||
{
|
||||
const Eolian_Function_Type ftype_order[] = {EOLIAN_CTOR, EOLIAN_PROPERTY, EOLIAN_METHOD};
|
||||
const Eina_List *l;
|
||||
void *data;
|
||||
const Eina_List *itr;
|
||||
Eolian_Function fid;
|
||||
char *tmpstr = malloc(0x1FF);
|
||||
Eina_Strbuf * str_hdr = eina_strbuf_new();
|
||||
|
||||
|
@ -247,7 +245,7 @@ eo_header_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
eina_strbuf_append(buf, eina_strbuf_string_get(linedesc));
|
||||
eina_strbuf_free(linedesc);
|
||||
|
||||
_template_fill(str_hdr, tmpl_eo_obj_header, class, NULL, "", EINA_TRUE);
|
||||
_template_fill(str_hdr, tmpl_eo_obj_header, class, NULL, NULL, EINA_TRUE);
|
||||
|
||||
eina_strbuf_replace_all(str_hdr, "@#EOPREFIX", class_env.upper_eo_prefix);
|
||||
eina_strbuf_replace_all(str_hdr, "@#eoprefix", class_env.lower_eo_prefix);
|
||||
|
@ -257,7 +255,7 @@ eo_header_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
Eina_Strbuf *tmpbuf = eina_strbuf_new();
|
||||
|
||||
Eolian_Event event;
|
||||
EINA_LIST_FOREACH(eolian_class_events_list_get(class), l, event)
|
||||
EINA_LIST_FOREACH(eolian_class_events_list_get(class), itr, event)
|
||||
{
|
||||
const char *evname = NULL;
|
||||
const char *evdesc = NULL;
|
||||
|
@ -270,32 +268,34 @@ eo_header_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
eina_strbuf_prepend(tmpbuf," * ");
|
||||
eina_strbuf_append_printf(str_ev, "\n/**\n%s\n */\n", eina_strbuf_string_get(tmpbuf));
|
||||
|
||||
_template_fill(tmpbuf, "@#CLASS_EVENT_@#FUNC", class, NULL, evname, EINA_TRUE);
|
||||
eina_strbuf_reset(tmpbuf);
|
||||
eina_strbuf_append_printf(tmpbuf, "%s_EVENT_%s", class_env.upper_classname, evname);
|
||||
eina_strbuf_replace_all(tmpbuf, ",", "_");
|
||||
const char* s = eina_strbuf_string_get(tmpbuf);
|
||||
char* s = (char *)eina_strbuf_string_get(tmpbuf);
|
||||
eina_str_toupper(&s);
|
||||
eina_strbuf_append_printf(str_ev, "#define %s (&(_%s))\n", s, s);
|
||||
eina_strbuf_append_printf(str_extrn_ev, "EAPI extern const Eo_Event_Description _%s;\n", s);
|
||||
}
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 3; i++)
|
||||
EINA_LIST_FOREACH(eolian_class_functions_list_get(class, ftype_order[i]), l, data)
|
||||
EINA_LIST_FOREACH(eolian_class_functions_list_get(class, ftype_order[i]), itr, fid)
|
||||
{
|
||||
const Eolian_Function_Type ftype = eolian_function_type_get((Eolian_Function)data);
|
||||
const Eolian_Function_Type ftype = eolian_function_type_get(fid);
|
||||
Eina_Bool prop_read = (ftype == EOLIAN_PROPERTY || ftype == EOLIAN_PROP_GET ) ? EINA_TRUE : EINA_FALSE ;
|
||||
Eina_Bool prop_write = (ftype == EOLIAN_PROPERTY || ftype == EOLIAN_PROP_SET ) ? EINA_TRUE : EINA_FALSE ;
|
||||
|
||||
if (!prop_read && !prop_write)
|
||||
{
|
||||
eo_fundef_generate(class, (Eolian_Function)data, EOLIAN_UNRESOLVED, str_hdr);
|
||||
eo_fundef_generate(class, fid, EOLIAN_UNRESOLVED, str_hdr);
|
||||
}
|
||||
if (prop_write)
|
||||
{
|
||||
eo_fundef_generate(class, (Eolian_Function)data, EOLIAN_PROP_SET, str_hdr);
|
||||
eo_fundef_generate(class, fid, EOLIAN_PROP_SET, str_hdr);
|
||||
}
|
||||
if (prop_read)
|
||||
{
|
||||
eo_fundef_generate(class, (Eolian_Function)data, EOLIAN_PROP_GET, str_hdr);
|
||||
eo_fundef_generate(class, fid, EOLIAN_PROP_GET, str_hdr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -316,6 +316,7 @@ eo_header_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
static Eina_Bool
|
||||
eo_bind_func_generate(const Eolian_Class class, Eolian_Function funcid, Eolian_Function_Type ftype, Eina_Strbuf *buf, _eolian_class_vars *impl_env)
|
||||
{
|
||||
_eolian_class_func_vars func_env;
|
||||
const char *suffix = "";
|
||||
Eina_Bool var_as_ret = EINA_FALSE;
|
||||
const char *rettype = NULL;
|
||||
|
@ -408,11 +409,11 @@ eo_bind_func_generate(const Eolian_Class class, Eolian_Function funcid, Eolian_F
|
|||
eina_list_count(eolian_property_keys_list_get(funcid)) ||
|
||||
(!var_as_ret && eina_list_count(eolian_parameters_list_get(funcid)) != 0);
|
||||
Eina_Bool ret_is_void = (!rettype || !strcmp(rettype, "void"));
|
||||
_class_func_env_create(class, eolian_function_name_get(funcid), ftype, &func_env);
|
||||
eina_strbuf_append_printf(eo_func_decl,
|
||||
"EAPI EO_%sFUNC_BODY%s(%s_%s%s",
|
||||
"EAPI EO_%sFUNC_BODY%s(%s",
|
||||
ret_is_void?"VOID_":"", has_params?"V":"",
|
||||
class_env.lower_eo_prefix, eolian_function_name_get(funcid),
|
||||
suffix);
|
||||
func_env.lower_eo_func);
|
||||
if (!ret_is_void)
|
||||
{
|
||||
const char *dflt_ret_val =
|
||||
|
@ -463,15 +464,16 @@ static Eina_Bool
|
|||
eo_op_desc_generate(const Eolian_Class class, Eolian_Function fid, Eolian_Function_Type ftype,
|
||||
const char *desc, Eina_Strbuf *buf)
|
||||
{
|
||||
_eolian_class_func_vars func_env;
|
||||
const char *funcname = eolian_function_name_get(fid);
|
||||
const char *suffix = "";
|
||||
|
||||
eina_strbuf_reset(buf);
|
||||
_class_func_names_fill(class, NULL, funcname);
|
||||
_class_func_env_create(class, funcname, ftype, &func_env);
|
||||
if (ftype == EOLIAN_PROP_GET) suffix = "_get";
|
||||
if (ftype == EOLIAN_PROP_SET) suffix = "_set";
|
||||
Eina_Bool is_virtual_pure = eolian_function_is_virtual_pure(fid, ftype);
|
||||
eina_strbuf_append_printf(buf, "\n EO_OP_FUNC(%s_%s%s, ", class_env.lower_eo_prefix, funcname, suffix);
|
||||
eina_strbuf_append_printf(buf, "\n EO_OP_FUNC(%s, ", func_env.lower_eo_func);
|
||||
if (!is_virtual_pure)
|
||||
eina_strbuf_append_printf(buf, "_%s_%s%s, \"%s\"),", class_env.lower_classname, funcname, suffix, desc);
|
||||
else
|
||||
|
@ -494,10 +496,14 @@ eo_source_beginning_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
const char *evname;
|
||||
const char *evdesc;
|
||||
char *evdesc_line1;
|
||||
char *p;
|
||||
|
||||
eina_strbuf_reset(str_ev);
|
||||
eolian_class_event_information_get(event, &evname, NULL, &evdesc);
|
||||
evdesc_line1 = _source_desc_get(evdesc);
|
||||
_template_fill(str_ev, "@#CLASS_EVENT_@#FUNC", class, NULL, evname, EINA_TRUE);
|
||||
eina_strbuf_append_printf(str_ev, "%s_EVENT_%s", class_env.upper_classname, evname);
|
||||
p = (char *)eina_strbuf_string_get(str_ev);
|
||||
eina_str_toupper(&p);
|
||||
eina_strbuf_replace_all(str_ev, ",", "_");
|
||||
|
||||
eina_strbuf_append_printf(tmpbuf,
|
||||
|
@ -562,7 +568,7 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
|
||||
eina_strbuf_reset(tmpbuf);
|
||||
if (eolian_class_ctor_enable_get(class))
|
||||
_template_fill(tmpbuf, "_@#class_class_constructor", class, NULL, "", EINA_TRUE);
|
||||
_template_fill(tmpbuf, "_@#class_class_constructor", class, NULL, NULL, EINA_TRUE);
|
||||
else
|
||||
eina_strbuf_append_printf(tmpbuf, "NULL");
|
||||
eina_strbuf_replace_all(str_end, "@#ctor_name", eina_strbuf_string_get(tmpbuf));
|
||||
|
@ -572,7 +578,7 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
{
|
||||
eina_strbuf_replace_all(str_end, "@#dtor_func", eina_strbuf_string_get(tmpbuf));
|
||||
eina_strbuf_reset(tmpbuf);
|
||||
_template_fill(tmpbuf, "_@#class_class_destructor", class, NULL, "", EINA_TRUE);
|
||||
_template_fill(tmpbuf, "_@#class_class_destructor", class, NULL, NULL, EINA_TRUE);
|
||||
eina_strbuf_replace_all(str_end, "@#dtor_name", eina_strbuf_string_get(tmpbuf));
|
||||
}
|
||||
else
|
||||
|
@ -690,9 +696,13 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
EINA_LIST_FOREACH(eolian_class_events_list_get(class), itr, event)
|
||||
{
|
||||
const char *evname;
|
||||
char *p;
|
||||
|
||||
eina_strbuf_reset(tmpbuf);
|
||||
eolian_class_event_information_get(event, &evname, NULL, NULL);
|
||||
_template_fill(tmpbuf, "@#CLASS_EVENT_@#FUNC", class, NULL, evname, EINA_TRUE);
|
||||
eina_strbuf_append_printf(tmpbuf, "%s_EVENT_%s", class_env.upper_classname, evname);
|
||||
p = (char *)eina_strbuf_string_get(tmpbuf);
|
||||
eina_str_toupper(&p);
|
||||
eina_strbuf_replace_all(tmpbuf, ",", "_");
|
||||
eina_strbuf_append_printf(str_ev, "\n %s,", eina_strbuf_string_get(tmpbuf));
|
||||
}
|
||||
|
@ -701,7 +711,7 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
if (eina_strbuf_length_get(str_ev))
|
||||
{
|
||||
Eina_Strbuf *events_desc = eina_strbuf_new();
|
||||
_template_fill(events_desc, tmpl_events_desc, class, NULL, "", EINA_TRUE);
|
||||
_template_fill(events_desc, tmpl_events_desc, class, NULL, NULL, EINA_TRUE);
|
||||
eina_strbuf_replace_all(events_desc, "@#list_evdesc", eina_strbuf_string_get(str_ev));
|
||||
eina_strbuf_replace_all(str_end, "@#events_desc", eina_strbuf_string_get(events_desc));
|
||||
eina_strbuf_free(events_desc);
|
||||
|
@ -731,7 +741,7 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
if (eina_strbuf_length_get(str_op))
|
||||
{
|
||||
Eina_Strbuf *ops_desc = eina_strbuf_new();
|
||||
_template_fill(ops_desc, tmpl_eo_ops_desc, class, NULL, "", EINA_TRUE);
|
||||
_template_fill(ops_desc, tmpl_eo_ops_desc, class, NULL, NULL, EINA_TRUE);
|
||||
eina_strbuf_replace_all(ops_desc, "@#list_op", eina_strbuf_string_get(str_op));
|
||||
eina_strbuf_replace_all(str_end, "@#ops_desc", eina_strbuf_string_get(ops_desc));
|
||||
eina_strbuf_free(ops_desc);
|
||||
|
@ -782,10 +792,10 @@ eo_source_generate(const Eolian_Class class, Eina_Strbuf *buf)
|
|||
|
||||
Eina_Strbuf *str_bodyf = eina_strbuf_new();
|
||||
|
||||
if (!eo_source_beginning_generate(class, buf)) goto end;
|
||||
|
||||
_class_env_create(class, NULL, &class_env);
|
||||
|
||||
if (!eo_source_beginning_generate(class, buf)) goto end;
|
||||
|
||||
//Properties
|
||||
EINA_LIST_FOREACH(eolian_class_functions_list_get(class, EOLIAN_PROPERTY), itr, fn)
|
||||
{
|
||||
|
|
|
@ -11,13 +11,13 @@ static _eolian_class_vars class_env;
|
|||
static const char
|
||||
tmpl_eapi_funcdef[] = "\n\
|
||||
/**\n\
|
||||
* @def @#class_@#func\n\
|
||||
* @def %s\n\
|
||||
*\n\
|
||||
@#desc\n\
|
||||
*\n\
|
||||
@#list_desc_param\
|
||||
*/\n\
|
||||
EAPI @#type_return@#class_@#func(@#is_constEo *obj@#params)@#flags;\n\
|
||||
EAPI @#type_return%s(@#is_constEo *obj@#params)@#flags;\n\
|
||||
";
|
||||
|
||||
/*@#CLASS_CHECK(obj) @#check_ret;\n\*/
|
||||
|
@ -25,10 +25,10 @@ static const char
|
|||
tmpl_eapi_body[] ="\
|
||||
\n\
|
||||
EAPI @#ret_type\n\
|
||||
@#eapi_prefix_@#func(@#is_constEo *obj@#full_params)\n\
|
||||
@#eapi_func(@#is_constEo *obj@#full_params)\n\
|
||||
{\n\
|
||||
@#ret_init_val\
|
||||
eo_do((Eo *) obj, @#eo_ret_assign@#eoprefix_@#func(@#eo_params));\n\
|
||||
eo_do((Eo *) obj, @#eo_ret_assign@#eo_func(@#eo_params));\n\
|
||||
return @#ret_val;\n\
|
||||
}\n\
|
||||
";
|
||||
|
@ -36,19 +36,19 @@ static const char
|
|||
tmpl_eapi_body_void[] ="\
|
||||
\n\
|
||||
EAPI void\n\
|
||||
@#eapi_prefix_@#func(@#is_constEo *obj@#full_params)\n\
|
||||
@#eapi_func(@#is_constEo *obj@#full_params)\n\
|
||||
{\n\
|
||||
eo_do((Eo *) obj, @#eoprefix_@#func(@#eo_params));\n\
|
||||
eo_do((Eo *) obj, @#eo_func(@#eo_params));\n\
|
||||
}\n\
|
||||
";
|
||||
|
||||
static void
|
||||
_eapi_decl_func_generate(Eolian_Class class, Eolian_Function funcid, Eolian_Function_Type ftype, Eina_Strbuf *buf)
|
||||
{
|
||||
//TODO return value
|
||||
_eolian_class_func_vars func_env;
|
||||
const char *funcname = eolian_function_name_get(funcid);
|
||||
const char *suffix = "";
|
||||
const char *rettype = NULL;
|
||||
const char *func_lpref = NULL;
|
||||
Eina_Bool var_as_ret = EINA_FALSE;
|
||||
Eina_Bool add_star = EINA_FALSE;
|
||||
Eina_Bool ret_const = EINA_FALSE;
|
||||
|
@ -62,13 +62,12 @@ _eapi_decl_func_generate(Eolian_Class class, Eolian_Function funcid, Eolian_Func
|
|||
Eina_Strbuf *fparam = eina_strbuf_new();
|
||||
Eina_Strbuf *descparam = eina_strbuf_new();
|
||||
|
||||
_class_func_names_fill(class, NULL, NULL);
|
||||
_class_func_env_create(class, funcname, ftype, &func_env);
|
||||
rettype = eolian_function_return_type_get(funcid, ftype);
|
||||
if (ftype == EOLIAN_PROP_GET)
|
||||
{
|
||||
suffix = "_get";
|
||||
add_star = EINA_TRUE;
|
||||
func_lpref = eolian_function_data_get(funcid, EOLIAN_LEGACY_GET);
|
||||
if (!rettype)
|
||||
{
|
||||
l = eolian_parameters_list_get(funcid);
|
||||
|
@ -82,29 +81,10 @@ _eapi_decl_func_generate(Eolian_Class class, Eolian_Function funcid, Eolian_Func
|
|||
}
|
||||
}
|
||||
|
||||
if (ftype == EOLIAN_PROP_SET)
|
||||
{
|
||||
suffix = "_set";
|
||||
func_lpref = eolian_function_data_get(funcid, EOLIAN_LEGACY_SET);
|
||||
}
|
||||
if (ftype == EOLIAN_PROP_SET) suffix = "_set";
|
||||
|
||||
func_lpref = (func_lpref) ? func_lpref : eolian_function_data_get(funcid, EOLIAN_LEGACY);
|
||||
if (func_lpref && !strcmp(func_lpref, "null")) goto end;
|
||||
|
||||
if (func_lpref)
|
||||
{
|
||||
_template_fill(fbody, tmpl_eapi_funcdef, NULL, "@#class", "@#func", EINA_FALSE);
|
||||
eina_strbuf_replace_all (fbody, "@#class_@#func", func_lpref);
|
||||
}
|
||||
else
|
||||
{
|
||||
func_lpref = eolian_class_legacy_prefix_get(class);
|
||||
if (func_lpref && !strcmp(func_lpref, "null")) goto end;
|
||||
|
||||
if (!func_lpref) func_lpref = class_env.lower_classname;
|
||||
sprintf (tmpstr, "%s%s", eolian_function_name_get(funcid), suffix);
|
||||
_template_fill(fbody, tmpl_eapi_funcdef, NULL, func_lpref, tmpstr, EINA_FALSE);
|
||||
}
|
||||
if (func_env.legacy_func[0] == '\0') goto end;
|
||||
eina_strbuf_append_printf(fbody, tmpl_eapi_funcdef, func_env.legacy_func, func_env.legacy_func);
|
||||
|
||||
sprintf (tmpstr, "comment%s", suffix);
|
||||
const char *desc = eolian_function_description_get(funcid, tmpstr);
|
||||
|
@ -210,10 +190,8 @@ end:
|
|||
static void
|
||||
_eapi_func_generate(const Eolian_Class class, Eolian_Function funcid, Eolian_Function_Type ftype, Eina_Strbuf *buf)
|
||||
{
|
||||
//TODO return value
|
||||
_eolian_class_func_vars func_env;
|
||||
char tmpstr[0xFF];
|
||||
const char *suffix = "";
|
||||
const char *func_lpref = NULL;
|
||||
Eina_Bool var_as_ret = EINA_FALSE;
|
||||
const char *rettype = NULL;
|
||||
const char *retname = NULL;
|
||||
|
@ -225,14 +203,13 @@ _eapi_func_generate(const Eolian_Class class, Eolian_Function funcid, Eolian_Fun
|
|||
Eina_Strbuf *fparam = eina_strbuf_new();
|
||||
Eina_Strbuf *eoparam = eina_strbuf_new();
|
||||
|
||||
_class_func_env_create(class, eolian_function_name_get(funcid), ftype, &func_env);
|
||||
rettype = eolian_function_return_type_get(funcid, ftype);
|
||||
if (rettype && !strcmp(rettype, "void")) ret_is_void = EINA_TRUE;
|
||||
retname = "ret";
|
||||
if (ftype == EOLIAN_PROP_GET)
|
||||
{
|
||||
suffix = "_get";
|
||||
add_star = EINA_TRUE;
|
||||
func_lpref = eolian_function_data_get(funcid, EOLIAN_LEGACY_GET);
|
||||
if (!rettype)
|
||||
{
|
||||
const Eina_List *l = eolian_parameters_list_get(funcid);
|
||||
|
@ -245,35 +222,16 @@ _eapi_func_generate(const Eolian_Class class, Eolian_Function funcid, Eolian_Fun
|
|||
}
|
||||
}
|
||||
}
|
||||
if (ftype == EOLIAN_PROP_SET)
|
||||
{
|
||||
suffix = "_set";
|
||||
func_lpref = eolian_function_data_get(funcid, EOLIAN_LEGACY_SET);
|
||||
}
|
||||
|
||||
func_lpref = (func_lpref) ? func_lpref : eolian_function_data_get(funcid, EOLIAN_LEGACY);
|
||||
if (func_lpref && !strcmp(func_lpref, "null")) goto end;
|
||||
if (func_env.legacy_func[0] == '\0') goto end;
|
||||
|
||||
if (rettype && (!ret_is_void))
|
||||
_template_fill(fbody, tmpl_eapi_body, class, NULL, NULL, EINA_FALSE);
|
||||
eina_strbuf_append(fbody, tmpl_eapi_body);
|
||||
else
|
||||
_template_fill(fbody, tmpl_eapi_body_void, class, NULL, NULL, EINA_FALSE);
|
||||
eina_strbuf_replace_all(fbody, "@#eoprefix", class_env.lower_eo_prefix);
|
||||
eina_strbuf_append(fbody, tmpl_eapi_body_void);
|
||||
|
||||
if (func_lpref)
|
||||
eina_strbuf_replace_all(fbody, "@#eapi_prefix_@#func", func_lpref);
|
||||
else
|
||||
{
|
||||
func_lpref = eolian_class_legacy_prefix_get(class);
|
||||
if (func_lpref && !strcmp(func_lpref, "null")) goto end;
|
||||
|
||||
if (func_lpref) eina_strbuf_replace_all(fbody, "@#eapi_prefix", func_lpref);
|
||||
else
|
||||
eina_strbuf_replace_all(fbody, "@#eapi_prefix", class_env.lower_classname);
|
||||
}
|
||||
|
||||
sprintf (tmpstr, "%s%s", eolian_function_name_get(funcid), suffix);
|
||||
eina_strbuf_replace_all(fbody, "@#func", tmpstr);
|
||||
eina_strbuf_replace_all(fbody, "@#eapi_func", func_env.legacy_func);
|
||||
eina_strbuf_replace_all(fbody, "@#eo_func", func_env.lower_eo_func);
|
||||
|
||||
const Eina_List *l;
|
||||
void *data;
|
||||
|
|
Loading…
Reference in New Issue