forked from enlightenment/efl
eolian: actually generate typedecls as necessary
This commit is contained in:
parent
06c246ee27
commit
1425523bd4
|
@ -24,24 +24,26 @@ database_type_del(Eolian_Type *tp)
|
|||
if (tp->legacy) eina_stringshare_del(tp->legacy);
|
||||
if (tp->freefunc) eina_stringshare_del(tp->freefunc);
|
||||
database_doc_del(tp->doc);
|
||||
database_typedecl_del(tp->decl);
|
||||
free(tp);
|
||||
}
|
||||
|
||||
void
|
||||
database_typedecl_del(Eolian_Typedecl *tp)
|
||||
{
|
||||
/* TODO: own storage for typedecls for several fields */
|
||||
if (!tp) return;
|
||||
const char *sp;
|
||||
if (tp->base.file) eina_stringshare_del(tp->base.file);
|
||||
database_type_del(tp->base_type);
|
||||
/*database_type_del(tp->base_type);*/
|
||||
if (tp->name) eina_stringshare_del(tp->name);
|
||||
if (tp->full_name) eina_stringshare_del(tp->full_name);
|
||||
if (tp->fields) eina_hash_free(tp->fields);
|
||||
if (tp->field_list) eina_list_free(tp->field_list);
|
||||
/*if (tp->fields) eina_hash_free(tp->fields);
|
||||
if (tp->field_list) eina_list_free(tp->field_list);*/
|
||||
if (tp->namespaces) EINA_LIST_FREE(tp->namespaces, sp)
|
||||
eina_stringshare_del(sp);
|
||||
if (tp->legacy) eina_stringshare_del(tp->legacy);
|
||||
database_doc_del(tp->doc);
|
||||
/*database_doc_del(tp->doc);*/
|
||||
free(tp);
|
||||
}
|
||||
|
||||
|
@ -62,9 +64,34 @@ database_typedef_del(Eolian_Type *tp)
|
|||
database_type_del(tp);
|
||||
}
|
||||
|
||||
static Eolian_Typedecl *
|
||||
_typedecl_add(Eolian_Type *type)
|
||||
{
|
||||
const char *nm;
|
||||
Eina_List *l;
|
||||
|
||||
Eolian_Typedecl *ret = calloc(1, sizeof(Eolian_Typedecl));
|
||||
ret->base.file = eina_stringshare_ref(type->base.file);
|
||||
ret->base.line = type->base.line;
|
||||
ret->base.column = type->base.column;
|
||||
ret->base_type = type->base_type;
|
||||
ret->name = eina_stringshare_ref(type->name);
|
||||
ret->full_name = eina_stringshare_ref(type->full_name);
|
||||
if (type->namespaces) EINA_LIST_FOREACH(type->namespaces, l, nm)
|
||||
ret->namespaces = eina_list_append(ret->namespaces, eina_stringshare_ref(nm));
|
||||
ret->fields = type->fields;
|
||||
ret->field_list = type->field_list;
|
||||
ret->doc = type->doc;
|
||||
ret->legacy = eina_stringshare_ref(type->legacy);
|
||||
ret->is_extern = type->is_extern;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
database_type_add(Eolian_Type *def)
|
||||
{
|
||||
def->decl = _typedecl_add(def);
|
||||
eina_hash_set(_aliases, def->full_name, def);
|
||||
eina_hash_set(_aliasesf, def->base.file, eina_list_append
|
||||
((Eina_List*)eina_hash_find(_aliasesf, def->base.file), def));
|
||||
|
@ -74,6 +101,7 @@ database_type_add(Eolian_Type *def)
|
|||
void
|
||||
database_struct_add(Eolian_Type *tp)
|
||||
{
|
||||
tp->decl = _typedecl_add(tp);
|
||||
eina_hash_set(_structs, tp->full_name, tp);
|
||||
eina_hash_set(_structsf, tp->base.file, eina_list_append
|
||||
((Eina_List*)eina_hash_find(_structsf, tp->base.file), tp));
|
||||
|
@ -83,6 +111,7 @@ database_struct_add(Eolian_Type *tp)
|
|||
void
|
||||
database_enum_add(Eolian_Type *tp)
|
||||
{
|
||||
tp->decl = _typedecl_add(tp);
|
||||
eina_hash_set(_enums, tp->full_name, tp);
|
||||
eina_hash_set(_enumsf, tp->base.file, eina_list_append
|
||||
((Eina_List*)eina_hash_find(_enumsf, tp->base.file), tp));
|
||||
|
|
|
@ -178,6 +178,7 @@ struct _Eolian_Type
|
|||
Eolian_Documentation *doc;
|
||||
Eina_Stringshare *legacy;
|
||||
Eina_Stringshare *freefunc;
|
||||
Eolian_Typedecl *decl;
|
||||
Eina_Bool is_const :1;
|
||||
Eina_Bool is_own :1;
|
||||
Eina_Bool is_extern :1;
|
||||
|
|
Loading…
Reference in New Issue