eolian: remove retrieval funcs for type-style enums/aliases/structs

This commit is contained in:
Daniel Kolesa 2016-02-19 17:20:08 +00:00
parent 8614ee1e91
commit 4e40b60f06
4 changed files with 34 additions and 90 deletions

View File

@ -1268,36 +1268,33 @@ EAPI Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
EAPI Eina_Stringshare *eolian_class_c_get_function_name_get(const Eolian_Class *klass); EAPI Eina_Stringshare *eolian_class_c_get_function_name_get(const Eolian_Class *klass);
/* /*
* @brief Get an alias type by name. Supports namespaces. * @brief Get an alias type declaration by name. Supports namespaces.
* *
* @param[in] name the name of the alias * @param[in] name the name of the alias
* @return the alias type or NULL * @return the alias type or NULL
* *
* @ingroup Eolian * @ingroup Eolian
*/ */
EAPI const Eolian_Type *eolian_type_alias_get_by_name(const char *name);
EAPI const Eolian_Typedecl *eolian_typedecl_alias_get_by_name(const char *name); EAPI const Eolian_Typedecl *eolian_typedecl_alias_get_by_name(const char *name);
/* /*
* @brief Get a struct by name. Supports namespaces. * @brief Get a struct declaration by name. Supports namespaces.
* *
* @param[in] name the name of the struct * @param[in] name the name of the struct
* @return the struct or NULL * @return the struct or NULL
* *
* @ingroup Eolian * @ingroup Eolian
*/ */
EAPI const Eolian_Type *eolian_type_struct_get_by_name(const char *name);
EAPI const Eolian_Typedecl *eolian_typedecl_struct_get_by_name(const char *name); EAPI const Eolian_Typedecl *eolian_typedecl_struct_get_by_name(const char *name);
/* /*
* @brief Get an enum by name. Supports namespaces. * @brief Get an enum declaration by name. Supports namespaces.
* *
* @param[in] name the name of the struct * @param[in] name the name of the struct
* @return the struct or NULL * @return the struct or NULL
* *
* @ingroup Eolian * @ingroup Eolian
*/ */
EAPI const Eolian_Type *eolian_type_enum_get_by_name(const char *name);
EAPI const Eolian_Typedecl *eolian_typedecl_enum_get_by_name(const char *name); EAPI const Eolian_Typedecl *eolian_typedecl_enum_get_by_name(const char *name);
/* /*
@ -1310,7 +1307,6 @@ EAPI const Eolian_Typedecl *eolian_typedecl_enum_get_by_name(const char *name);
* *
* @ingroup Eolian * @ingroup Eolian
*/ */
EAPI Eina_Iterator *eolian_type_aliases_get_by_file(const char *fname);
EAPI Eina_Iterator *eolian_typedecl_aliases_get_by_file(const char *fname); EAPI Eina_Iterator *eolian_typedecl_aliases_get_by_file(const char *fname);
/* /*
@ -1323,7 +1319,6 @@ EAPI Eina_Iterator *eolian_typedecl_aliases_get_by_file(const char *fname);
* *
* @ingroup Eolian * @ingroup Eolian
*/ */
EAPI Eina_Iterator *eolian_type_structs_get_by_file(const char *fname);
EAPI Eina_Iterator *eolian_typedecl_structs_get_by_file(const char *fname); EAPI Eina_Iterator *eolian_typedecl_structs_get_by_file(const char *fname);
/* /*
@ -1336,7 +1331,6 @@ EAPI Eina_Iterator *eolian_typedecl_structs_get_by_file(const char *fname);
* *
* @ingroup Eolian * @ingroup Eolian
*/ */
EAPI Eina_Iterator *eolian_type_enums_get_by_file(const char *fname);
EAPI Eina_Iterator *eolian_typedecl_enums_get_by_file(const char *fname); EAPI Eina_Iterator *eolian_typedecl_enums_get_by_file(const char *fname);
/* /*

View File

@ -497,7 +497,7 @@ eval_exp(const Eolian_Expression *expr, Eolian_Expression_Mask mask,
if (!var) if (!var)
{ {
const Eolian_Type *etp; const Eolian_Typedecl *etpd;
const Eolian_Enum_Type_Field *fl; const Eolian_Enum_Type_Field *fl;
/* try aliases, hoping it'll be enum */ /* try aliases, hoping it'll be enum */
@ -510,19 +510,23 @@ eval_exp(const Eolian_Expression *expr, Eolian_Expression_Mask mask,
if (!(mask & EOLIAN_MASK_INT)) if (!(mask & EOLIAN_MASK_INT))
return expr_type_error(expr, EOLIAN_MASK_INT, mask); return expr_type_error(expr, EOLIAN_MASK_INT, mask);
etp = eolian_type_alias_get_by_name(fulln); etpd = eolian_typedecl_alias_get_by_name(fulln);
while (etp && (etp->type == EOLIAN_TYPE_ALIAS while (etpd && etpd->type == EOLIAN_TYPEDECL_ALIAS)
|| etp->type == EOLIAN_TYPE_REGULAR)) {
etp = eolian_type_base_type_get(etp); const Eolian_Type *etp = eolian_typedecl_base_type_get(etpd);
if (!etp || etp->type != EOLIAN_TYPE_REGULAR)
break;
etpd = eolian_type_typedecl_get(etp);
}
if (!etp) etp = eolian_type_enum_get_by_name(fulln); if (!etpd) etpd = eolian_typedecl_enum_get_by_name(fulln);
if (!etp || etp->type != EOLIAN_TYPE_ENUM) if (!etpd || etpd->type != EOLIAN_TYPEDECL_ENUM)
{ {
free(fulln); free(fulln);
return expr_error(expr, "undefined variable"); return expr_error(expr, "undefined variable");
} }
fl = eolian_type_enum_field_get(etp, memb); fl = eolian_typedecl_enum_field_get(etpd, memb);
if (fl) exp = eolian_type_enum_field_value_get(fl, EINA_TRUE); if (fl) exp = eolian_type_enum_field_value_get(fl, EINA_TRUE);
free(fulln); free(fulln);

View File

@ -6,69 +6,37 @@
#include "eolian_database.h" #include "eolian_database.h"
#include "eo_lexer.h" #include "eo_lexer.h"
EAPI const Eolian_Type * EAPI const Eolian_Typedecl *
eolian_type_alias_get_by_name(const char *name) eolian_typedecl_alias_get_by_name(const char *name)
{ {
if (!_aliases) return NULL; if (!_aliases) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(name); Eina_Stringshare *shr = eina_stringshare_add(name);
Eolian_Type *tp = eina_hash_find(_aliases, shr); Eolian_Type *tp = eina_hash_find(_aliases, shr);
eina_stringshare_del(shr); eina_stringshare_del(shr);
return tp; if (!tp) return NULL;
} return tp->decl;
EAPI const Eolian_Typedecl *
eolian_typedecl_alias_get_by_name(const char *name)
{
const Eolian_Type *ret = eolian_type_alias_get_by_name(name);
if (!ret) return NULL;
return ret->decl;
}
EAPI const Eolian_Type *
eolian_type_struct_get_by_name(const char *name)
{
if (!_structs) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(name);
Eolian_Type *tp = eina_hash_find(_structs, shr);
eina_stringshare_del(shr);
return tp;
} }
EAPI const Eolian_Typedecl * EAPI const Eolian_Typedecl *
eolian_typedecl_struct_get_by_name(const char *name) eolian_typedecl_struct_get_by_name(const char *name)
{ {
const Eolian_Type *ret = eolian_type_struct_get_by_name(name); if (!_structs) return NULL;
if (!ret) return NULL;
return ret->decl;
}
EAPI const Eolian_Type *
eolian_type_enum_get_by_name(const char *name)
{
if (!_enums) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(name); Eina_Stringshare *shr = eina_stringshare_add(name);
Eolian_Type *tp = eina_hash_find(_enums, shr); Eolian_Type *tp = eina_hash_find(_structs, shr);
eina_stringshare_del(shr); eina_stringshare_del(shr);
return tp; if (!tp) return NULL;
return tp->decl;
} }
EAPI const Eolian_Typedecl * EAPI const Eolian_Typedecl *
eolian_typedecl_enum_get_by_name(const char *name) eolian_typedecl_enum_get_by_name(const char *name)
{ {
const Eolian_Type *ret = eolian_type_enum_get_by_name(name); if (!_enums) return NULL;
if (!ret) return NULL; Eina_Stringshare *shr = eina_stringshare_add(name);
return ret->decl; Eolian_Type *tp = eina_hash_find(_enums, shr);
}
EAPI Eina_Iterator *
eolian_type_aliases_get_by_file(const char *fname)
{
if (!_aliasesf) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(fname);
Eina_List *l = eina_hash_find(_aliasesf, shr);
eina_stringshare_del(shr); eina_stringshare_del(shr);
if (!l) return NULL; if (!tp) return NULL;
return eina_list_iterator_new(l); return tp->decl;
} }
EAPI Eina_Iterator * EAPI Eina_Iterator *
@ -82,17 +50,6 @@ eolian_typedecl_aliases_get_by_file(const char *fname)
return eina_list_iterator_new(l); return eina_list_iterator_new(l);
} }
EAPI Eina_Iterator *
eolian_type_structs_get_by_file(const char *fname)
{
if (!_structsf) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(fname);
Eina_List *l = eina_hash_find(_structsf, shr);
eina_stringshare_del(shr);
if (!l) return NULL;
return eina_list_iterator_new(l);
}
EAPI Eina_Iterator * EAPI Eina_Iterator *
eolian_typedecl_structs_get_by_file(const char *fname) eolian_typedecl_structs_get_by_file(const char *fname)
{ {
@ -104,17 +61,6 @@ eolian_typedecl_structs_get_by_file(const char *fname)
return eina_list_iterator_new(l); return eina_list_iterator_new(l);
} }
EAPI Eina_Iterator *
eolian_type_enums_get_by_file(const char *fname)
{
if (!_enumsf) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(fname);
Eina_List *l = eina_hash_find(_enumsf, shr);
eina_stringshare_del(shr);
if (!l) return NULL;
return eina_list_iterator_new(l);
}
EAPI Eina_Iterator * EAPI Eina_Iterator *
eolian_typedecl_enums_get_by_file(const char *fname) eolian_typedecl_enums_get_by_file(const char *fname)
{ {

View File

@ -27,20 +27,20 @@ _validate_ref(const Validator *vs EINA_UNUSED, const char *ref,
Eina_Stringshare *base = eina_stringshare_add_length(ref, suffix - ref); Eina_Stringshare *base = eina_stringshare_add_length(ref, suffix - ref);
const Eolian_Type *tp = eolian_type_struct_get_by_name(base); const Eolian_Typedecl *tpd = eolian_typedecl_struct_get_by_name(base);
if (tp) if (tpd)
{ {
eina_stringshare_del(base); eina_stringshare_del(base);
if (!eolian_type_struct_field_get(tp, suffix + 1)) if (!eolian_typedecl_struct_field_get(tpd, suffix + 1))
goto failed; goto failed;
return EINA_TRUE; return EINA_TRUE;
} }
tp = eolian_type_enum_get_by_name(base); tpd = eolian_typedecl_enum_get_by_name(base);
if (tp) if (tpd)
{ {
eina_stringshare_del(base); eina_stringshare_del(base);
if (!eolian_type_enum_field_get(tp, suffix + 1)) if (!eolian_typedecl_enum_field_get(tpd, suffix + 1))
goto failed; goto failed;
return EINA_TRUE; return EINA_TRUE;
} }