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);
/*
* @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
* @return the alias type or NULL
*
* @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);
/*
* @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
* @return the struct or NULL
*
* @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);
/*
* @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
* @return the struct or NULL
*
* @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);
/*
@ -1310,7 +1307,6 @@ EAPI const Eolian_Typedecl *eolian_typedecl_enum_get_by_name(const char *name);
*
* @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);
/*
@ -1323,7 +1319,6 @@ EAPI Eina_Iterator *eolian_typedecl_aliases_get_by_file(const char *fname);
*
* @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);
/*
@ -1336,7 +1331,6 @@ EAPI Eina_Iterator *eolian_typedecl_structs_get_by_file(const char *fname);
*
* @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);
/*

View File

@ -497,7 +497,7 @@ eval_exp(const Eolian_Expression *expr, Eolian_Expression_Mask mask,
if (!var)
{
const Eolian_Type *etp;
const Eolian_Typedecl *etpd;
const Eolian_Enum_Type_Field *fl;
/* 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))
return expr_type_error(expr, EOLIAN_MASK_INT, mask);
etp = eolian_type_alias_get_by_name(fulln);
while (etp && (etp->type == EOLIAN_TYPE_ALIAS
|| etp->type == EOLIAN_TYPE_REGULAR))
etp = eolian_type_base_type_get(etp);
etpd = eolian_typedecl_alias_get_by_name(fulln);
while (etpd && etpd->type == EOLIAN_TYPEDECL_ALIAS)
{
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 (!etp || etp->type != EOLIAN_TYPE_ENUM)
if (!etpd) etpd = eolian_typedecl_enum_get_by_name(fulln);
if (!etpd || etpd->type != EOLIAN_TYPEDECL_ENUM)
{
free(fulln);
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);
free(fulln);

View File

@ -6,69 +6,37 @@
#include "eolian_database.h"
#include "eo_lexer.h"
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)
{
if (!_aliases) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(name);
Eolian_Type *tp = eina_hash_find(_aliases, shr);
eina_stringshare_del(shr);
return tp;
}
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;
if (!tp) return NULL;
return tp->decl;
}
EAPI const Eolian_Typedecl *
eolian_typedecl_struct_get_by_name(const char *name)
{
const Eolian_Type *ret = eolian_type_struct_get_by_name(name);
if (!ret) return NULL;
return ret->decl;
}
EAPI const Eolian_Type *
eolian_type_enum_get_by_name(const char *name)
{
if (!_enums) return NULL;
if (!_structs) return NULL;
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);
return tp;
if (!tp) return NULL;
return tp->decl;
}
EAPI const Eolian_Typedecl *
eolian_typedecl_enum_get_by_name(const char *name)
{
const Eolian_Type *ret = eolian_type_enum_get_by_name(name);
if (!ret) return NULL;
return ret->decl;
}
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);
if (!_enums) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(name);
Eolian_Type *tp = eina_hash_find(_enums, shr);
eina_stringshare_del(shr);
if (!l) return NULL;
return eina_list_iterator_new(l);
if (!tp) return NULL;
return tp->decl;
}
EAPI Eina_Iterator *
@ -82,17 +50,6 @@ eolian_typedecl_aliases_get_by_file(const char *fname)
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 *
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);
}
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 *
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);
const Eolian_Type *tp = eolian_type_struct_get_by_name(base);
if (tp)
const Eolian_Typedecl *tpd = eolian_typedecl_struct_get_by_name(base);
if (tpd)
{
eina_stringshare_del(base);
if (!eolian_type_struct_field_get(tp, suffix + 1))
if (!eolian_typedecl_struct_field_get(tpd, suffix + 1))
goto failed;
return EINA_TRUE;
}
tp = eolian_type_enum_get_by_name(base);
if (tp)
tpd = eolian_typedecl_enum_get_by_name(base);
if (tpd)
{
eina_stringshare_del(base);
if (!eolian_type_enum_field_get(tp, suffix + 1))
if (!eolian_typedecl_enum_field_get(tpd, suffix + 1))
goto failed;
return EINA_TRUE;
}