summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@samsung.com>2014-06-20 16:53:51 +0100
committerDaniel Kolesa <d.kolesa@samsung.com>2014-06-20 17:09:03 +0100
commit43e23492033614096dda88aedc482d0d7c2d0546 (patch)
treef14750252106483f6b697c4931a8002135c90bfd
parent4dcd45b010c956046e073ca39a45637ecf7eb447 (diff)
downloadefl-43e23492033614096dda88aedc482d0d7c2d0546.tar.gz
eolian/generator: public api func name deduplication, spank tasn if it breaks
-rw-r--r--src/bin/eolian/common_funcs.c42
-rw-r--r--src/bin/eolian/common_funcs.h2
-rw-r--r--src/bin/eolian/eo_generator.c15
-rw-r--r--src/lib/edje/edje_calc.c2
-rw-r--r--src/lib/edje/edje_text.c8
-rw-r--r--src/lib/evas/canvas/evas_object_text.c2
6 files changed, 56 insertions, 15 deletions
diff --git a/src/bin/eolian/common_funcs.c b/src/bin/eolian/common_funcs.c
index de58280928..5dd20f2805 100644
--- a/src/bin/eolian/common_funcs.c
+++ b/src/bin/eolian/common_funcs.c
@@ -50,7 +50,7 @@ _class_env_create(const Eolian_Class class, const char *over_classname, _eolian_
void
_class_func_env_create(const Eolian_Class class, const char *funcname, Eolian_Function_Type ftype, _eolian_class_func_vars *env)
{
- char *p;
+ char *p, *ret;
const char *suffix = "";
const char *legacy = NULL;
Eolian_Function funcid = eolian_class_function_find_by_name(class, funcname, ftype);
@@ -72,11 +72,15 @@ _class_func_env_create(const Eolian_Class class, const char *funcname, Eolian_Fu
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);
+ ret = _func_name_dedup(tmp_env.upper_eo_prefix, funcname);
+ sprintf(p = env->upper_eo_func, "%s%s", ret, suffix);
eina_str_toupper(&p);
+ free(ret);
- sprintf(p = env->lower_eo_func, "%s_%s%s", tmp_env.lower_eo_prefix, funcname, suffix);
+ ret = _func_name_dedup(tmp_env.lower_eo_prefix, funcname);
+ sprintf(p = env->lower_eo_func, "%s%s", ret, suffix);
eina_str_tolower(&p);
+ free(ret);
env->legacy_func[0] = '\0';
if (legacy && !strcmp(legacy, "null")) goto end;
@@ -161,3 +165,35 @@ _source_desc_get(const char *str)
return ret;
}
+char *
+_func_name_dedup(const char *classn, const char *funcn)
+{
+ const char *last_p = strrchr(classn, '_');
+ const char *func_p = strchr(funcn, '_');
+ Eina_Strbuf *buf = eina_strbuf_new();
+ int len;
+ char *ret;
+
+ if (!last_p) last_p = classn;
+ else last_p++;
+ if (!func_p) len = strlen(funcn);
+ else len = func_p - funcn;
+
+ if ((int)strlen(last_p) != len || strncmp(last_p, funcn, len))
+ {
+ eina_strbuf_append(buf, classn);
+ eina_strbuf_append_char(buf, '_');
+ eina_strbuf_append(buf, funcn);
+ ret = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
+ return ret;
+ }
+
+ if (last_p != classn)
+ eina_strbuf_append_n(buf, classn, last_p - classn); /* includes _ */
+
+ eina_strbuf_append(buf, funcn);
+ ret = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
+ return ret;
+}
diff --git a/src/bin/eolian/common_funcs.h b/src/bin/eolian/common_funcs.h
index ff98d7d508..ca510efb1f 100644
--- a/src/bin/eolian/common_funcs.h
+++ b/src/bin/eolian/common_funcs.h
@@ -66,4 +66,6 @@ void _class_env_create(const Eolian_Class class, const char *over_classname, _eo
void _class_func_env_create(const Eolian_Class class, const char *funcname, Eolian_Function_Type ftype EINA_UNUSED, _eolian_class_func_vars *env);
+char *_func_name_dedup(const char *classn, const char *funcn);
+
#endif
diff --git a/src/bin/eolian/eo_generator.c b/src/bin/eolian/eo_generator.c
index 30e11bc3c1..1eb4fbd50f 100644
--- a/src/bin/eolian/eo_generator.c
+++ b/src/bin/eolian/eo_generator.c
@@ -598,6 +598,7 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf)
Eolian_Function fnid = NULL;
const char *funcname = NULL;
char *tp = implname;
+ char *ret;
if (eolian_implement_information_get(impl_desc, &impl_class, &fnid, &ftype))
{
@@ -615,29 +616,31 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf)
goto end;
}
+ ret = _func_name_dedup(impl_env.lower_eo_prefix, funcname);
switch (ftype)
{
case EOLIAN_PROP_SET: case EOLIAN_PROP_GET: case EOLIAN_PROPERTY:
if (ftype != EOLIAN_PROP_GET)
{
- eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_%s_set, _%s_%s_set),",
- impl_env.lower_eo_prefix, funcname, implname, funcname);
+ eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_set, _%s_%s_set),",
+ ret, implname, funcname);
eo_bind_func_generate(class, fnid, EOLIAN_PROP_SET, str_bodyf, &impl_env);
}
if (ftype != EOLIAN_PROP_SET)
{
- eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_%s_get, _%s_%s_get),",
- impl_env.lower_eo_prefix, funcname, implname, funcname);
+ eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_get, _%s_%s_get),",
+ ret, implname, funcname);
eo_bind_func_generate(class, fnid, EOLIAN_PROP_GET, str_bodyf, &impl_env);
}
break;
default:
- eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_%s, _%s_%s),",
- impl_env.lower_eo_prefix, funcname, implname, funcname);
+ eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s, _%s_%s),",
+ ret, implname, funcname);
eo_bind_func_generate(class, fnid, ftype, str_bodyf, &impl_env);
break;
}
+ free(ret);
}
//Constructors
diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 3c252b863a..66d5ee2f31 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -1652,7 +1652,7 @@ _edje_part_recalc_single_text(FLOAT_T sc EINA_UNUSED,
eo_do(ep->object,
evas_obj_text_style_set(style),
- evas_obj_text_text_set(text),
+ evas_obj_text_set(text),
evas_obj_size_get(&tw, &th));
if (chosen_desc->text.max_x)
{
diff --git a/src/lib/edje/edje_text.c b/src/lib/edje/edje_text.c
index ba75b8beac..d791c8ffe1 100644
--- a/src/lib/edje/edje_text.c
+++ b/src/lib/edje/edje_text.c
@@ -99,7 +99,7 @@ _edje_text_fit_x(Edje *ed, Edje_Real_Part *ep,
eo_do(ep->object,
evas_obj_text_ellipsis_set(params->type.text.ellipsis),
evas_obj_text_font_set(font, size),
- evas_obj_text_text_set(text),
+ evas_obj_text_set(text),
evas_obj_size_set(sw, sh));
return text;
@@ -292,7 +292,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc));
eo_do(ep->object,
evas_obj_text_font_set(font, size),
- evas_obj_text_text_set(text));
+ evas_obj_text_set(text));
part_get_geometry(ep, &tw, &th);
/* Find the wanted font size */
if ((tw != sw) && (size > 0) && (tw != 0))
@@ -325,7 +325,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc));
eo_do(ep->object,
evas_obj_text_font_set(font, size),
- evas_obj_text_text_set(text));
+ evas_obj_text_set(text));
part_get_geometry(ep, &tw, &th);
/* only grow the font size if we didn't already reach the max size
@@ -457,7 +457,7 @@ arrange_text:
if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc));
eo_do(ep->object,
evas_obj_text_font_set(font, size),
- evas_obj_text_text_set(text));
+ evas_obj_text_set(text));
part_get_geometry(ep, &tw, &th);
/* filters */
diff --git a/src/lib/evas/canvas/evas_object_text.c b/src/lib/evas/canvas/evas_object_text.c
index a45d3e841d..27e8d46a9c 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -962,7 +962,7 @@ _evas_text_eo_base_dbg_info_get(Eo *eo_obj, Evas_Text_Data *o EINA_UNUSED, Eo_Db
eo_do(eo_obj, text = evas_obj_text_font_source_get());
EO_DBG_INFO_APPEND(group, "Font source", EINA_VALUE_TYPE_STRING, text);
- eo_do(eo_obj, text = evas_obj_text_text_get());
+ eo_do(eo_obj, text = evas_obj_text_get());
EO_DBG_INFO_APPEND(group, "Text", EINA_VALUE_TYPE_STRING, text);
}