2014-12-04 1:16 GMT+00:00 Daniel Zaoui <daniel.za...@samsung.com>: > Yo D5, > > Just for the curiosity, do you have a scenario where we need this? >
Yeah. We found some yesterday with Tom > D2 > > On 12/03/14 17:07, Daniel Kolesa wrote: >> q66 pushed a commit to branch master. >> >> http://git.enlightenment.org/core/efl.git/commit/?id=49aebd063e9a9bebac9ff5d7a9e3ecf7a70712cd >> >> commit 49aebd063e9a9bebac9ff5d7a9e3ecf7a70712cd >> Author: Daniel Kolesa <d.kol...@samsung.com> >> Date: Wed Dec 3 14:59:24 2014 +0000 >> >> eolian: add eolian_function_is_c_only >> >> This function allows us to mark functions that are not bindable. >> Also remove some obsolete code. >> --- >> src/lib/eolian/Eolian.h | 10 +++++ >> src/lib/eolian/database_function_api.c | 7 ++++ >> src/lib/eolian/eo_lexer.h | 4 +- >> src/lib/eolian/eo_parser.c | 77 >> +++++++++++++++------------------- >> src/lib/eolian/eolian_database.h | 1 + >> 5 files changed, 54 insertions(+), 45 deletions(-) >> >> diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h >> index 42e41c7..9464cdf 100644 >> --- a/src/lib/eolian/Eolian.h >> +++ b/src/lib/eolian/Eolian.h >> @@ -874,6 +874,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 C only (i.e. not bindable). >> + * >> + * @param[in] function_id Id of the function >> + * @return EINA_TRUE and EINA_FALSE respectively >> + * >> + * @ingroup Eolian >> + */ >> +EAPI Eina_Bool eolian_function_is_c_only(const Eolian_Function >> *function_id); >> + >> +/* >> * @brief Indicates if a function is a constructing function of a given >> class. >> * >> * @param[in] klass the class >> diff --git a/src/lib/eolian/database_function_api.c >> b/src/lib/eolian/database_function_api.c >> index 000dda6..266ae54 100644 >> --- a/src/lib/eolian/database_function_api.c >> +++ b/src/lib/eolian/database_function_api.c >> @@ -249,3 +249,10 @@ eolian_function_object_is_const(const Eolian_Function >> *fid) >> EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE); >> return fid->obj_is_const; >> } >> + >> +EAPI Eina_Bool >> +eolian_function_is_c_only(const Eolian_Function *fid) >> +{ >> + EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE); >> + return fid->is_c_only; >> +} >> diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h >> index 120e97a..eb1ca97 100644 >> --- a/src/lib/eolian/eo_lexer.h >> +++ b/src/lib/eolian/eo_lexer.h >> @@ -29,8 +29,8 @@ enum Tokens >> KW(get), KW(implements), KW(interface), KW(keys), KW(legacy), \ >> KW(legacy_prefix), KW(methods), KW(mixin), KW(own), KW(params), \ >> KW(properties), KW(set), KW(type), KW(values), KW(var), KWAT(auto), \ >> - KWAT(class), KWAT(const), KWAT(const_get), KWAT(const_set), >> KWAT(empty), \ >> - KWAT(extern), KWAT(free), KWAT(in), KWAT(inout), KWAT(nonull), \ >> + KWAT(c_only), KWAT(class), KWAT(const), KWAT(const_get), >> KWAT(const_set), \ >> + KWAT(empty), KWAT(extern), KWAT(free), KWAT(in), KWAT(inout), >> KWAT(nonull), \ >> KWAT(optional), KWAT(out), KWAT(private), KWAT(protected), >> KWAT(virtual), \ >> KWAT(warn_unused), \ >> \ >> diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c >> index 0d45bd0..9673c03 100644 >> --- a/src/lib/eolian/eo_parser.c >> +++ b/src/lib/eolian/eo_parser.c >> @@ -1276,7 +1276,8 @@ parse_property(Eo_Lexer *ls) >> Eolian_Function *prop = NULL; >> Eina_Bool has_get = EINA_FALSE, has_set = EINA_FALSE, >> has_keys = EINA_FALSE, has_values = EINA_FALSE, >> - has_protected = EINA_FALSE, has_class = EINA_FALSE; >> + has_protected = EINA_FALSE, has_class = EINA_FALSE, >> + has_c_only = EINA_FALSE; >> prop = calloc(1, sizeof(Eolian_Function)); >> prop->klass = ls->tmp.kls; >> prop->type = EOLIAN_UNRESOLVED; >> @@ -1299,6 +1300,11 @@ parse_property(Eo_Lexer *ls) >> prop->is_class = EINA_TRUE; >> eo_lexer_get(ls); >> break; >> + case KW_at_c_only: >> + CASE_LOCK(ls, c_only, "c_only qualifier"); >> + prop->is_c_only = EINA_TRUE; >> + eo_lexer_get(ls); >> + break; >> default: >> goto body; >> } >> @@ -1340,14 +1346,14 @@ end: >> } >> >> static void >> -parse_method(Eo_Lexer *ls, Eina_Bool ctor) >> +parse_method(Eo_Lexer *ls) >> { >> int line, col; >> Eolian_Function *meth = NULL; >> Eina_Bool has_const = EINA_FALSE, has_params = EINA_FALSE, >> has_return = EINA_FALSE, has_legacy = EINA_FALSE, >> has_protected = EINA_FALSE, has_class = EINA_FALSE, >> - has_eo = EINA_FALSE; >> + has_eo = EINA_FALSE, has_c_only = EINA_FALSE; >> meth = calloc(1, sizeof(Eolian_Function)); >> meth->klass = ls->tmp.kls; >> meth->type = EOLIAN_METHOD; >> @@ -1355,48 +1361,33 @@ parse_method(Eo_Lexer *ls, Eina_Bool ctor) >> meth->base.line = ls->line_number; >> meth->base.column = ls->column; >> ls->tmp.kls->methods = eina_list_append(ls->tmp.kls->methods, meth); >> - if (ctor) >> + check(ls, TOK_VALUE); >> + meth->name = eina_stringshare_ref(ls->t.value.s); >> + eo_lexer_get(ls); >> + for (;;) switch (ls->t.kw) >> { >> - if (ls->t.token != TOK_VALUE) >> - eo_lexer_syntax_error(ls, "expected method name"); >> - meth->name = eina_stringshare_ref(ls->t.value.s); >> + case KW_at_protected: >> + CASE_LOCK(ls, protected, "protected qualifier") >> + meth->scope = EOLIAN_SCOPE_PROTECTED; >> eo_lexer_get(ls); >> - for (;;) switch (ls->t.kw) >> - { >> - case KW_at_protected: >> - CASE_LOCK(ls, protected, "protected qualifier") >> - meth->scope = EOLIAN_SCOPE_PROTECTED; >> - eo_lexer_get(ls); >> - break; >> - default: >> - goto body; >> - } >> - } >> - else >> - { >> - check(ls, TOK_VALUE); >> - meth->name = eina_stringshare_ref(ls->t.value.s); >> + break; >> + case KW_at_const: >> + CASE_LOCK(ls, const, "const qualifier") >> + meth->obj_is_const = EINA_TRUE; >> eo_lexer_get(ls); >> - for (;;) switch (ls->t.kw) >> - { >> - case KW_at_protected: >> - CASE_LOCK(ls, protected, "protected qualifier") >> - meth->scope = EOLIAN_SCOPE_PROTECTED; >> - eo_lexer_get(ls); >> - break; >> - case KW_at_const: >> - CASE_LOCK(ls, const, "const qualifier") >> - meth->obj_is_const = EINA_TRUE; >> - eo_lexer_get(ls); >> - break; >> - case KW_at_class: >> - CASE_LOCK(ls, class, "class qualifier"); >> - meth->is_class = EINA_TRUE; >> - eo_lexer_get(ls); >> - break; >> - default: >> - goto body; >> - } >> + break; >> + case KW_at_class: >> + CASE_LOCK(ls, class, "class qualifier"); >> + meth->is_class = EINA_TRUE; >> + eo_lexer_get(ls); >> + break; >> + case KW_at_c_only: >> + CASE_LOCK(ls, c_only, "c_only qualifier"); >> + meth->is_c_only = EINA_TRUE; >> + eo_lexer_get(ls); >> + break; >> + default: >> + goto body; >> } >> body: >> line = ls->line_number; >> @@ -1671,7 +1662,7 @@ parse_methods(Eo_Lexer *ls) >> line = ls->line_number, col = ls->column; >> check_next(ls, '{'); >> while (ls->t.token != '}') >> - parse_method(ls, EINA_FALSE); >> + parse_method(ls); >> check_match(ls, '}', '{', line, col); >> } >> >> diff --git a/src/lib/eolian/eolian_database.h >> b/src/lib/eolian/eolian_database.h >> index e011e11..b12e05a 100644 >> --- a/src/lib/eolian/eolian_database.h >> +++ b/src/lib/eolian/eolian_database.h >> @@ -118,6 +118,7 @@ struct _Eolian_Function >> Eina_Bool get_only_legacy: 1; >> Eina_Bool set_only_legacy: 1; >> Eina_Bool is_class :1; >> + Eina_Bool is_c_only :1; >> Eina_List *ctor_of; >> Eolian_Class *klass; >> }; >> > > > ------------------------------------------------------------------------------ > Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server > from Actuate! Instantly Supercharge Your Business Reports and Dashboards > with Interactivity, Sharing, Native Excel Exports, App Integration & more > Get technology previously reserved for billion-dollar corporations, FREE > http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel