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;

-- 


Reply via email to