q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a03bef4734c9a5dbe61e5cef73bd5ac2f124494f

commit a03bef4734c9a5dbe61e5cef73bd5ac2f124494f
Author: Daniel Kolesa <[email protected]>
Date:   Thu Jul 10 14:44:17 2014 +0100

    eolian: get rid of Eo_Type_Def
---
 src/lib/eolian/database_type.c  | 19 +++++++--
 src/lib/eolian/eo_definitions.c | 37 +++---------------
 src/lib/eolian/eo_definitions.h | 39 ++----------------
 src/lib/eolian/eo_lexer.c       |  3 +-
 src/lib/eolian/eo_lexer.h       |  2 +-
 src/lib/eolian/eo_parser.c      | 87 ++++++++++++++++++++++-------------------
 6 files changed, 75 insertions(+), 112 deletions(-)

diff --git a/src/lib/eolian/database_type.c b/src/lib/eolian/database_type.c
index 0c690ad..bca7ece 100644
--- a/src/lib/eolian/database_type.c
+++ b/src/lib/eolian/database_type.c
@@ -3,10 +3,23 @@
 #include "eo_definitions.h"
 
 void
-database_type_del(Eolian_Type *type)
+database_type_del(Eolian_Type *tp)
 {
-   if (!type) return;
-   eo_definitions_type_free((Eo_Type_Def*)type);
+   if (!tp) return;
+   Eolian_Type *stp;
+   if (tp->name) eina_stringshare_del(tp->name);
+   if (tp->type == EOLIAN_TYPE_STRUCT)
+     {
+        eina_hash_free(tp->fields);
+        free(tp);
+        return;
+     }
+   /* for function types, this will map to arguments and ret_type */
+   if (tp->subtypes) EINA_LIST_FREE(tp->subtypes, stp)
+     database_type_del(stp);
+   if (tp->base_type)
+     database_type_del(tp->base_type);
+   free(tp);
 }
 
 Eina_Bool
diff --git a/src/lib/eolian/eo_definitions.c b/src/lib/eolian/eo_definitions.c
index 5f29a74..2bb2328 100644
--- a/src/lib/eolian/eo_definitions.c
+++ b/src/lib/eolian/eo_definitions.c
@@ -2,37 +2,12 @@
 #include <stdlib.h>
 
 #include "eo_definitions.h"
