From 58a2025c2564241d4346dbfc8e65c0d97d2b19cf Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Wed, 20 Aug 2014 10:33:44 +0100 Subject: [PATCH] eolian: new API: eolian_function_is_constructing --- src/lib/eolian/Eolian.h | 10 ++++++++++ src/lib/eolian/database_fill.c | 2 ++ src/lib/eolian/database_function_api.c | 7 +++++++ src/lib/eolian/eo_definitions.h | 2 ++ src/lib/eolian/eo_parser.c | 3 ++- src/lib/eolian/eolian_database.h | 1 + 6 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index 58fc725a8d..3098f49a33 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -689,6 +689,16 @@ EAPI Eina_Bool eolian_function_is_legacy_only(const Eolian_Function *function_id */ EAPI Eina_Bool eolian_function_is_class(const Eolian_Function *function_id); +/* + * @brief Get whether a function is constructing. + * + * @param[in] function_id Id of the function + * @return EINA_TRUE and EINA_FALSE respectively + * + * @ingroup Eolian + */ +EAPI Eina_Bool eolian_function_is_constructing(const Eolian_Function *function_id); + /* * @brief Returns a parameter of a function pointed by its id. * diff --git a/src/lib/eolian/database_fill.c b/src/lib/eolian/database_fill.c index 79bd453789..fce6f94bae 100644 --- a/src/lib/eolian/database_fill.c +++ b/src/lib/eolian/database_fill.c @@ -138,6 +138,7 @@ _db_fill_property(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Property_Def *prop) foo_id->scope = prop->scope; foo_id->is_class = prop->is_class; + foo_id->is_constructing = prop->is_constructing; if (!_db_fill_params (prop->keys , &(foo_id->keys ))) goto failure; if (!_db_fill_params (prop->values, &(foo_id->params))) goto failure; @@ -196,6 +197,7 @@ _db_fill_method(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Method_Def *meth) foo_id->get_legacy = eina_stringshare_ref(meth->legacy); foo_id->obj_is_const = meth->obj_const; foo_id->is_class = meth->is_class; + foo_id->is_constructing = meth->is_constructing; if (meth->only_legacy) foo_id->get_only_legacy = EINA_TRUE; diff --git a/src/lib/eolian/database_function_api.c b/src/lib/eolian/database_function_api.c index a7290da23c..c5156a0980 100644 --- a/src/lib/eolian/database_function_api.c +++ b/src/lib/eolian/database_function_api.c @@ -111,6 +111,13 @@ eolian_function_is_class(const Eolian_Function *fid) return fid->is_class; } +EAPI Eina_Bool +eolian_function_is_constructing(const Eolian_Function *fid) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE); + return fid->is_constructing; +} + EAPI const Eolian_Function_Parameter * eolian_function_parameter_get_by_name(const Eolian_Function *fid, const char *param_name) { diff --git a/src/lib/eolian/eo_definitions.h b/src/lib/eolian/eo_definitions.h index 9432ef8f12..68ee833166 100644 --- a/src/lib/eolian/eo_definitions.h +++ b/src/lib/eolian/eo_definitions.h @@ -64,6 +64,7 @@ typedef struct _Eo_Property_Def Eina_List *accessors; int scope; Eina_Bool is_class:1; + Eina_Bool is_constructing:1; } Eo_Property_Def; /* METHOD */ @@ -79,6 +80,7 @@ typedef struct _Eo_Method_Def Eina_Bool obj_const; int scope; Eina_Bool is_class:1; + Eina_Bool is_constructing:1; Eina_Bool only_legacy:1; } Eo_Method_Def; diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index e0caabdc03..ce6d33b642 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -1305,8 +1305,8 @@ parse_property(Eo_Lexer *ls) case KW_at_constructor: CASE_LOCK(ls, constructor, "constructor qualifier"); eo_lexer_get(ls); + prop->is_constructing = EINA_TRUE; break; - default: goto body; } @@ -1409,6 +1409,7 @@ parse_method(Eo_Lexer *ls, Eina_Bool ctor) break; case KW_at_constructor: CASE_LOCK(ls, constructor, "constructor qualifier"); + meth->is_constructing = EINA_TRUE; eo_lexer_get(ls); break; default: diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index 6f824f5001..14a7c9414e 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -101,6 +101,7 @@ struct _Eolian_Function Eina_Bool get_only_legacy: 1; Eina_Bool set_only_legacy: 1; Eina_Bool is_class :1; + Eina_Bool is_constructing :1; }; struct _Eolian_Function_Parameter