diff --git a/src/lib/eolian/database_type.c b/src/lib/eolian/database_type.c index 29da94cc86..d8954ec5ae 100644 --- a/src/lib/eolian/database_type.c +++ b/src/lib/eolian/database_type.c @@ -41,31 +41,34 @@ database_typedecl_del(Eolian_Typedecl *tp) } void -database_type_add(Eolian *state, Eolian_Typedecl *def) +database_type_add(Eolian_Unit *unit, Eolian_Typedecl *tp) { - eina_hash_set(state->unit.aliases, def->full_name, def); - eina_hash_set(state->aliases_f, def->base.file, eina_list_append - ((Eina_List*)eina_hash_find(state->aliases_f, def->base.file), - def)); - database_decl_add(state, def->full_name, EOLIAN_DECL_ALIAS, def->base.file, def); + eolian_object_add(&tp->base, tp->full_name, unit->state->unit.aliases); + eolian_object_add(&tp->base, tp->full_name, unit->aliases); + eina_hash_set(unit->state->aliases_f, tp->base.file, eina_list_append + ((Eina_List*)eina_hash_find(unit->state->aliases_f, tp->base.file), + tp)); + database_decl_add(unit->state, tp->full_name, EOLIAN_DECL_ALIAS, tp->base.file, tp); } void -database_struct_add(Eolian *state, Eolian_Typedecl *tp) +database_struct_add(Eolian_Unit *unit, Eolian_Typedecl *tp) { - eina_hash_set(state->unit.structs, tp->full_name, tp); - eina_hash_set(state->structs_f, tp->base.file, eina_list_append - ((Eina_List*)eina_hash_find(state->structs_f, tp->base.file), tp)); - database_decl_add(state, tp->full_name, EOLIAN_DECL_STRUCT, tp->base.file, tp); + eolian_object_add(&tp->base, tp->full_name, unit->state->unit.structs); + eolian_object_add(&tp->base, tp->full_name, unit->structs); + eina_hash_set(unit->state->structs_f, tp->base.file, eina_list_append + ((Eina_List*)eina_hash_find(unit->state->structs_f, tp->base.file), tp)); + database_decl_add(unit->state, tp->full_name, EOLIAN_DECL_STRUCT, tp->base.file, tp); } void -database_enum_add(Eolian *state, Eolian_Typedecl *tp) +database_enum_add(Eolian_Unit *unit, Eolian_Typedecl *tp) { - eina_hash_set(state->unit.enums, tp->full_name, tp); - eina_hash_set(state->enums_f, tp->base.file, eina_list_append - ((Eina_List*)eina_hash_find(state->enums_f, tp->base.file), tp)); - database_decl_add(state, tp->full_name, EOLIAN_DECL_ENUM, tp->base.file, tp); + eolian_object_add(&tp->base, tp->full_name, unit->state->unit.enums); + eolian_object_add(&tp->base, tp->full_name, unit->enums); + eina_hash_set(unit->state->enums_f, tp->base.file, eina_list_append + ((Eina_List*)eina_hash_find(unit->state->enums_f, tp->base.file), tp)); + database_decl_add(unit->state, tp->full_name, EOLIAN_DECL_ENUM, tp->base.file, tp); } Eina_Bool diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index 3f888c5dc7..4a4757a949 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -131,14 +131,12 @@ push_typedecl(Eo_Lexer *ls) static void pop_type(Eo_Lexer *ls) { - eolian_object_ref((Eolian_Object *)eina_list_data_get(ls->tmp.type_defs)); ls->tmp.type_defs = eina_list_remove_list(ls->tmp.type_defs, ls->tmp.type_defs); } static void pop_typedecl(Eo_Lexer *ls) { - eolian_object_ref((Eolian_Object *)eina_list_data_get(ls->tmp.type_decls)); ls->tmp.type_decls = eina_list_remove_list(ls->tmp.type_decls, ls->tmp.type_decls); } @@ -528,7 +526,7 @@ parse_struct(Eo_Lexer *ls, const char *name, Eina_Bool is_extern, } check_match(ls, '}', '{', bline, bcolumn); FILL_BASE(def->base, ls, line, column); - if (name) database_struct_add(ls->state, def); + if (name) database_struct_add(ls->unit, def); return def; } @@ -640,7 +638,7 @@ parse_enum(Eo_Lexer *ls, const char *name, Eina_Bool is_extern, } check_match(ls, '}', '{', bline, bcolumn); FILL_BASE(def->base, ls, line, column); - if (name) database_enum_add(ls->state, def); + if (name) database_enum_add(ls->unit, def); return def; } @@ -2154,13 +2152,13 @@ parse_unit(Eo_Lexer *ls, Eina_Bool eot) } case KW_type: { - database_type_add(ls->state, parse_typedef(ls)); + database_type_add(ls->unit, parse_typedef(ls)); pop_typedecl(ls); break; } case KW_function: { - database_type_add(ls->state, parse_function_pointer(ls)); + database_type_add(ls->unit, parse_function_pointer(ls)); pop_typedecl(ls); break; } @@ -2210,7 +2208,7 @@ parse_unit(Eo_Lexer *ls, Eina_Bool eot) eo_lexer_get(ls); FILL_DOC(ls, def, doc); FILL_BASE(def->base, ls, line, col); - database_struct_add(ls->state, def); + database_struct_add(ls->unit, def); pop_typedecl(ls); break; } diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index e7ae5f1bb3..c8cc6dd0fb 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -344,9 +344,9 @@ void database_unit_del(Eolian_Unit *unit); /* types */ -void database_type_add(Eolian *state, Eolian_Typedecl *def); -void database_struct_add(Eolian *state, Eolian_Typedecl *tp); -void database_enum_add(Eolian *state, Eolian_Typedecl *tp); +void database_type_add(Eolian_Unit *unit, Eolian_Typedecl *tp); +void database_struct_add(Eolian_Unit *unit, Eolian_Typedecl *tp); +void database_enum_add(Eolian_Unit *unit, Eolian_Typedecl *tp); void database_type_del(Eolian_Type *tp); void database_typedecl_del(Eolian_Typedecl *tp);