eolian: store types/typedecls in units

This commit is contained in:
Daniel Kolesa 2018-02-21 17:59:39 +01:00
parent 7b5a73b967
commit 665b88204c
3 changed files with 27 additions and 26 deletions

View File

@ -41,31 +41,34 @@ database_typedecl_del(Eolian_Typedecl *tp)
} }
void 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); eolian_object_add(&tp->base, tp->full_name, unit->state->unit.aliases);
eina_hash_set(state->aliases_f, def->base.file, eina_list_append eolian_object_add(&tp->base, tp->full_name, unit->aliases);
((Eina_List*)eina_hash_find(state->aliases_f, def->base.file), eina_hash_set(unit->state->aliases_f, tp->base.file, eina_list_append
def)); ((Eina_List*)eina_hash_find(unit->state->aliases_f, tp->base.file),
database_decl_add(state, def->full_name, EOLIAN_DECL_ALIAS, def->base.file, def); tp));
database_decl_add(unit->state, tp->full_name, EOLIAN_DECL_ALIAS, tp->base.file, tp);
} }
void 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); eolian_object_add(&tp->base, tp->full_name, unit->state->unit.structs);
eina_hash_set(state->structs_f, tp->base.file, eina_list_append eolian_object_add(&tp->base, tp->full_name, unit->structs);
((Eina_List*)eina_hash_find(state->structs_f, tp->base.file), tp)); eina_hash_set(unit->state->structs_f, tp->base.file, eina_list_append
database_decl_add(state, tp->full_name, EOLIAN_DECL_STRUCT, tp->base.file, tp); ((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 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); eolian_object_add(&tp->base, tp->full_name, unit->state->unit.enums);
eina_hash_set(state->enums_f, tp->base.file, eina_list_append eolian_object_add(&tp->base, tp->full_name, unit->enums);
((Eina_List*)eina_hash_find(state->enums_f, tp->base.file), tp)); eina_hash_set(unit->state->enums_f, tp->base.file, eina_list_append
database_decl_add(state, tp->full_name, EOLIAN_DECL_ENUM, tp->base.file, tp); ((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 Eina_Bool

View File

@ -131,14 +131,12 @@ push_typedecl(Eo_Lexer *ls)
static void static void
pop_type(Eo_Lexer *ls) 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); ls->tmp.type_defs = eina_list_remove_list(ls->tmp.type_defs, ls->tmp.type_defs);
} }
static void static void
pop_typedecl(Eo_Lexer *ls) 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); 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); check_match(ls, '}', '{', bline, bcolumn);
FILL_BASE(def->base, ls, line, column); 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; return def;
} }
@ -640,7 +638,7 @@ parse_enum(Eo_Lexer *ls, const char *name, Eina_Bool is_extern,
} }
check_match(ls, '}', '{', bline, bcolumn); check_match(ls, '}', '{', bline, bcolumn);
FILL_BASE(def->base, ls, line, column); 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; return def;
} }
@ -2154,13 +2152,13 @@ parse_unit(Eo_Lexer *ls, Eina_Bool eot)
} }
case KW_type: case KW_type:
{ {
database_type_add(ls->state, parse_typedef(ls)); database_type_add(ls->unit, parse_typedef(ls));
pop_typedecl(ls); pop_typedecl(ls);
break; break;
} }
case KW_function: case KW_function:
{ {
database_type_add(ls->state, parse_function_pointer(ls)); database_type_add(ls->unit, parse_function_pointer(ls));
pop_typedecl(ls); pop_typedecl(ls);
break; break;
} }
@ -2210,7 +2208,7 @@ parse_unit(Eo_Lexer *ls, Eina_Bool eot)
eo_lexer_get(ls); eo_lexer_get(ls);
FILL_DOC(ls, def, doc); FILL_DOC(ls, def, doc);
FILL_BASE(def->base, ls, line, col); FILL_BASE(def->base, ls, line, col);
database_struct_add(ls->state, def); database_struct_add(ls->unit, def);
pop_typedecl(ls); pop_typedecl(ls);
break; break;
} }

View File

@ -344,9 +344,9 @@ void database_unit_del(Eolian_Unit *unit);
/* types */ /* types */
void database_type_add(Eolian *state, Eolian_Typedecl *def); void database_type_add(Eolian_Unit *unit, Eolian_Typedecl *tp);
void database_struct_add(Eolian *state, Eolian_Typedecl *tp); void database_struct_add(Eolian_Unit *unit, Eolian_Typedecl *tp);
void database_enum_add(Eolian *state, Eolian_Typedecl *tp); void database_enum_add(Eolian_Unit *unit, Eolian_Typedecl *tp);
void database_type_del(Eolian_Type *tp); void database_type_del(Eolian_Type *tp);
void database_typedecl_del(Eolian_Typedecl *tp); void database_typedecl_del(Eolian_Typedecl *tp);