forked from enlightenment/efl
eolian: add missing pieces of minor infra for enum
This commit is contained in:
parent
e2fb43b7b5
commit
cf8da3790e
|
@ -123,6 +123,55 @@ _stype_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
|||
}
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_etype_field_cb(const Eina_Hash *hash EINA_UNUSED, const void *key, void *data,
|
||||
void *fdata)
|
||||
{
|
||||
Eina_Strbuf *buf = (Eina_Strbuf*)fdata;
|
||||
const char *fname = (const char*)key;
|
||||
Eolian_Enum_Field *ef = (Eolian_Enum_Field*)data;
|
||||
eina_strbuf_append(buf, fname);
|
||||
if (ef->value)
|
||||
{
|
||||
Eina_Value *val = NULL;
|
||||
Eolian_Expression_Type et = eolian_expression_eval(ef->value,
|
||||
EOLIAN_MASK_INT, &val);
|
||||
const char *ret;
|
||||
eina_strbuf_append(buf, " = ");
|
||||
ret = eolian_expression_value_to_literal(val, et);
|
||||
eina_strbuf_append(buf, ret);
|
||||
eina_stringshare_del(ret);
|
||||
}
|
||||
eina_strbuf_append(buf, ", ");
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_etype_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
||||
{
|
||||
eina_strbuf_append(buf, "enum ");
|
||||
if (tp->name)
|
||||
{
|
||||
Eina_List *l;
|
||||
const char *sp;
|
||||
EINA_LIST_FOREACH(tp->namespaces, l, 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_hash_foreach(tp->fields, _etype_field_cb, 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)
|
||||
{
|
||||
|
@ -161,18 +210,35 @@ database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
|||
_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
|
||||
|| tp->type == EOLIAN_TYPE_REGULAR_STRUCT
|
||||
|| tp->type == EOLIAN_TYPE_REGULAR_ENUM
|
||||
|| tp->type == EOLIAN_TYPE_VOID
|
||||
|| tp->type == EOLIAN_TYPE_CLASS)
|
||||
&& tp->is_const)
|
||||
{
|
||||
eina_strbuf_append(buf, "const ");
|
||||
}
|
||||
if (tp->type == EOLIAN_TYPE_REGULAR || tp->type == EOLIAN_TYPE_CLASS)
|
||||
if (tp->type == EOLIAN_TYPE_REGULAR
|
||||
|| tp->type == EOLIAN_TYPE_CLASS
|
||||
|| tp->type == EOLIAN_TYPE_REGULAR_STRUCT
|
||||
|| tp->type == EOLIAN_TYPE_REGULAR_ENUM)
|
||||
{
|
||||
Eina_List *l;
|
||||
const char *sp;
|
||||
if (tp->type == EOLIAN_TYPE_REGULAR_STRUCT)
|
||||
{
|
||||
eina_strbuf_append(buf, "struct ");
|
||||
}
|
||||
else if (tp->type == EOLIAN_TYPE_REGULAR_ENUM)
|
||||
{
|
||||
eina_strbuf_append(buf, "enum ");
|
||||
}
|
||||
EINA_LIST_FOREACH(tp->namespaces, l, sp)
|
||||
{
|
||||
eina_strbuf_append(buf, sp);
|
||||
|
@ -182,11 +248,6 @@ database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name)
|
|||
if (kw) eina_strbuf_append(buf, eo_lexer_get_c_type(kw));
|
||||
else eina_strbuf_append(buf, tp->name);
|
||||
}
|
||||
else if (tp->type == EOLIAN_TYPE_REGULAR_STRUCT)
|
||||
{
|
||||
eina_strbuf_append(buf, "struct ");
|
||||
eina_strbuf_append(buf, tp->name);
|
||||
}
|
||||
else if (tp->type == EOLIAN_TYPE_VOID)
|
||||
eina_strbuf_append(buf, "void");
|
||||
else
|
||||
|
@ -209,12 +270,34 @@ static Eina_Bool
|
|||
_print_field(const Eina_Hash *hash EINA_UNUSED, const void *key, void *data,
|
||||
void *fdata EINA_UNUSED)
|
||||
{
|
||||
Eolian_Struct_Field *sf = (Eolian_Struct_Field*)data;
|
||||
printf("%s: ", (const char*)key);
|
||||
database_type_print((Eolian_Type*)data);
|
||||
database_type_print(sf->type);
|
||||
printf("; ");
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_print_enum_field(const Eina_Hash *hash EINA_UNUSED, const void *key,
|
||||
void *data, void *fdata EINA_UNUSED)
|
||||
{
|
||||
Eolian_Enum_Field *ef = (Eolian_Enum_Field*)data;
|
||||
printf("%s", (const char*)key);
|
||||
if (ef->value)
|
||||
{
|
||||
Eina_Value *val = NULL;
|
||||
Eolian_Expression_Type et = eolian_expression_eval(ef->value,
|
||||
EOLIAN_MASK_INT, &val);
|
||||
const char *ret;
|
||||
printf(" = ");
|
||||
ret = eolian_expression_value_to_literal(val, et);
|
||||
printf("%s", ret);
|
||||
eina_stringshare_del(ret);
|
||||
}
|
||||
printf(", ");
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_typedef_print(Eolian_Type *tp)
|
||||
{
|
||||
|
@ -242,6 +325,8 @@ database_type_print(Eolian_Type *tp)
|
|||
printf("void");
|
||||
else if (tp->type == EOLIAN_TYPE_REGULAR_STRUCT)
|
||||
printf("struct %s", tp->full_name);
|
||||
else if (tp->type == EOLIAN_TYPE_REGULAR_ENUM)
|
||||
printf("enum %s", tp->full_name);
|
||||
else if (tp->type == EOLIAN_TYPE_POINTER)
|
||||
{
|
||||
database_type_print(tp->base_type);
|
||||
|
@ -270,11 +355,18 @@ database_type_print(Eolian_Type *tp)
|
|||
else if (tp->type == EOLIAN_TYPE_STRUCT)
|
||||
{
|
||||
printf("struct ");
|
||||
if (tp->name) printf("%s ", tp->name);
|
||||
if (tp->full_name) printf("%s ", tp->full_name);
|
||||
printf("{ ");
|
||||
eina_hash_foreach(tp->fields, _print_field, NULL);
|
||||
printf("}");
|
||||
}
|
||||
else if (tp->type == EOLIAN_TYPE_ENUM)
|
||||
{
|
||||
printf("enum %s ", tp->full_name);
|
||||
printf("{ ");
|
||||
eina_hash_foreach(tp->fields, _print_enum_field, NULL);
|
||||
printf("}");
|
||||
}
|
||||
if (tp->is_own)
|
||||
putchar(')');
|
||||
if (tp->is_const)
|
||||
|
|
|
@ -90,6 +90,7 @@ eolian_type_subtypes_get(const Eolian_Type *tp)
|
|||
EINA_SAFETY_ON_FALSE_RETURN_VAL(tpt == EOLIAN_TYPE_REGULAR
|
||||
|| tpt == EOLIAN_TYPE_POINTER
|
||||
|| tpt == EOLIAN_TYPE_REGULAR_STRUCT
|
||||
|| tpt == EOLIAN_TYPE_REGULAR_ENUM
|
||||
|| tpt == EOLIAN_TYPE_CLASS, NULL);
|
||||
if (!tp->subtypes) return NULL;
|
||||
return eina_list_iterator_new(tp->subtypes);
|
||||
|
|
Loading…
Reference in New Issue