diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index bbecbce9d2..4d62c59f3d 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -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); /* diff --git a/src/lib/eolian/database_expr.c b/src/lib/eolian/database_expr.c index 0076f7ca27..2ff9beba32 100644 --- a/src/lib/eolian/database_expr.c +++ b/src/lib/eolian/database_expr.c @@ -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); diff --git a/src/lib/eolian/database_type_api.c b/src/lib/eolian/database_type_api.c index 79df964a5f..458793cb6e 100644 --- a/src/lib/eolian/database_type_api.c +++ b/src/lib/eolian/database_type_api.c @@ -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) { diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c index 2a44a3d3dd..d72b213d4d 100644 --- a/src/lib/eolian/database_validate.c +++ b/src/lib/eolian/database_validate.c @@ -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; }