On 12/04/14 04:40, Daniel Kolesa wrote: > 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
Hum... My question was not good :-) Could you share a scenario where we need this? :P > >> 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 > ------------------------------------------------------------------------------ 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