#include "main.h"
-const char *
+static const char *
_cl_type_str_get(const Eolian_Class *cl, Eina_Bool uc)
{
switch (eolian_class_type_get(cl))
}
}
+static const char *
+_get_add_star(Eolian_Function_Type ftype, Eolian_Parameter_Dir pdir)
+{
+ if (ftype == EOLIAN_PROP_GET)
+ return "*";
+ if ((pdir == EOLIAN_OUT_PARAM) || (pdir == EOLIAN_INOUT_PARAM))
+ return "*";
+ return "";
+}
+
static void
-_gen_func(const Eolian_Class *cl, const Eolian_Function *fid,
- Eolian_Function_Type ftype, Eina_Strbuf *buf)
+_gen_func(const Eolian_Function *fid, Eolian_Function_Type ftype,
+ Eina_Strbuf *buf, char *cnameu, Eina_Bool legacy)
{
+ Eina_Stringshare *fcn = eolian_function_full_c_name_get(fid, ftype, legacy);
+ if (!fcn)
+ return;
+
+ Eina_Bool var_as_ret = EINA_FALSE;
+ const Eolian_Type *rtp = eolian_function_return_type_get(fid, ftype);
+ if (ftype == EOLIAN_PROP_GET && !rtp)
+ {
+ void *d1, *d2;
+ Eina_Iterator *itr = eolian_property_values_get(fid, ftype);
+ if (eina_iterator_next(itr, &d1) && !eina_iterator_next(itr, &d2))
+ {
+ rtp = eolian_parameter_type_get((Eolian_Function_Parameter *)d1);
+ var_as_ret = EINA_TRUE;
+ }
+ eina_iterator_free(itr);
+ }
+
+ Eolian_Object_Scope fsc = eolian_function_scope_get(fid, ftype);
+
+ if (eolian_function_is_beta(fid))
+ eina_strbuf_append_printf(buf, "#ifdef %s_BETA\n", cnameu);
+ if (fsc == EOLIAN_SCOPE_PROTECTED)
+ eina_strbuf_append_printf(buf, "#ifdef %s_PROTECTED\n", cnameu);
+
+ eina_strbuf_append(buf, "EOAPI ");
+ if (rtp)
+ {
+ Eina_Stringshare *rtps = eolian_type_c_type_get(rtp);
+ eina_strbuf_append(buf, rtps);
+ if (rtps[strlen(rtps) - 1] != '*')
+ eina_strbuf_append_char(buf, ' ');
+ eina_stringshare_del(rtps);
+ }
+ else
+ eina_strbuf_append(buf, "void ");
+
+ eina_strbuf_append(buf, fcn);
+ eina_stringshare_del(fcn);
+
+ eina_strbuf_append_char(buf, '(');
+ if ((ftype == EOLIAN_PROP_GET) || eolian_function_object_is_const(fid)
+ || eolian_function_is_class(fid))
+ {
+ eina_strbuf_append(buf, "const ");
+ }
+ eina_strbuf_append(buf, "Eo *obj");
+
+ {
+ Eolian_Function_Parameter *pr = NULL;
+ Eina_Iterator *itr = eolian_property_keys_get(fid, ftype);
+ EINA_ITERATOR_FOREACH(itr, pr)
+ {
+ const Eolian_Type *prt = eolian_parameter_type_get(pr);
+ const char *prn = eolian_parameter_name_get(pr);
+ Eina_Stringshare *prtn = eolian_type_c_type_get(prt);
+ eina_strbuf_append_printf(buf, ", %s %s", prtn, prn);
+ eina_stringshare_del(prtn);
+ }
+ eina_iterator_free(itr);
+ }
+
+ if (!var_as_ret)
+ {
+ Eina_Iterator *itr = NULL;
+ if (ftype == EOLIAN_PROP_GET || ftype == EOLIAN_PROP_SET)
+ itr = eolian_property_values_get(fid, ftype);
+ else
+ itr = eolian_function_parameters_get(fid);
+
+ Eolian_Function_Parameter *pr = NULL;
+ EINA_ITERATOR_FOREACH(itr, pr)
+ {
+ const Eolian_Type *prt = eolian_parameter_type_get(pr);
+ const char *prn = eolian_parameter_name_get(pr);
+ Eina_Stringshare *prtn = eolian_type_c_type_get(prt);
+
+ eina_strbuf_append(buf, ", ");
+ eina_strbuf_append(buf, prtn);
+ if (!strchr(prtn, '*'))
+ eina_strbuf_append_char(buf, ' ');
+ eina_strbuf_append(buf,
+ _get_add_star(ftype, eolian_parameter_direction_get(pr)));
+ eina_strbuf_append(buf, prn);
+ eina_stringshare_del(prtn);
+ }
+
+ eina_iterator_free(itr);
+ }
+
+ eina_strbuf_append(buf, ");\n");
+
+ if (eolian_function_is_beta(fid))
+ eina_strbuf_append_printf(buf, "#endif\n");
+ if (fsc == EOLIAN_SCOPE_PROTECTED)
+ eina_strbuf_append_printf(buf, "#endif\n");
}
void
{
case EOLIAN_PROP_GET:
case EOLIAN_PROP_SET:
- _gen_func(cl, fid, ftype, buf);
+ _gen_func(fid, ftype, buf, cnameu, legacy);
break;
case EOLIAN_PROPERTY:
- _gen_func(cl, fid, EOLIAN_PROP_SET, buf);
- _gen_func(cl, fid, EOLIAN_PROP_GET, buf);
+ _gen_func(fid, EOLIAN_PROP_SET, buf, cnameu, legacy);
+ _gen_func(fid, EOLIAN_PROP_GET, buf, cnameu, legacy);
break;
default:
- _gen_func(cl, fid, EOLIAN_UNRESOLVED, buf);
+ _gen_func(fid, EOLIAN_UNRESOLVED, buf, cnameu, legacy);
}
}
eina_iterator_free(itr);
if (eolian_event_is_beta(ev))
{
- eina_strbuf_append_printf(buf, "\n#ifndef %s_BETA\n", cnameu);
- eina_strbuf_append_printf(buf, "#define %s_BETA\n", cnameu);
+ eina_strbuf_append_printf(buf, "\n#ifdef %s_BETA\n", cnameu);
}
if (evs == EOLIAN_SCOPE_PROTECTED)
{
if (!eolian_event_is_beta(ev))
eina_strbuf_append_char(buf, '\n');
- eina_strbuf_append_printf(buf, "#ifndef %s_PROTECTED\n", cnameu);
- eina_strbuf_append_printf(buf, "#define %s_PROTECTED\n", cnameu);
+ eina_strbuf_append_printf(buf, "#ifdef %s_PROTECTED\n", cnameu);
}
if (!eolian_event_is_beta(ev) && evs == EOLIAN_SCOPE_PUBLIC)