aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2018-01-12 17:52:44 +0100
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2018-01-12 18:05:13 +0100
commit19c16b671e3bafd1ea360fbd331b4952391f6ee9 (patch)
tree57485acaae38331839641dc301ab80ab7a8ccf98 /src/lib
parenteolian: do not require unit for type_class_get (diff)
downloadefl-19c16b671e3bafd1ea360fbd331b4952391f6ee9.tar.gz
eolian: type_typedecl_get doesn't need a unit
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/eolian/Eolian.h3
-rw-r--r--src/lib/eolian/database_expr.c2
-rw-r--r--src/lib/eolian/database_expr_api.c2
-rw-r--r--src/lib/eolian/database_type.c22
-rw-r--r--src/lib/eolian/database_type_api.c17
-rw-r--r--src/lib/eolian/database_validate.c2
-rw-r--r--src/lib/eolian/eolian_database.h2
-rw-r--r--src/lib/eolian_cxx/grammar/klass_def.hpp2
8 files changed, 31 insertions, 21 deletions
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index 8e9017b778..34b47c5fca 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -1956,13 +1956,12 @@ EAPI const Eolian_Type *eolian_type_next_type_get(const Eolian_Type *tp);
*
* This tries to look up alias, struct and enum in that order.
*
- * @param[in] unit the unit to look in
* @param[in] tp the type.
* @return the pointed to type decalration or NULL.
*
* @ingroup Eolian
*/
-EAPI const Eolian_Typedecl *eolian_type_typedecl_get(const Eolian_Unit *unit, const Eolian_Type *tp);
+EAPI const Eolian_Typedecl *eolian_type_typedecl_get(const Eolian_Type *tp);
/*
* @brief Get the lowest base type of an alias stack.
diff --git a/src/lib/eolian/database_expr.c b/src/lib/eolian/database_expr.c
index 1b0a6d10e3..f22a09e308 100644
--- a/src/lib/eolian/database_expr.c
+++ b/src/lib/eolian/database_expr.c
@@ -522,7 +522,7 @@ eval_exp(const Eolian_Unit *unit, const Eolian_Expression *expr,
const Eolian_Type *etp = eolian_typedecl_base_type_get(etpd);
if (!etp || etp->type != EOLIAN_TYPE_REGULAR)
break;
- etpd = eolian_type_typedecl_get(unit, etp);
+ etpd = database_type_decl_find(unit, etp);
}
if (!etpd) etpd = eolian_typedecl_enum_get_by_name(unit, fulln);
diff --git a/src/lib/eolian/database_expr_api.c b/src/lib/eolian/database_expr_api.c
index adf573435a..791d59e104 100644
--- a/src/lib/eolian/database_expr_api.c
+++ b/src/lib/eolian/database_expr_api.c
@@ -34,7 +34,7 @@ _eval_type(const Eolian_Unit *unit, const Eolian_Expression *expr,
int kw = eo_lexer_keyword_str_to_id(type->name);
if (!kw || kw < KW_byte || kw >= KW_void)
{
- const Eolian_Typedecl *base = eolian_type_typedecl_get(unit, type);
+ const Eolian_Typedecl *base = database_type_decl_find(unit, type);
if (!base)
return err;
if (base->type == EOLIAN_TYPEDECL_ALIAS)
diff --git a/src/lib/eolian/database_type.c b/src/lib/eolian/database_type.c
index 1400aa028c..33be724c60 100644
--- a/src/lib/eolian/database_type.c
+++ b/src/lib/eolian/database_type.c
@@ -79,7 +79,7 @@ database_type_is_ownable(const Eolian_Unit *unit, const Eolian_Type *tp)
const char *ct = eo_lexer_get_c_type(kw);
if (!ct)
{
- const Eolian_Typedecl *tpp = eolian_type_typedecl_get(unit, tp);
+ const Eolian_Typedecl *tpp = database_type_decl_find(unit, tp);
if (!tpp)
return EINA_FALSE;
if (tpp->type == EOLIAN_TYPEDECL_FUNCTION_POINTER)
@@ -269,3 +269,23 @@ database_typedecl_to_str(const Eolian_Unit *src, const Eolian_Typedecl *tp,
break;
}
}
+
+Eolian_Typedecl *database_type_decl_find(const Eolian_Unit *unit, const Eolian_Type *tp)
+{
+ if (tp->type != EOLIAN_TYPE_REGULAR)
+ return NULL;
+ if (tp->tdecl)
+ return tp->tdecl;
+ /* try looking up if it belongs to a struct, enum or an alias... otherwise
+ * return NULL, but first check for builtins
+ */
+ int kw = eo_lexer_keyword_str_to_id(tp->full_name);
+ if (!kw || kw < KW_byte || kw >= KW_true)
+ {
+ Eolian_Declaration *decl = eina_hash_find(unit->state->unit.decls, tp->full_name);
+ if (decl && decl->type != EOLIAN_DECL_CLASS
+ && decl->type != EOLIAN_DECL_VAR)
+ return decl->data;
+ }
+ return NULL;
+}
diff --git a/src/lib/eolian/database_type_api.c b/src/lib/eolian/database_type_api.c
index 4528b7c9ed..eedb42a828 100644
--- a/src/lib/eolian/database_type_api.c
+++ b/src/lib/eolian/database_type_api.c
@@ -266,23 +266,12 @@ eolian_type_next_type_get(const Eolian_Type *tp)
}
EAPI const Eolian_Typedecl *
-eolian_type_typedecl_get(const Eolian_Unit *unit, const Eolian_Type *tp)
+eolian_type_typedecl_get(const Eolian_Type *tp)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
if (eolian_type_type_get(tp) != EOLIAN_TYPE_REGULAR)
return NULL;
- /* try looking up if it belongs to a struct, enum or an alias... otherwise
- * return NULL, but first check for builtins
- */
- int kw = eo_lexer_keyword_str_to_id(tp->full_name);
- if (!kw || kw < KW_byte || kw >= KW_true)
- {
- Eolian_Declaration *decl = eina_hash_find(unit->state->unit.decls, tp->full_name);
- if (decl && decl->type != EOLIAN_DECL_CLASS
- && decl->type != EOLIAN_DECL_VAR)
- return decl->data;
- }
- return NULL;
+ return tp->tdecl;
}
EAPI const Eolian_Type *
@@ -297,7 +286,7 @@ eolian_type_aliased_base_get(const Eolian_Unit *unit, const Eolian_Type *tp)
{
if (!tp || tp->type != EOLIAN_TYPE_REGULAR || tp->is_ptr)
return tp;
- const Eolian_Typedecl *btp = eolian_type_typedecl_get(unit, tp);
+ const Eolian_Typedecl *btp = database_type_decl_find(unit, tp);
if (btp && (btp->type == EOLIAN_TYPEDECL_ALIAS))
return eolian_typedecl_aliased_base_get(unit, btp);
return tp;
diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c
index fbbf26e03d..c5b3664201 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -252,7 +252,7 @@ _validate_type(const Eolian_Unit *src, Eolian_Type *tp)
return _validate(&tp->base);
}
/* user defined */
- tp->tdecl = (Eolian_Typedecl *)eolian_type_typedecl_get(src, tp);
+ tp->tdecl = database_type_decl_find(src, tp);
if (!tp->tdecl)
{
snprintf(buf, sizeof(buf), "undefined type %s", tp->full_name);
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h
index 00a3967183..5f804a5aa9 100644
--- a/src/lib/eolian/eolian_database.h
+++ b/src/lib/eolian/eolian_database.h
@@ -341,6 +341,8 @@ void database_typedecl_del(Eolian_Typedecl *tp);
void database_type_to_str(const Eolian_Unit *src, const Eolian_Type *tp, Eina_Strbuf *buf, const char *name, Eolian_C_Type_Type ctype);
void database_typedecl_to_str(const Eolian_Unit *src, const Eolian_Typedecl *tp, Eina_Strbuf *buf);
+Eolian_Typedecl *database_type_decl_find(const Eolian_Unit *src, const Eolian_Type *tp);
+
Eina_Bool database_type_is_ownable(const Eolian_Unit *unit, const Eolian_Type *tp);
/* expressions */
diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp b/src/lib/eolian_cxx/grammar/klass_def.hpp
index e7e6018872..3872feaf4a 100644
--- a/src/lib/eolian_cxx/grammar/klass_def.hpp
+++ b/src/lib/eolian_cxx/grammar/klass_def.hpp
@@ -353,7 +353,7 @@ inline void type_def::set(Eolian_Type const* eolian_type, Eolian_Unit const* uni
if (!stp)
{
bool is_undefined = false;
- Eolian_Typedecl const* decl = eolian_type_typedecl_get(unit, eolian_type);
+ Eolian_Typedecl const* decl = eolian_type_typedecl_get(eolian_type);
typedecl_type type_type = (decl ? typedecl_type_get(decl) : typedecl_type::unknown);
if(decl && eolian_typedecl_type_get(decl) == EOLIAN_TYPEDECL_ALIAS)
{