-
-void
-eo_definitions_struct_field_free(Eo_Struct_Field_Def *def)
-{
-   eo_definitions_type_free(def->type);
-   if (def->comment) eina_stringshare_del(def->comment);
-}
-
-void
-eo_definitions_type_free(Eo_Type_Def *tp)
-{
-   Eo_Type_Def *stp;
-   if (tp->name) eina_stringshare_del(tp->name);
-   if (tp->type == EOLIAN_TYPE_STRUCT)
-     {
-        eina_hash_free(tp->fields);
-        free(tp);
-        return;
-     }
-   /* for function types, this will map to arguments and ret_type */
-   if (tp->subtypes) EINA_LIST_FREE(tp->subtypes, stp)
-     eo_definitions_type_free(stp);
-   if (tp->base_type)
-     eo_definitions_type_free(tp->base_type);
-   free(tp);
-}
+#include "eolian_database.h"
 
 static void
 eo_definitions_ret_free(Eo_Ret_Def *ret)
 {
-   if (ret->type) eo_definitions_type_free(ret->type);
+   if (ret->type) database_type_del(ret->type);
    if (ret->comment) eina_stringshare_del(ret->comment);
    if (ret->dflt_ret_val) eina_stringshare_del(ret->dflt_ret_val);
    free(ret);
@@ -41,7 +16,7 @@ eo_definitions_ret_free(Eo_Ret_Def *ret)
 static void
 eo_definitions_param_free(Eo_Param_Def *param)
 {
-   if (param->type) eo_definitions_type_free(param->type);
+   if (param->type) database_type_del(param->type);
    if (param->name) eina_stringshare_del(param->name);
    if (param->comment) eina_stringshare_del(param->comment);
    free(param);
@@ -144,7 +119,7 @@ eo_definitions_typedef_def_free(Eo_Typedef_Def *type)
      eina_stringshare_del(type->alias);
 
    if (type->type)
-     eo_definitions_type_free(type->type);
+     database_type_del(type->type);
 
    free(type);
 }
@@ -195,7 +170,7 @@ eo_definitions_temps_free(Eo_Lexer_Temps *tmp)
 {
    Eina_Strbuf *buf;
    Eo_Param_Def *par;
-   Eo_Type_Def *tp;
+   Eolian_Type *tp;
    const char *s;
 
    EINA_LIST_FREE(tmp->str_bufs, buf)
@@ -217,7 +192,7 @@ eo_definitions_temps_free(Eo_Lexer_Temps *tmp)
      eo_definitions_typedef_def_free(tmp->typedef_def);
 
    EINA_LIST_FREE(tmp->type_defs, tp)
-     eo_definitions_type_free(tp);
+     database_type_del(tp);
 
    if (tmp->prop)
      eo_definitions_property_def_free(tmp->prop);
diff --git a/src/lib/eolian/eo_definitions.h b/src/lib/eolian/eo_definitions.h
index a908f08..35af8c0 100644
--- a/src/lib/eolian/eo_definitions.h
+++ b/src/lib/eolian/eo_definitions.h
@@ -4,42 +4,11 @@
 #include <Eina.h>
 #include <Eolian.h>
 
-/* TYPE */
-
-typedef struct _Eo_Type_Def Eo_Type_Def;
-struct _Eo_Type_Def
-{
-   Eina_Stringshare  *name;
-   Eolian_Type_Type   type;
-   union {
-      struct {
-         Eina_List   *subtypes;
-         Eo_Type_Def *base_type;
-      };
-      struct {
-         Eina_List   *arguments;
-         Eo_Type_Def *ret_type;
-      };
-      struct {
-         Eina_Hash        *fields;
-         Eina_Stringshare *comment;
-      };
-   };
-   Eina_Bool is_const  :1;
-   Eina_Bool is_own    :1;
-};
-
-typedef struct _Eo_Struct_Field_Def
-{
-   Eo_Type_Def *type;
-   Eina_Stringshare *comment;
-} Eo_Struct_Field_Def;
-
 /* RET */
 
 typedef struct _Eo_Ret_Def
 {
-   Eo_Type_Def *type;
+   Eolian_Type *type;
    Eina_Stringshare *comment;
    Eina_Stringshare *dflt_ret_val;
    Eina_Bool warn_unused:1;
@@ -58,7 +27,7 @@ typedef enum _Param_Way
 typedef struct _Eo_Param_Def
 {
    Param_Way way;
-   Eo_Type_Def *type;
+   Eolian_Type *type;
    Eina_Stringshare *name;
    Eina_Stringshare *comment;
    Eina_Bool nonull:1;
@@ -158,7 +127,7 @@ typedef struct _Eo_Class_Def
 typedef struct _Eo_Typedef_Def
 {
    Eina_Stringshare *alias;
-   Eo_Type_Def *type;
+   Eolian_Type *type;
 } Eo_Typedef_Def;
 
 /* TEMPS */
@@ -182,8 +151,6 @@ typedef struct _Eo_Lexer_Temps
    Eo_Implement_Def *impl;
 } Eo_Lexer_Temps;
 
-void eo_definitions_struct_field_free(Eo_Struct_Field_Def *def);
-void eo_definitions_type_free(Eo_Type_Def *tp);
 void eo_definitions_class_def_free(Eo_Class_Def *kls);
 void eo_definitions_typedef_def_free(Eo_Typedef_Def *type);
 void eo_definitions_temps_free(Eo_Lexer_Temps *tmp);
diff --git a/src/lib/eolian/eo_lexer.c b/src/lib/eolian/eo_lexer.c
index 32fd29e..60bc2b1 100644
--- a/src/lib/eolian/eo_lexer.c
+++ b/src/lib/eolian/eo_lexer.c
@@ -5,6 +5,7 @@
 #include <assert.h>
 
 #include "eo_lexer.h"
+#include "eolian_database.h"
 
 int _eo_lexer_log_dom = -1;
 
@@ -359,7 +360,7 @@ eo_lexer_free(Eo_Lexer *ls)
              eo_definitions_typedef_def_free(nd->def_typedef);
              break;
            case NODE_STRUCT:
-             if (nd->def_struct) eo_definitions_type_free(nd->def_struct);
+             if (nd->def_struct) database_type_del(nd->def_struct);
            default:
              break;
           }
diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h
index 63faf0a..e40bd38 100644
--- a/src/lib/eolian/eo_lexer.h
+++ b/src/lib/eolian/eo_lexer.h
@@ -67,7 +67,7 @@ typedef struct _Eo_Node
       void           *def;
       Eo_Class_Def   *def_class;
       Eo_Typedef_Def *def_typedef;
-      Eo_Type_Def    *def_struct;
+      Eolian_Type    *def_struct;
    };
 } Eo_Node;
 
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 164e504..388ab59 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -101,10 +101,10 @@ pop_strbuf(Eo_Lexer *ls)
    ls->tmp.str_bufs = eina_list_remove_list(ls->tmp.str_bufs, 
ls->tmp.str_bufs);
 }
 
