summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2017-05-25 16:10:29 +0200
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2017-05-30 17:15:54 +0200
commit4125e3f34bf3c6bc3d61aebfbe73263d0eac8b17 (patch)
tree86126bf4853e4472460db87f4956526b74aa179d
parent2cfbd3a42b4c0635e715f3ee1e438dd8f8de7692 (diff)
downloadefl-4125e3f34bf3c6bc3d61aebfbe73263d0eac8b17.tar.gz
eolian: more expr system unit updates
-rw-r--r--src/lib/eolian/database_expr.c5
-rw-r--r--src/lib/eolian/database_expr_api.c25
-rw-r--r--src/lib/eolian/eolian_database.h2
3 files changed, 17 insertions, 15 deletions
diff --git a/src/lib/eolian/database_expr.c b/src/lib/eolian/database_expr.c
index d7190e8da1..09be53e7f1 100644
--- a/src/lib/eolian/database_expr.c
+++ b/src/lib/eolian/database_expr.c
@@ -559,14 +559,15 @@ eval_exp(const Eolian_Unit *unit, const Eolian_Expression *expr,
}
Eolian_Value
-database_expr_eval(const Eolian_Expression *expr, Eolian_Expression_Mask mask)
+database_expr_eval(const Eolian_Unit *unit, const Eolian_Expression *expr,
+ Eolian_Expression_Mask mask)
{
Eolian_Expression out;
Eolian_Value ret;
ret.type = EOLIAN_EXPR_UNKNOWN;
if (!mask)
return ret;
- if (!eval_exp(NULL, expr, mask, &out))
+ if (!eval_exp(unit, expr, mask, &out))
return ret;
ret.type = out.type;
ret.value = out.value;
diff --git a/src/lib/eolian/database_expr_api.c b/src/lib/eolian/database_expr_api.c
index 6cfca9466c..acc16ed48d 100644
--- a/src/lib/eolian/database_expr_api.c
+++ b/src/lib/eolian/database_expr_api.c
@@ -11,11 +11,12 @@ eolian_expression_eval(const Eolian_Expression *expr, Eolian_Expression_Mask m)
Eolian_Value err;
err.type = EOLIAN_EXPR_UNKNOWN;
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, err);
- return database_expr_eval(expr, m);
+ return database_expr_eval(NULL, expr, m);
}
static Eolian_Value
-_eval_type(const Eolian_Expression *expr, const Eolian_Type *type)
+_eval_type(const Eolian_Unit *unit, const Eolian_Expression *expr,
+ const Eolian_Type *type)
{
Eolian_Value err;
err.type = EOLIAN_EXPR_UNKNOWN;
@@ -25,21 +26,21 @@ _eval_type(const Eolian_Expression *expr, const Eolian_Type *type)
{
case EOLIAN_TYPE_CLASS:
case EOLIAN_TYPE_COMPLEX:
- return database_expr_eval(expr, EOLIAN_MASK_NULL);
+ return database_expr_eval(unit, expr, EOLIAN_MASK_NULL);
case EOLIAN_TYPE_REGULAR:
{
int kw = eo_lexer_keyword_str_to_id(type->name);
if (type->is_ptr)
- return database_expr_eval(expr, EOLIAN_MASK_NULL);
+ return database_expr_eval(unit, expr, EOLIAN_MASK_NULL);
if (!kw || kw < KW_byte || kw >= KW_void)
{
const Eolian_Typedecl *base = eolian_type_typedecl_get(type);
if (!base)
return err;
if (base->type == EOLIAN_TYPEDECL_ALIAS)
- return _eval_type(expr, eolian_typedecl_base_type_get(base));
+ return _eval_type(unit, expr, eolian_typedecl_base_type_get(base));
else if (base->type == EOLIAN_TYPEDECL_ENUM)
- return database_expr_eval(expr, EOLIAN_MASK_INT);
+ return database_expr_eval(unit, expr, EOLIAN_MASK_INT);
return err;
}
switch (kw)
@@ -57,7 +58,7 @@ _eval_type(const Eolian_Expression *expr, const Eolian_Type *type)
case KW_ssize:
case KW_intptr:
case KW_ptrdiff:
- return database_expr_eval(expr, EOLIAN_MASK_SINT);
+ return database_expr_eval(unit, expr, EOLIAN_MASK_SINT);
case KW_ubyte:
case KW_ushort:
case KW_uint:
@@ -71,14 +72,14 @@ _eval_type(const Eolian_Expression *expr, const Eolian_Type *type)
case KW_size:
case KW_uintptr:
case KW_time:
- return database_expr_eval(expr, EOLIAN_MASK_UINT);
+ return database_expr_eval(unit, expr, EOLIAN_MASK_UINT);
case KW_float:
case KW_double:
- return database_expr_eval(expr, EOLIAN_MASK_FLOAT);
+ return database_expr_eval(unit, expr, EOLIAN_MASK_FLOAT);
case KW_bool:
- return database_expr_eval(expr, EOLIAN_MASK_BOOL);
+ return database_expr_eval(unit, expr, EOLIAN_MASK_BOOL);
case KW_char:
- return database_expr_eval(expr, EOLIAN_MASK_CHAR);
+ return database_expr_eval(unit, expr, EOLIAN_MASK_CHAR);
default:
return err;
}
@@ -95,7 +96,7 @@ eolian_expression_eval_type(const Eolian_Expression *expr,
Eolian_Value err;
err.type = EOLIAN_EXPR_UNKNOWN;
EINA_SAFETY_ON_NULL_RETURN_VAL(expr, err);
- return _eval_type(expr, type);
+ return _eval_type(NULL, expr, type);
}
static void
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h
index 67ccbec287..263e207b0d 100644
--- a/src/lib/eolian/eolian_database.h
+++ b/src/lib/eolian/eolian_database.h
@@ -316,7 +316,7 @@ void database_typedecl_to_str(const Eolian_Typedecl *tp, Eina_Strbuf *buf);
/* expressions */
-Eolian_Value database_expr_eval(const Eolian_Expression *expr, Eolian_Expression_Mask mask);
+Eolian_Value database_expr_eval(const Eolian_Unit *unit, const Eolian_Expression *expr, Eolian_Expression_Mask mask);
void database_expr_del(Eolian_Expression *expr);
void database_expr_print(Eolian_Expression *expr);