summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2015-07-06 11:25:32 +0100
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2015-07-06 11:25:32 +0100
commitc2b1e670b486da6c8e63970c558f2c390a7bda49 (patch)
treedfa6d4e50c6f8ba99b80ac9e27db7199ad244722
parentc0731cdd51849ac2d8d0da811c0e1b1733eedfd2 (diff)
downloadefl-c2b1e670b486da6c8e63970c558f2c390a7bda49.tar.gz
eolian/generator: use the __eolian function in overrides when default values are present
-rw-r--r--src/bin/eolian/eo_generator.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/bin/eolian/eo_generator.c b/src/bin/eolian/eo_generator.c
index d31a656a80..2be1fa7ffe 100644
--- a/src/bin/eolian/eo_generator.c
+++ b/src/bin/eolian/eo_generator.c
@@ -834,8 +834,32 @@ eo_source_end_generate(const Eolian_Class *class, Eina_Strbuf *buf)
_class_env_create(impl_class, NULL, &impl_env);
funcname = eolian_function_name_get(fnid);
+ Eina_Bool dflt_values = EINA_FALSE;
+ Eina_Iterator *pitr = NULL;
+ if (!eolian_implement_is_auto(impl_desc) && fnid && (ftype != EOLIAN_PROP_SET))
+ {
+ Eolian_Function_Parameter *param;
+ pitr = (ftype == EOLIAN_METHOD) ? eolian_function_parameters_get(fnid)
+ : eolian_property_values_get(fnid, ftype);
+ EINA_ITERATOR_FOREACH(pitr, param)
+ {
+ const Eolian_Expression *dflt_value = eolian_parameter_default_value_get(param);
+ if (dflt_value)
+ {
+ Eolian_Value val = eolian_expression_eval
+ (dflt_value, EOLIAN_MASK_ALL);
+ if (val.type)
+ {
+ dflt_values = EINA_TRUE;
+ break;
+ }
+ }
+ }
+ eina_iterator_free(pitr);
+ }
+
sprintf(implname, "%s_%s_%s",
- eolian_implement_is_auto(impl_desc) || eolian_implement_is_empty(impl_desc)?
+ (eolian_implement_is_auto(impl_desc) || eolian_implement_is_empty(impl_desc) || dflt_values)?
"__eolian":"",
class_env.full_classname, impl_env.full_classname);
eina_str_tolower(&tp);