-static Eo_Type_Def *
+static Eolian_Type *
 push_type(Eo_Lexer *ls)
 {
-   Eo_Type_Def *def = calloc(1, sizeof(Eo_Type_Def));
+   Eolian_Type *def = calloc(1, sizeof(Eolian_Type));
    ls->tmp.type_defs = eina_list_prepend(ls->tmp.type_defs, def);
    return def;
 }
@@ -159,15 +159,15 @@ parse_name_list(Eo_Lexer *ls)
    return ls->tmp.str_items;
 }
 
-static Eo_Type_Def *parse_type_void(Eo_Lexer *ls);
-static Eo_Type_Def *parse_type_struct(Eo_Lexer *ls, Eina_Bool allow_struct,
+static Eolian_Type *parse_type_void(Eo_Lexer *ls);
+static Eolian_Type *parse_type_struct(Eo_Lexer *ls, Eina_Bool allow_struct,
                                       Eina_Bool allow_anon);
 
-static Eo_Type_Def *
+static Eolian_Type *
 parse_type(Eo_Lexer *ls)
 {
    int line = ls->line_number, column = ls->column;
-   Eo_Type_Def *ret = parse_type_void(ls);
+   Eolian_Type *ret = parse_type_void(ls);
    if (ret->type == EOLIAN_TYPE_VOID)
      {
         ls->line_number = line;
@@ -177,12 +177,12 @@ parse_type(Eo_Lexer *ls)
    return ret;
 }
 
-static Eo_Type_Def *
+static Eolian_Type *
 parse_type_struct_nonvoid(Eo_Lexer *ls, Eina_Bool allow_struct,
                           Eina_Bool allow_anon)
 {
    int line = ls->line_number, column = ls->column;
-   Eo_Type_Def *ret = parse_type_struct(ls, allow_struct, allow_anon);
+   Eolian_Type *ret = parse_type_struct(ls, allow_struct, allow_anon);
    if (ret->type == EOLIAN_TYPE_VOID)
      {
         ls->line_number = line;
@@ -192,11 +192,11 @@ parse_type_struct_nonvoid(Eo_Lexer *ls, Eina_Bool 
allow_struct,
    return ret;
 }
 
-static Eo_Type_Def *
+static Eolian_Type *
 parse_function_type(Eo_Lexer *ls)
 {
    int line, col;
-   Eo_Type_Def *def = push_type(ls);
+   Eolian_Type *def = push_type(ls);
    eo_lexer_get(ls);
    if (ls->t.kw == KW_void)
      eo_lexer_get(ls);
@@ -222,14 +222,21 @@ parse_function_type(Eo_Lexer *ls)
    return def;
 }
 
-static Eo_Type_Def *
+static void
+_struct_field_free(Eolian_Struct_Field *def)
+{
+   database_type_del(def->type);
+   if (def->comment) eina_stringshare_del(def->comment);
+}
+
+static Eolian_Type *
 parse_struct(Eo_Lexer *ls, const char *name)
 {
    int line = ls->line_number, column = ls->column;
-   Eo_Type_Def *def = push_type(ls);
+   Eolian_Type *def = push_type(ls);
    def->name = name;
    def->type = EOLIAN_TYPE_STRUCT;
-   def->fields = 
eina_hash_string_small_new(EINA_FREE_CB(eo_definitions_struct_field_free));
+   def->fields = eina_hash_string_small_new(EINA_FREE_CB(_struct_field_free));
    check_next(ls, '{');
    if (ls->t.token == TOK_COMMENT)
      {
@@ -239,8 +246,8 @@ parse_struct(Eo_Lexer *ls, const char *name)
    while (ls->t.token != '}')
      {
         const char *fname;
-        Eo_Struct_Field_Def *fdef;
-        Eo_Type_Def *tp;
+        Eolian_Struct_Field *fdef;
+        Eolian_Type *tp;
         check(ls, TOK_VALUE);
         if (eina_hash_find(def->fields, ls->t.value))
           eo_lexer_syntax_error(ls, "double field definition");
@@ -248,7 +255,7 @@ parse_struct(Eo_Lexer *ls, const char *name)
         eo_lexer_get(ls);
         check_next(ls, ':');
         tp = parse_type_struct_nonvoid(ls, EINA_TRUE, EINA_FALSE);
-        fdef = calloc(1, sizeof(Eo_Struct_Field_Def));
+        fdef = calloc(1, sizeof(Eolian_Struct_Field));
         fdef->type = tp;
         eina_hash_add(def->fields, fname, fdef);
         pop_type(ls);
@@ -265,11 +272,11 @@ parse_struct(Eo_Lexer *ls, const char *name)
    return def;
 }
 
-static Eo_Type_Def *
+static Eolian_Type *
 parse_type_struct(Eo_Lexer *ls, Eina_Bool allow_struct, Eina_Bool allow_anon)
 {
    Eina_Bool    has_struct = EINA_FALSE;
-   Eo_Type_Def *def;
+   Eolian_Type *def;
    const char  *ctype;
    switch (ls->t.kw)
      {
@@ -344,7 +351,7 @@ parse_type_struct(Eo_Lexer *ls, Eina_Bool allow_struct, 
Eina_Bool allow_anon)
 parse_ptr:
    while (ls->t.token == '*')
      {
-        Eo_Type_Def *pdef;
+        Eolian_Type *pdef;
         pop_type(ls);
         pdef = push_type(ls);
         pdef->base_type = def;
@@ -368,7 +375,7 @@ parse_ptr:
    return def;
 }
 
-static Eo_Type_Def *
+static Eolian_Type *
 parse_type_void(Eo_Lexer *ls)
 {
    return parse_type_struct(ls, EINA_FALSE, EINA_FALSE);
@@ -1085,14 +1092,14 @@ _dump_class(Eo_Class_Def *kls)
         if (meth->ret)
           {
              printf("    return: ");
-             database_type_print((Eolian_Type*)meth->ret->type);
+             database_type_print(meth->ret->type);
              printf(" (%s)\n", meth->ret->comment);
           }
         printf("    legacy : %s\n", meth->legacy);
         EINA_LIST_FOREACH(meth->params, m, param)
           {
              printf("    param: %s %s : ", _param_way_str[param->way], 
param->name);
-             database_type_print((Eolian_Type*)param->type);
+             database_type_print(param->type);
              printf(" (%s)\n", param->comment);
           }
      }
@@ -1103,20 +1110,20 @@ _dump_class(Eo_Class_Def *kls)
         EINA_LIST_FOREACH(prop->keys, m, param)
           {
              printf("    key: %s : ", param->name);
-             database_type_print((Eolian_Type*)param->type);
+             database_type_print(param->type);
              printf(" (%s)\n", param->comment);
           }
         EINA_LIST_FOREACH(prop->values, m, param)
           {
              printf("    value: %s : ", param->name);
-             database_type_print((Eolian_Type*)param->type);
+             database_type_print(param->type);
              printf(" (%s)\n", param->comment);
           }
         EINA_LIST_FOREACH(prop->accessors, m, accessor)
           {
              printf("    accessor: ");
              if (accessor->ret)
-               database_type_print((Eolian_Type*)accessor->ret->type);
+               database_type_print(accessor->ret->type);
              printf(" : %s (%s)\n", _accessor_type_str[accessor->type], 
accessor->comment);
              printf("      legacy : %s\n", accessor->legacy);
           }
@@ -1128,7 +1135,7 @@ _dump_class(Eo_Class_Def *kls)
         if (meth->ret)
           {
              printf("    return: ");
-             database_type_print((Eolian_Type*)meth->ret->type);
+             database_type_print(meth->ret->type);
              printf(" (%s)\n", meth->ret->comment);
           }
         printf("    legacy : %s\n", meth->legacy);
@@ -1136,7 +1143,7 @@ _dump_class(Eo_Class_Def *kls)
         EINA_LIST_FOREACH(meth->params, m, param)
           {
              printf("    param: %s %s : ", _param_way_str[param->way], 
param->name);
-             database_type_print((Eolian_Type*)param->type);
+             database_type_print(param->type);
              printf(" (%s)\n", param->comment);
           }
      }
@@ -1146,14 +1153,14 @@ static void
 _dump_type(Eo_Typedef_Def *type)
 {
    printf("Typedef: %s ", type->alias);
-   database_type_print((Eolian_Type*)type->type);
+   database_type_print(type->type);
    printf("\n");
 }
 
 static void
-_dump_struct(Eo_Type_Def *type)
+_dump_struct(Eolian_Type *type)
 {
-   database_type_print((Eolian_Type*)type);
+   database_type_print(type);
 }
 
 void
@@ -1233,7 +1240,7 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
         database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
         EINA_LIST_FOREACH(meth->params, m, param)
           {
-             database_method_parameter_add(foo_id, 
(Eolian_Parameter_Dir)param->way, (Eolian_Type*)param->type, param->name, 
param->comment);
+             database_method_parameter_add(foo_id, 
(Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
              param->type = NULL;
           }
      }
@@ -1245,14 +1252,14 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
         EINA_LIST_FOREACH(prop->keys, m, param)
           {
              Eolian_Function_Parameter *p = database_property_key_add(
-                   foo_id, (Eolian_Type*)param->type, param->name, 
param->comment);
+                   foo_id, param->type, param->name, param->comment);
              database_parameter_nonull_set(p, param->nonull);
              param->type = NULL;
           }
         EINA_LIST_FOREACH(prop->values, m, param)
           {
              Eolian_Function_Parameter *p = database_property_value_add(
-                   foo_id, (Eolian_Type*)param->type, param->name, 
param->comment);
+                   foo_id, param->type, param->name, param->comment);
              database_parameter_nonull_set(p, param->nonull);
              param->type = NULL;
           }
@@ -1263,7 +1270,7 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
                 accessor->type == SETTER?EOLIAN_PROP_SET:EOLIAN_PROP_GET;
              if (accessor->ret && accessor->ret->type)
                {
-                  database_function_return_type_set(foo_id, ftype, 
(Eolian_Type*)accessor->ret->type);
+                  database_function_return_type_set(foo_id, ftype, 
accessor->ret->type);
                   database_function_return_comment_set(foo_id,
                         ftype, accessor->ret->comment);
                   database_function_return_flag_set_as_warn_unused(foo_id,
@@ -1315,7 +1322,7 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
         database_class_function_add(class, foo_id);
         if (meth->ret)
           {
-             database_function_return_type_set(foo_id, EOLIAN_METHOD, 
(Eolian_Type*)meth->ret->type);
+             database_function_return_type_set(foo_id, EOLIAN_METHOD, 
meth->ret->type);
              database_function_return_comment_set(foo_id, EOLIAN_METHOD, 
meth->ret->comment);
              database_function_return_flag_set_as_warn_unused(foo_id,
                    EOLIAN_METHOD, meth->ret->warn_unused);
@@ -1329,7 +1336,7 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
         EINA_LIST_FOREACH(meth->params, m, param)
           {
              Eolian_Function_Parameter *p = 
database_method_parameter_add(foo_id,
-                   (Eolian_Parameter_Dir)param->way, 
(Eolian_Type*)param->type, param->name, param->comment);
+                   (Eolian_Parameter_Dir)param->way, param->type, param->name, 
param->comment);
              database_parameter_nonull_set(p, param->nonull);
              param->type = NULL;
           }
@@ -1392,15 +1399,15 @@ _db_fill_class(Eo_Class_Def *kls, const char *filename)
 static Eina_Bool
 _db_fill_type(Eo_Typedef_Def *type_def)
 {
-   Eina_Bool ret = database_type_add(type_def->alias, 
(Eolian_Type*)type_def->type);
+   Eina_Bool ret = database_type_add(type_def->alias, type_def->type);
    type_def->type = NULL;
    return ret;
 }
 
 static Eina_Bool
-_db_fill_struct(Eo_Type_Def *struct_def)
+_db_fill_struct(Eolian_Type *struct_def)
 {
-   return database_struct_add((Eolian_Type*)struct_def);
+   return database_struct_add(struct_def);
 }
 
 Eina_Bool
@@ -1456,7 +1463,7 @@ nodeloop:
              break;
            case NODE_STRUCT:
              {
-                Eo_Type_Def *def = nd->def_struct;
+                Eolian_Type *def = nd->def_struct;
                 nd->def_struct = NULL;
                 if (!_db_fill_struct(def))
                   goto error;

-- 


Reply via email to