q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=5b9ece9c85b020d9d43274b3b245bcdcdf5b6502
commit 5b9ece9c85b020d9d43274b3b245bcdcdf5b6502 Author: Daniel Kolesa <[email protected]> Date: Thu Nov 27 17:20:21 2014 +0000 eolian: remove support for function types These won't be needed because of Eo callbacks. They're also difficult to handle in bindings, so this will relieve bindings of some effort. --- src/lib/eolian/Eolian.h | 21 ---------------- src/lib/eolian/database_type.c | 49 -------------------------------------- src/lib/eolian/database_type_api.c | 22 ----------------- src/lib/eolian/database_validate.c | 11 --------- src/lib/eolian/eo_lexer.h | 2 +- src/lib/eolian/eo_parser.c | 36 ---------------------------- src/lib/eolian/eolian_database.h | 30 ++++++++--------------- 7 files changed, 11 insertions(+), 160 deletions(-) diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index d2712d5..d810c78 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -195,7 +195,6 @@ typedef enum EOLIAN_TYPE_REGULAR_ENUM, EOLIAN_TYPE_COMPLEX, EOLIAN_TYPE_POINTER, - EOLIAN_TYPE_FUNCTION, EOLIAN_TYPE_STRUCT, EOLIAN_TYPE_STRUCT_OPAQUE, EOLIAN_TYPE_ENUM, @@ -1343,16 +1342,6 @@ EAPI Eina_Iterator *eolian_type_enums_get_by_file(const char *fname); EAPI Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp); /* - * @brief Get an iterator to all arguments of a function type. - * - * @param[in] tp the type. - * @return the iterator when @c tp is an EOLIAN_TYPE_FUNCTION, NULL otherwise. - * - * @ingroup Eolian - */ -EAPI Eina_Iterator *eolian_type_arguments_get(const Eolian_Type *tp); - -/* * @brief Get an iterator to all subtypes of a type. * * @param[in] tp the type. @@ -1502,16 +1491,6 @@ EAPI Eina_Stringshare *eolian_type_description_get(const Eolian_Type *tp); EAPI Eina_Stringshare *eolian_type_file_get(const Eolian_Type *tp); /* - * @brief Get the return type of a function type. - * - * @param[in] tp the type. - * @return the return type when @c tp is an EOLIAN_TYPE_FUNCTION, NULL otherwise. - * - * @ingroup Eolian - */ -EAPI const Eolian_Type *eolian_type_return_type_get(const Eolian_Type *tp); - -/* * @brief Get the base type of a pointer or alias type. * * @param[in] tp the type. diff --git a/src/lib/eolian/database_type.c b/src/lib/eolian/database_type.c index b83121d..23097c5 100644 --- a/src/lib/eolian/database_type.c +++ b/src/lib/eolian/database_type.c @@ -70,28 +70,6 @@ database_enum_add(Eolian_Type *tp) } static void -_ftype_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name) -{ - Eina_List *l; - Eolian_Type *stp; - Eina_Bool first = EINA_TRUE; - if (tp->ret_type) - database_type_to_str(tp->ret_type, buf, NULL); - else - eina_strbuf_append(buf, "void"); - eina_strbuf_append(buf, " (*"); - if (name) eina_strbuf_append(buf, name); - eina_strbuf_append(buf, ")("); - EINA_LIST_FOREACH(tp->arguments, l, stp) - { - if (!first) eina_strbuf_append(buf, ", "); - first = EINA_FALSE; - database_type_to_str(stp, buf, NULL); - } - eina_strbuf_append(buf, ")"); -} - -static void _stype_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name) { Eolian_Struct_Type_Field *sf; @@ -197,11 +175,6 @@ database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name) _atype_to_str(tp, buf); return; } - else if (tp->type == EOLIAN_TYPE_FUNCTION) - { - _ftype_to_str(tp, buf, name); - return; - } else if (tp->type == EOLIAN_TYPE_STRUCT || tp->type == EOLIAN_TYPE_STRUCT_OPAQUE) { @@ -286,8 +259,6 @@ database_expr_print(Eolian_Expression *exp) void database_type_print(Eolian_Type *tp) { - Eina_List *l; - Eolian_Type *stp; if (tp->type == EOLIAN_TYPE_ALIAS) { _typedef_print(tp); @@ -312,26 +283,6 @@ database_type_print(Eolian_Type *tp) database_type_print(tp->base_type); putchar('*'); } - else if (tp->type == EOLIAN_TYPE_FUNCTION) - { - Eina_Bool first = EINA_TRUE; - printf("func"); - if (tp->ret_type) - { - putchar(' '); - database_type_print(tp->ret_type); - } - else - printf(" void"); - printf(" ("); - EINA_LIST_FOREACH(tp->arguments, l, stp) - { - if (!first) printf(", "); - first = EINA_FALSE; - database_type_print(stp); - } - putchar(')'); - } else if (tp->type == EOLIAN_TYPE_STRUCT) { Eolian_Struct_Type_Field *sf; diff --git a/src/lib/eolian/database_type_api.c b/src/lib/eolian/database_type_api.c index 433266a..b755471 100644 --- a/src/lib/eolian/database_type_api.c +++ b/src/lib/eolian/database_type_api.c @@ -76,15 +76,6 @@ eolian_type_type_get(const Eolian_Type *tp) } EAPI Eina_Iterator * -eolian_type_arguments_get(const Eolian_Type *tp) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL); - EINA_SAFETY_ON_FALSE_RETURN_VAL(eolian_type_type_get(tp) == EOLIAN_TYPE_FUNCTION, NULL); - if (!tp->arguments) return NULL; - return eina_list_iterator_new(tp->arguments); -} - -EAPI Eina_Iterator * eolian_type_subtypes_get(const Eolian_Type *tp) { Eolian_Type_Type tpt; @@ -192,7 +183,6 @@ eolian_type_description_get(const Eolian_Type *tp) EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL); tpp = eolian_type_type_get(tp); EINA_SAFETY_ON_FALSE_RETURN_VAL(tpp != EOLIAN_TYPE_POINTER - && tpp != EOLIAN_TYPE_FUNCTION && tpp != EOLIAN_TYPE_VOID, NULL); return tp->comment; } @@ -204,20 +194,11 @@ eolian_type_file_get(const Eolian_Type *tp) EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL); tpp = eolian_type_type_get(tp); EINA_SAFETY_ON_FALSE_RETURN_VAL(tpp != EOLIAN_TYPE_POINTER - && tpp != EOLIAN_TYPE_FUNCTION && tpp != EOLIAN_TYPE_VOID, NULL); return tp->base.file; } EAPI const Eolian_Type * -eolian_type_return_type_get(const Eolian_Type *tp) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL); - EINA_SAFETY_ON_FALSE_RETURN_VAL(eolian_type_type_get(tp) == EOLIAN_TYPE_FUNCTION, NULL); - return tp->ret_type; -} - -EAPI const Eolian_Type * eolian_type_base_type_get(const Eolian_Type *tp) { Eolian_Type_Type tpt; @@ -282,7 +263,6 @@ eolian_type_name_get(const Eolian_Type *tp) EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL); tpp = eolian_type_type_get(tp); EINA_SAFETY_ON_FALSE_RETURN_VAL(tpp != EOLIAN_TYPE_POINTER - && tpp != EOLIAN_TYPE_FUNCTION && tpp != EOLIAN_TYPE_VOID, NULL); return tp->name; } @@ -294,7 +274,6 @@ eolian_type_full_name_get(const Eolian_Type *tp) EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL); tpp = eolian_type_type_get(tp); EINA_SAFETY_ON_FALSE_RETURN_VAL(tpp != EOLIAN_TYPE_POINTER - && tpp != EOLIAN_TYPE_FUNCTION && tpp != EOLIAN_TYPE_VOID, NULL); return tp->full_name; } @@ -306,7 +285,6 @@ eolian_type_namespaces_get(const Eolian_Type *tp) EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL); tpp = eolian_type_type_get(tp); EINA_SAFETY_ON_FALSE_RETURN_VAL(tpp != EOLIAN_TYPE_POINTER - && tpp != EOLIAN_TYPE_FUNCTION && tpp != EOLIAN_TYPE_VOID, NULL); if (!tp->namespaces) return NULL; return eina_list_iterator_new(tp->namespaces); diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c index ca8546c..43b1c4a 100644 --- a/src/lib/eolian/database_validate.c +++ b/src/lib/eolian/database_validate.c @@ -91,17 +91,6 @@ _validate_type(const Eolian_Type *tp) case EOLIAN_TYPE_POINTER: case EOLIAN_TYPE_ALIAS: return _validate_type(tp->base_type); - case EOLIAN_TYPE_FUNCTION: - { - Eina_List *l; - Eolian_Type *tpp; - if (tp->ret_type && !_validate_type(tp->ret_type)) - return EINA_FALSE; - EINA_LIST_FOREACH(tp->arguments, l, tpp) - if (!_validate_type(tpp)) - return EINA_FALSE; - return EINA_TRUE; - } case EOLIAN_TYPE_STRUCT: { Eina_Bool succ = EINA_TRUE; diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h index f140ba1..120e97a 100644 --- a/src/lib/eolian/eo_lexer.h +++ b/src/lib/eolian/eo_lexer.h @@ -25,7 +25,7 @@ enum Tokens #define KEYWORDS KW(class), KW(const), KW(enum), KW(return), KW(struct), \ \ KW(abstract), KW(constructor), KW(constructors), KW(data), \ - KW(destructor), KW(eo), KW(eo_prefix), KW(events), KW(free), KW(func), \ + KW(destructor), KW(eo), KW(eo_prefix), KW(events), KW(free), \ 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), \ diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index e343f73..0d45bd0 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -495,40 +495,6 @@ parse_type_named(Eo_Lexer *ls, Eina_Bool allow_named) return ret; } -static Eolian_Type * -parse_function_type(Eo_Lexer *ls) -{ - int line, col; - Eolian_Type *def = push_type(ls); - def->type = EOLIAN_TYPE_FUNCTION; - def->base.file = eina_stringshare_ref(ls->filename); - def->base.line = ls->line_number; - def->base.column = ls->column; - eo_lexer_get(ls); - if (ls->t.kw == KW_void) - eo_lexer_get(ls); - else - { - def->ret_type = parse_type_void(ls); - pop_type(ls); - } - line = ls->line_number; - col = ls->column; - check_next(ls, '('); - if (ls->t.token != ')') - { - def->arguments = eina_list_append(def->arguments, parse_type(ls)); - pop_type(ls); - while (test_next(ls, ',')) - { - def->arguments = eina_list_append(def->arguments, parse_type(ls)); - pop_type(ls); - } - } - check_match(ls, ')', '(', line, col); - return def; -} - static void _struct_field_free(Eolian_Struct_Type_Field *def) { @@ -875,8 +841,6 @@ parse_type_named_void(Eo_Lexer *ls, Eina_Bool allow_named) _fill_name(sname, &def->full_name, &def->name, &def->namespaces); goto parse_ptr; } - case KW_func: - return parse_function_type(ls); default: break; } diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index c339076..e011e11 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -139,26 +139,16 @@ struct _Eolian_Type { Eolian_Object base; Eolian_Type_Type type; - union { - /* functions */ - struct { - Eina_List *arguments; - Eolian_Type *ret_type; - }; - /* everything else */ - struct { - Eina_List *subtypes; - Eolian_Type *base_type; - Eina_Stringshare *name; - Eina_Stringshare *full_name; - Eina_List *namespaces; - Eina_Hash *fields; - Eina_List *field_list; - Eina_Stringshare *comment; - Eina_Stringshare *legacy; - Eina_Stringshare *freefunc; - }; - }; + Eina_List *subtypes; + Eolian_Type *base_type; + Eina_Stringshare *name; + Eina_Stringshare *full_name; + Eina_List *namespaces; + Eina_Hash *fields; + Eina_List *field_list; + Eina_Stringshare *comment; + Eina_Stringshare *legacy; + Eina_Stringshare *freefunc; Eina_Bool is_const :1; Eina_Bool is_own :1; Eina_Bool is_extern :1; --
