summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2016-12-27 17:16:17 +0100
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2016-12-27 17:16:17 +0100
commit72b8dbc30dceb7290064857aa6740801de3a14cf (patch)
tree77cfa7122724726371bc4b037d9ee699993b71fa
parent4cb3d22bb2c370d4541c8872ea9dd8965d1c422f (diff)
downloadefl-72b8dbc30dceb7290064857aa6740801de3a14cf.tar.gz
eolian gen: properly deal with __eolian wrappers and mixed prop impls
-rw-r--r--src/bin/eolian/sources.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/bin/eolian/sources.c b/src/bin/eolian/sources.c
index 5ea17e439a..b602680897 100644
--- a/src/bin/eolian/sources.c
+++ b/src/bin/eolian/sources.c
@@ -5,7 +5,8 @@
* with __eolian during C generation. Needed when params have to
* be initialized and for future features.
*/
-static Eina_Hash *_funcs_params_init = NULL;
+static Eina_Hash *_funcs_params_init_get = NULL;
+static Eina_Hash *_funcs_params_init_set = NULL;
static const char *
_get_add_star(Eolian_Function_Type ftype, Eolian_Parameter_Dir pdir)
@@ -321,7 +322,10 @@ _gen_func(const Eolian_Class *cl, const Eolian_Function *fid,
/* we need to give the internal function name to Eo,
* use this hash table as indication
*/
- eina_hash_add(_funcs_params_init, &impl, impl);
+ if (ftype == EOLIAN_PROP_SET)
+ eina_hash_add(_funcs_params_init_set, &impl, impl);
+ else
+ eina_hash_add(_funcs_params_init_get, &impl, impl);
/* generation of intermediate __eolian_... */
eina_strbuf_append(buf, "static ");
eina_strbuf_append(buf, rtpn);
@@ -553,7 +557,8 @@ _gen_initializer(const Eolian_Class *cl, Eina_Strbuf *buf)
eina_strbuf_append_printf(obuf, " EFL_OPS_DEFINE(%s,\n",
(obuf == ops) ? "ops" : "cops");
- Eina_Bool found = !!eina_hash_find(_funcs_params_init, &imp);
+ Eina_Bool found_get = !!eina_hash_find(_funcs_params_init_get, &imp);
+ Eina_Bool found_set = !!eina_hash_find(_funcs_params_init_set, &imp);
char *ocnamel = NULL;
if (cl != icl)
eo_gen_class_names_get(icl, NULL, NULL, &ocnamel);
@@ -561,17 +566,17 @@ _gen_initializer(const Eolian_Class *cl, Eina_Strbuf *buf)
switch (ftype)
{
case EOLIAN_PROP_GET:
- _gen_opfunc(fid, EOLIAN_PROP_GET, obuf, found, cnamel, ocnamel);
+ _gen_opfunc(fid, EOLIAN_PROP_GET, obuf, found_get, cnamel, ocnamel);
break;
case EOLIAN_PROP_SET:
- _gen_opfunc(fid, EOLIAN_PROP_SET, obuf, found, cnamel, ocnamel);
+ _gen_opfunc(fid, EOLIAN_PROP_SET, obuf, found_set, cnamel, ocnamel);
break;
case EOLIAN_PROPERTY:
- _gen_opfunc(fid, EOLIAN_PROP_SET, obuf, found, cnamel, ocnamel);
- _gen_opfunc(fid, EOLIAN_PROP_GET, obuf, found, cnamel, ocnamel);
+ _gen_opfunc(fid, EOLIAN_PROP_SET, obuf, found_set, cnamel, ocnamel);
+ _gen_opfunc(fid, EOLIAN_PROP_GET, obuf, found_get, cnamel, ocnamel);
break;
default:
- _gen_opfunc(fid, EOLIAN_METHOD, obuf, found, cnamel, ocnamel);
+ _gen_opfunc(fid, EOLIAN_METHOD, obuf, found_get, cnamel, ocnamel);
break;
}
@@ -621,7 +626,8 @@ eo_gen_source_gen(const Eolian_Class *cl, Eina_Strbuf *buf)
if (!cl)
return;
- _funcs_params_init = eina_hash_pointer_new(NULL);
+ _funcs_params_init_get = eina_hash_pointer_new(NULL);
+ _funcs_params_init_set = eina_hash_pointer_new(NULL);
char *cnamel = NULL;
eo_gen_class_names_get(cl, NULL, NULL, &cnamel);
@@ -759,7 +765,8 @@ eo_gen_source_gen(const Eolian_Class *cl, Eina_Strbuf *buf)
/* and we're done */
free(cnamel);
- eina_hash_free(_funcs_params_init);
+ eina_hash_free(_funcs_params_init_get);
+ eina_hash_free(_funcs_params_init_set);
}
static void