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->legacy) eina_stringshare_del(tp->legacy);
|
||||||
if (tp->freefunc) eina_stringshare_del(tp->freefunc);
|
if (tp->freefunc) eina_stringshare_del(tp->freefunc);
|
||||||
database_doc_del(tp->doc);
|
database_doc_del(tp->doc);
|
||||||
|
database_typedecl_del(tp->decl);
|
||||||
free(tp);
|
free(tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
database_typedecl_del(Eolian_Typedecl *tp)
|
database_typedecl_del(Eolian_Typedecl *tp)
|
||||||
{
|
{
|
||||||
|
/* TODO: own storage for typedecls for several fields */
|
||||||
if (!tp) return;
|
if (!tp) return;
|
||||||
const char *sp;
|
const char *sp;
|
||||||
if (tp->base.file) eina_stringshare_del(tp->base.file);
|
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->name) eina_stringshare_del(tp->name);
|
||||||
if (tp->full_name) eina_stringshare_del(tp->full_name);
|
if (tp->full_name) eina_stringshare_del(tp->full_name);
|
||||||
if (tp->fields) eina_hash_free(tp->fields);
|
/*if (tp->fields) eina_hash_free(tp->fields);
|
||||||
if (tp->field_list) eina_list_free(tp->field_list);
|
if (tp->field_list) eina_list_free(tp->field_list);*/
|
||||||
if (tp->namespaces) EINA_LIST_FREE(tp->namespaces, sp)
|
if (tp->namespaces) EINA_LIST_FREE(tp->namespaces, sp)
|
||||||
eina_stringshare_del(sp);
|
eina_stringshare_del(sp);
|
||||||
if (tp->legacy) eina_stringshare_del(tp->legacy);
|
if (tp->legacy) eina_stringshare_del(tp->legacy);
|
||||||
database_doc_del(tp->doc);
|
/*database_doc_del(tp->doc);*/
|
||||||
free(tp);
|
free(tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,9 +64,34 @@ database_typedef_del(Eolian_Type *tp)
|
||||||
database_type_del(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
|
void
|
||||||
database_type_add(Eolian_Type *def)
|
database_type_add(Eolian_Type *def)
|
||||||
{
|
{
|
||||||
|
def->decl = _typedecl_add(def);
|
||||||
eina_hash_set(_aliases, def->full_name, def);
|
eina_hash_set(_aliases, def->full_name, def);
|
||||||
eina_hash_set(_aliasesf, def->base.file, eina_list_append
|
eina_hash_set(_aliasesf, def->base.file, eina_list_append
|
||||||
((Eina_List*)eina_hash_find(_aliasesf, def->base.file), def));
|
((Eina_List*)eina_hash_find(_aliasesf, def->base.file), def));
|
||||||
|
@ -74,6 +101,7 @@ database_type_add(Eolian_Type *def)
|
||||||
void
|
void
|
||||||
database_struct_add(Eolian_Type *tp)
|
database_struct_add(Eolian_Type *tp)
|
||||||
{
|
{
|
||||||
|
tp->decl = _typedecl_add(tp);
|
||||||
eina_hash_set(_structs, tp->full_name, tp);
|
eina_hash_set(_structs, tp->full_name, tp);
|
||||||
eina_hash_set(_structsf, tp->base.file, eina_list_append
|
eina_hash_set(_structsf, tp->base.file, eina_list_append
|
||||||
((Eina_List*)eina_hash_find(_structsf, tp->base.file), tp));
|
((Eina_List*)eina_hash_find(_structsf, tp->base.file), tp));
|
||||||
|
@ -83,6 +111,7 @@ database_struct_add(Eolian_Type *tp)
|
||||||
void
|
void
|
||||||
database_enum_add(Eolian_Type *tp)
|
database_enum_add(Eolian_Type *tp)
|
||||||
{
|
{
|
||||||
|
tp->decl = _typedecl_add(tp);
|
||||||
eina_hash_set(_enums, tp->full_name, tp);
|
eina_hash_set(_enums, tp->full_name, tp);
|
||||||
eina_hash_set(_enumsf, tp->base.file, eina_list_append
|
eina_hash_set(_enumsf, tp->base.file, eina_list_append
|
||||||
((Eina_List*)eina_hash_find(_enumsf, tp->base.file), tp));
|
((Eina_List*)eina_hash_find(_enumsf, tp->base.file), tp));
|
||||||
|
|
|
@ -178,6 +178,7 @@ struct _Eolian_Type
|
||||||
Eolian_Documentation *doc;
|
Eolian_Documentation *doc;
|
||||||
Eina_Stringshare *legacy;
|
Eina_Stringshare *legacy;
|
||||||
Eina_Stringshare *freefunc;
|
Eina_Stringshare *freefunc;
|
||||||
|
Eolian_Typedecl *decl;
|
||||||
Eina_Bool is_const :1;
|
Eina_Bool is_const :1;
|
||||||
Eina_Bool is_own :1;
|
Eina_Bool is_own :1;
|
||||||
Eina_Bool is_extern :1;
|
Eina_Bool is_extern :1;
|
||||||
|
|
Loading…
Reference in New Issue