From 4785353baf0ff956e05a451bbea5b0035a5e7a0f Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Fri, 29 Aug 2014 15:30:51 +0100 Subject: [PATCH] eolian: APIs to check if an implement references get/set --- src/bin/eolian/eo_generator.c | 8 ++++++-- src/bin/eolian/impl_generator.c | 7 +++++-- src/lib/eolian/Eolian.h | 20 ++++++++++++++++++++ src/lib/eolian/database_implement_api.c | 14 ++++++++++++++ 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/bin/eolian/eo_generator.c b/src/bin/eolian/eo_generator.c index 9826d4a..c4cc89c 100644 --- a/src/bin/eolian/eo_generator.c +++ b/src/bin/eolian/eo_generator.c @@ -661,6 +661,8 @@ eo_source_end_generate(const Eolian_Class *class, Eina_Strbuf *buf) const char *rets; char *tp = implname; + const char *names[] = { "", "getter ", "setter " }; + if ((impl_class = eolian_implement_class_get(impl_desc))) { fnid = eolian_implement_function_get(impl_desc, &ftype); @@ -673,8 +675,10 @@ eo_source_end_generate(const Eolian_Class *class, Eina_Strbuf *buf) if (!fnid) { - ERR ("Failed to generate implementation of %s - missing form super class", - eolian_implement_full_name_get(impl_desc)); + const char *name = names[eolian_implement_is_prop_get(impl_desc) + | (eolian_implement_is_prop_set(impl_desc) << 1)]; + ERR ("Failed to generate implementation of %s%s - missing form super class", + name, eolian_implement_full_name_get(impl_desc)); goto end; } diff --git a/src/bin/eolian/impl_generator.c b/src/bin/eolian/impl_generator.c index e024199..c91ca42 100644 --- a/src/bin/eolian/impl_generator.c +++ b/src/bin/eolian/impl_generator.c @@ -276,13 +276,16 @@ impl_source_generate(const Eolian_Class *class, Eina_Strbuf *buffer) if (itr) { Eolian_Implement *impl_desc; + const char *names[] = { "", "getter ", "setter " }; EINA_ITERATOR_FOREACH(itr, impl_desc) { Eolian_Function_Type ftype; if (!(foo = eolian_implement_function_get(impl_desc, &ftype))) { - ERR ("Failed to generate implementation of %s - missing form super class", - eolian_implement_full_name_get(impl_desc)); + const char *name = names[eolian_implement_is_prop_get(impl_desc) + | (eolian_implement_is_prop_set(impl_desc) << 1)]; + ERR ("Failed to generate implementation of %s%s - missing form super class", + name, eolian_implement_full_name_get(impl_desc)); goto end; } switch (ftype) diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index 84076a7..4996315 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -946,6 +946,26 @@ EAPI Eina_Bool eolian_implement_is_auto(const Eolian_Implement *impl); EAPI Eina_Bool eolian_implement_is_empty(const Eolian_Implement *impl); /* + * @brief Get whether an implement references a property getter. + * + * @param[in] impl the handle of the implement + * @return EINA_TRUE when it does, EINA_FALSE when it's not. + * + * @ingroup Eolian + */ +EAPI Eina_Bool eolian_implement_is_prop_get(const Eolian_Implement *impl); + +/* + * @brief Get whether an implement references a property setter. + * + * @param[in] impl the handle of the implement + * @return EINA_TRUE when it does, EINA_FALSE when it's not. + * + * @ingroup Eolian + */ +EAPI Eina_Bool eolian_implement_is_prop_set(const Eolian_Implement *impl); + +/* * @brief Get an iterator to the overriding functions defined in a class. * * @param[in] klass the class. diff --git a/src/lib/eolian/database_implement_api.c b/src/lib/eolian/database_implement_api.c index d3c03de..38cdd26 100644 --- a/src/lib/eolian/database_implement_api.c +++ b/src/lib/eolian/database_implement_api.c @@ -121,3 +121,17 @@ eolian_implement_is_empty(const Eolian_Implement *impl) EINA_SAFETY_ON_NULL_RETURN_VAL(impl, EINA_FALSE); return impl->is_empty; } + +EAPI Eina_Bool +eolian_implement_is_prop_get(const Eolian_Implement *impl) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(impl, EINA_FALSE); + return impl->is_prop_get; +} + +EAPI Eina_Bool +eolian_implement_is_prop_set(const Eolian_Implement *impl) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(impl, EINA_FALSE); + return impl->is_prop_set; +} -- 2.7.4