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; --
