forked from enlightenment/efl
eolian: store types/typedecls in units
This commit is contained in:
parent
7b5a73b967
commit
665b88204c
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue