}
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)
+ {
+ 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)
{
- strncpy(capfunc, funcname, sizeof(capfunc) - 1);
- p = capfunc;
- eina_str_toupper(&p);
+ 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);
static const char
tmpl_eo_funcdef_doxygen[] = "\
/**\n\
- * @def @#eoprefix_@#func\n\
+ * @def %s\n\
*\n\
@#desc\n\
*\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";
#if 0
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;
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)
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))
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();
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);
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;
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);
}
}
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;
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 =
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
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,
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));
{
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
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));
}
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);
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);
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)
{
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\*/
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\
";
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;
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);
}
}
- 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 (ftype == EOLIAN_PROP_SET) suffix = "_set";
- 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);
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;
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);
}
}
}
- 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);
-
- 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);
- }
+ eina_strbuf_append(fbody, tmpl_eapi_body_void);
- 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;