forked from enlightenment/efl
eolian: separate type_to_str for decls
This commit is contained in:
parent
5401c775ec
commit
c3a33653f3
|
@ -131,123 +131,9 @@ database_enum_add(Eolian_Type *tp)
|
||||||
database_decl_add(tp->full_name, EOLIAN_DECL_ENUM, tp->base.file, tp->decl);
|
database_decl_add(tp->full_name, EOLIAN_DECL_ENUM, tp->base.file, tp->decl);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_stype_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
|
||||||
{
|
|
||||||
Eolian_Struct_Type_Field *sf;
|
|
||||||
Eina_List *l;
|
|
||||||
eina_strbuf_append(buf, "struct ");
|
|
||||||
if (tp->name)
|
|
||||||
{
|
|
||||||
Eina_List *m;
|
|
||||||
const char *sp;
|
|
||||||
EINA_LIST_FOREACH(tp->namespaces, m, sp)
|
|
||||||
{
|
|
||||||
eina_strbuf_append(buf, sp);
|
|
||||||
eina_strbuf_append_char(buf, '_');
|
|
||||||
}
|
|
||||||
eina_strbuf_append(buf, tp->name);
|
|
||||||
eina_strbuf_append_char(buf, ' ');
|
|
||||||
}
|
|
||||||
if (tp->type == EOLIAN_TYPE_STRUCT_OPAQUE)
|
|
||||||
goto append_name;
|
|
||||||
eina_strbuf_append(buf, "{ ");
|
|
||||||
EINA_LIST_FOREACH(tp->field_list, l, sf)
|
|
||||||
{
|
|
||||||
database_type_to_str(sf->type, buf, sf->name);
|
|
||||||
eina_strbuf_append(buf, "; ");
|
|
||||||
}
|
|
||||||
eina_strbuf_append(buf, "}");
|
|
||||||
append_name:
|
|
||||||
if (name)
|
|
||||||
{
|
|
||||||
eina_strbuf_append_char(buf, ' ');
|
|
||||||
eina_strbuf_append(buf, name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_etype_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
|
||||||
{
|
|
||||||
Eolian_Enum_Type_Field *ef;
|
|
||||||
Eina_List *l;
|
|
||||||
eina_strbuf_append(buf, "enum ");
|
|
||||||
if (tp->name)
|
|
||||||
{
|
|
||||||
Eina_List *m;
|
|
||||||
const char *sp;
|
|
||||||
EINA_LIST_FOREACH(tp->namespaces, m, sp)
|
|
||||||
{
|
|
||||||
eina_strbuf_append(buf, sp);
|
|
||||||
eina_strbuf_append_char(buf, '_');
|
|
||||||
}
|
|
||||||
eina_strbuf_append(buf, tp->name);
|
|
||||||
eina_strbuf_append_char(buf, ' ');
|
|
||||||
}
|
|
||||||
eina_strbuf_append(buf, "{ ");
|
|
||||||
EINA_LIST_FOREACH(tp->field_list, l, ef)
|
|
||||||
{
|
|
||||||
eina_strbuf_append(buf, ef->name);
|
|
||||||
if (ef->value)
|
|
||||||
{
|
|
||||||
Eolian_Value val = eolian_expression_eval(ef->value,
|
|
||||||
EOLIAN_MASK_INT);
|
|
||||||
const char *ret;
|
|
||||||
eina_strbuf_append(buf, " = ");
|
|
||||||
ret = eolian_expression_value_to_literal(&val);
|
|
||||||
eina_strbuf_append(buf, ret);
|
|
||||||
eina_stringshare_del(ret);
|
|
||||||
}
|
|
||||||
if (l != eina_list_last(tp->field_list))
|
|
||||||
eina_strbuf_append(buf, ", ");
|
|
||||||
}
|
|
||||||
eina_strbuf_append(buf, " }");
|
|
||||||
if (name)
|
|
||||||
{
|
|
||||||
eina_strbuf_append_char(buf, ' ');
|
|
||||||
eina_strbuf_append(buf, name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_atype_to_str(const Eolian_Type *tp, Eina_Strbuf *buf)
|
|
||||||
{
|
|
||||||
Eina_Strbuf *fulln = eina_strbuf_new();
|
|
||||||
Eina_List *l;
|
|
||||||
const char *sp;
|
|
||||||
|
|
||||||
eina_strbuf_append(buf, "typedef ");
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(tp->namespaces, l, sp)
|
|
||||||
{
|
|
||||||
eina_strbuf_append(fulln, sp);
|
|
||||||
eina_strbuf_append_char(fulln, '_');
|
|
||||||
}
|
|
||||||
eina_strbuf_append(fulln, tp->name);
|
|
||||||
|
|
||||||
database_type_to_str(tp->base_type, buf, eina_strbuf_string_get(fulln));
|
|
||||||
eina_strbuf_free(fulln);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
||||||
{
|
{
|
||||||
if (tp->type == EOLIAN_TYPE_ALIAS)
|
|
||||||
{
|
|
||||||
_atype_to_str(tp, buf);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (tp->type == EOLIAN_TYPE_STRUCT
|
|
||||||
|| tp->type == EOLIAN_TYPE_STRUCT_OPAQUE)
|
|
||||||
{
|
|
||||||
_stype_to_str(tp, buf, name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (tp->type == EOLIAN_TYPE_ENUM)
|
|
||||||
{
|
|
||||||
_etype_to_str(tp, buf, name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ((tp->type == EOLIAN_TYPE_REGULAR
|
if ((tp->type == EOLIAN_TYPE_REGULAR
|
||||||
|| tp->type == EOLIAN_TYPE_COMPLEX
|
|| tp->type == EOLIAN_TYPE_COMPLEX
|
||||||
|| tp->type == EOLIAN_TYPE_VOID
|
|| tp->type == EOLIAN_TYPE_VOID
|
||||||
|
@ -291,3 +177,129 @@ database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
||||||
eina_strbuf_append(buf, name);
|
eina_strbuf_append(buf, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_stype_to_str(const Eolian_Typedecl *tp, Eina_Strbuf *buf, const char *name)
|
||||||
|
{
|
||||||
|
Eolian_Struct_Type_Field *sf;
|
||||||
|
Eina_List *l;
|
||||||
|
eina_strbuf_append(buf, "struct ");
|
||||||
|
if (tp->name)
|
||||||
|
{
|
||||||
|
Eina_List *m;
|
||||||
|
const char *sp;
|
||||||
|
EINA_LIST_FOREACH(tp->namespaces, m, sp)
|
||||||
|
{
|
||||||
|
eina_strbuf_append(buf, sp);
|
||||||
|
eina_strbuf_append_char(buf, '_');
|
||||||
|
}
|
||||||
|
eina_strbuf_append(buf, tp->name);
|
||||||
|
eina_strbuf_append_char(buf, ' ');
|
||||||
|
}
|
||||||
|
if (tp->type == EOLIAN_TYPEDECL_STRUCT_OPAQUE)
|
||||||
|
goto append_name;
|
||||||
|
eina_strbuf_append(buf, "{ ");
|
||||||
|
EINA_LIST_FOREACH(tp->field_list, l, sf)
|
||||||
|
{
|
||||||
|
database_type_to_str(sf->type, buf, sf->name);
|
||||||
|
eina_strbuf_append(buf, "; ");
|
||||||
|
}
|
||||||
|
eina_strbuf_append(buf, "}");
|
||||||
|
append_name:
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
eina_strbuf_append_char(buf, ' ');
|
||||||
|
eina_strbuf_append(buf, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_etype_to_str(const Eolian_Typedecl *tp, Eina_Strbuf *buf, const char *name)
|
||||||
|
{
|
||||||
|
Eolian_Enum_Type_Field *ef;
|
||||||
|
Eina_List *l;
|
||||||
|
eina_strbuf_append(buf, "enum ");
|
||||||
|
if (tp->name)
|
||||||
|
{
|
||||||
|
Eina_List *m;
|
||||||
|
const char *sp;
|
||||||
|
EINA_LIST_FOREACH(tp->namespaces, m, sp)
|
||||||
|
{
|
||||||
|
eina_strbuf_append(buf, sp);
|
||||||
|
eina_strbuf_append_char(buf, '_');
|
||||||
|
}
|
||||||
|
eina_strbuf_append(buf, tp->name);
|
||||||
|
eina_strbuf_append_char(buf, ' ');
|
||||||
|
}
|
||||||
|
eina_strbuf_append(buf, "{ ");
|
||||||
|
EINA_LIST_FOREACH(tp->field_list, l, ef)
|
||||||
|
{
|
||||||
|
eina_strbuf_append(buf, ef->name);
|
||||||
|
if (ef->value)
|
||||||
|
{
|
||||||
|
Eolian_Value val = eolian_expression_eval(ef->value,
|
||||||
|
EOLIAN_MASK_INT);
|
||||||
|
const char *ret;
|
||||||
|
eina_strbuf_append(buf, " = ");
|
||||||
|
ret = eolian_expression_value_to_literal(&val);
|
||||||
|
eina_strbuf_append(buf, ret);
|
||||||
|
eina_stringshare_del(ret);
|
||||||
|
}
|
||||||
|
if (l != eina_list_last(tp->field_list))
|
||||||
|
eina_strbuf_append(buf, ", ");
|
||||||
|
}
|
||||||
|
eina_strbuf_append(buf, " }");
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
eina_strbuf_append_char(buf, ' ');
|
||||||
|
eina_strbuf_append(buf, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_atype_to_str(const Eolian_Typedecl *tp, Eina_Strbuf *buf)
|
||||||
|
{
|
||||||
|
Eina_Strbuf *fulln = eina_strbuf_new();
|
||||||
|
Eina_List *l;
|
||||||
|
const char *sp;
|
||||||
|
|
||||||
|
eina_strbuf_append(buf, "typedef ");
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(tp->namespaces, l, sp)
|
||||||
|
{
|
||||||
|
eina_strbuf_append(fulln, sp);
|
||||||
|
eina_strbuf_append_char(fulln, '_');
|
||||||
|
}
|
||||||
|
eina_strbuf_append(fulln, tp->name);
|
||||||
|
|
||||||
|
database_type_to_str(tp->base_type, buf, eina_strbuf_string_get(fulln));
|
||||||
|
eina_strbuf_free(fulln);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
database_typedecl_to_str(const Eolian_Typedecl *tp, Eina_Strbuf *buf, const char *name)
|
||||||
|
{
|
||||||
|
if (tp->type == EOLIAN_TYPEDECL_ALIAS)
|
||||||
|
{
|
||||||
|
_atype_to_str(tp, buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (tp->type == EOLIAN_TYPEDECL_STRUCT
|
||||||
|
|| tp->type == EOLIAN_TYPEDECL_STRUCT_OPAQUE)
|
||||||
|
{
|
||||||
|
_stype_to_str(tp, buf, name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (tp->type == EOLIAN_TYPEDECL_ENUM)
|
||||||
|
{
|
||||||
|
_etype_to_str(tp, buf, name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
eina_strbuf_append_char(buf, ' ');
|
||||||
|
eina_strbuf_append(buf, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -340,8 +340,14 @@ eolian_type_c_type_named_get(const Eolian_Type *tp, const char *name)
|
||||||
EAPI Eina_Stringshare *
|
EAPI Eina_Stringshare *
|
||||||
eolian_typedecl_c_type_named_get(const Eolian_Typedecl *tp, const char *name)
|
eolian_typedecl_c_type_named_get(const Eolian_Typedecl *tp, const char *name)
|
||||||
{
|
{
|
||||||
|
Eina_Stringshare *ret;
|
||||||
|
Eina_Strbuf *buf;
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
||||||
return eolian_type_c_type_named_get(tp->parent, name);
|
buf = eina_strbuf_new();
|
||||||
|
database_typedecl_to_str(tp, buf, name);
|
||||||
|
ret = eina_stringshare_add(eina_strbuf_string_get(buf));
|
||||||
|
eina_strbuf_free(buf);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Stringshare *
|
EAPI Eina_Stringshare *
|
||||||
|
|
|
@ -311,6 +311,7 @@ void database_typedef_del(Eolian_Type *tp);
|
||||||
void database_typedecl_del(Eolian_Typedecl *tp);
|
void database_typedecl_del(Eolian_Typedecl *tp);
|
||||||
|
|
||||||
void database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name);
|
void database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name);
|
||||||
|
void database_typedecl_to_str(const Eolian_Typedecl *tp, Eina_Strbuf *buf, const char *name);
|
||||||
|
|
||||||
/* expressions */
|
/* expressions */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue