diff options
author | Daniel Kolesa <d.kolesa@osg.samsung.com> | 2018-01-16 15:30:58 +0100 |
---|---|---|
committer | Daniel Kolesa <d.kolesa@osg.samsung.com> | 2018-01-16 16:37:52 +0100 |
commit | 29a9b9ad44ee7ec34f288d623542fc624d9fa410 (patch) | |
tree | 32f8af8914c49cdb35228a54179ed6191809c1a7 | |
parent | 5555726fef16e8e1c5ec907e0fcdcadeecea694c (diff) | |
download | efl-29a9b9ad44ee7ec34f288d623542fc624d9fa410.tar.gz |
eolian: expose _eval_type to internals
-rw-r--r-- | src/lib/eolian/database_expr.c | 75 | ||||
-rw-r--r-- | src/lib/eolian/database_expr_api.c | 79 | ||||
-rw-r--r-- | src/lib/eolian/eolian_database.h | 1 |
3 files changed, 79 insertions, 76 deletions
diff --git a/src/lib/eolian/database_expr.c b/src/lib/eolian/database_expr.c index f22a09e308..eb2dc17e37 100644 --- a/src/lib/eolian/database_expr.c +++ b/src/lib/eolian/database_expr.c @@ -7,6 +7,7 @@ #include <Eina.h> #include "eolian_database.h" #include "eolian_priv.h" +#include "eo_lexer.h" static Eina_Bool node_error(const Eolian_Object *obj, const char *msg) @@ -575,6 +576,80 @@ database_expr_eval(const Eolian_Unit *unit, const Eolian_Expression *expr, return ret; } +Eolian_Value +database_expr_eval_type(const Eolian_Unit *unit, const Eolian_Expression *expr, + const Eolian_Type *type) +{ + Eolian_Value err; + err.type = EOLIAN_EXPR_UNKNOWN; + if (!type) + return err; + switch (type->type) + { + case EOLIAN_TYPE_CLASS: + return database_expr_eval(unit, expr, EOLIAN_MASK_NULL); + case EOLIAN_TYPE_REGULAR: + { + if (database_type_is_ownable(unit, type)) + return database_expr_eval(unit, expr, EOLIAN_MASK_NULL); + int kw = eo_lexer_keyword_str_to_id(type->name); + if (!kw || kw < KW_byte || kw >= KW_void) + { + const Eolian_Typedecl *base = database_type_decl_find(unit, type); + if (!base) + return err; + if (base->type == EOLIAN_TYPEDECL_ALIAS) + return database_expr_eval_type(unit, expr, eolian_typedecl_base_type_get(base)); + else if (base->type == EOLIAN_TYPEDECL_ENUM) + return database_expr_eval(unit, expr, EOLIAN_MASK_INT); + return err; + } + switch (kw) + { + case KW_byte: + case KW_short: + case KW_int: + case KW_long: + case KW_llong: + case KW_int8: + case KW_int16: + case KW_int32: + case KW_int64: + case KW_int128: + case KW_ssize: + case KW_intptr: + case KW_ptrdiff: + return database_expr_eval(unit, expr, EOLIAN_MASK_SINT); + case KW_ubyte: + case KW_ushort: + case KW_uint: + case KW_ulong: + case KW_ullong: + case KW_uint8: + case KW_uint16: + case KW_uint32: + case KW_uint64: + case KW_uint128: + case KW_size: + case KW_uintptr: + case KW_time: + return database_expr_eval(unit, expr, EOLIAN_MASK_UINT); + case KW_float: + case KW_double: + return database_expr_eval(unit, expr, EOLIAN_MASK_FLOAT); + case KW_bool: + return database_expr_eval(unit, expr, EOLIAN_MASK_BOOL); + case KW_char: + return database_expr_eval(unit, expr, EOLIAN_MASK_CHAR); + default: + return err; + } + } + default: + return err; + } +} + void database_expr_del(Eolian_Expression *expr) { diff --git a/src/lib/eolian/database_expr_api.c b/src/lib/eolian/database_expr_api.c index 791d59e104..b1fadcb6ce 100644 --- a/src/lib/eolian/database_expr_api.c +++ b/src/lib/eolian/database_expr_api.c @@ -3,7 +3,8 @@ #endif #include <Eina.h> -#include "eo_lexer.h" + +#include "eolian_database.h" EAPI Eolian_Value eolian_expression_eval(const Eolian_Unit *unit, const Eolian_Expression *expr, @@ -15,80 +16,6 @@ eolian_expression_eval(const Eolian_Unit *unit, const Eolian_Expression *expr, return database_expr_eval(unit, expr, m); } -static Eolian_Value -_eval_type(const Eolian_Unit *unit, const Eolian_Expression *expr, - const Eolian_Type *type) -{ - Eolian_Value err; - err.type = EOLIAN_EXPR_UNKNOWN; - if (!type) - return err; - switch (type->type) - { - case EOLIAN_TYPE_CLASS: - return database_expr_eval(unit, expr, EOLIAN_MASK_NULL); - case EOLIAN_TYPE_REGULAR: - { - if (database_type_is_ownable(unit, type)) - return database_expr_eval(unit, expr, EOLIAN_MASK_NULL); - int kw = eo_lexer_keyword_str_to_id(type->name); - if (!kw || kw < KW_byte || kw >= KW_void) - { - const Eolian_Typedecl *base = database_type_decl_find(unit, type); - if (!base) - return err; - if (base->type == EOLIAN_TYPEDECL_ALIAS) - return _eval_type(unit, expr, eolian_typedecl_base_type_get(base)); - else if (base->type == EOLIAN_TYPEDECL_ENUM) - return database_expr_eval(unit, expr, EOLIAN_MASK_INT); - return err; - } - switch (kw) - { - case KW_byte: - case KW_short: - case KW_int: - case KW_long: - case KW_llong: - case KW_int8: - case KW_int16: - case KW_int32: - case KW_int64: - case KW_int128: - case KW_ssize: - case KW_intptr: - case KW_ptrdiff: - return database_expr_eval(unit, expr, EOLIAN_MASK_SINT); - case KW_ubyte: - case KW_ushort: - case KW_uint: - case KW_ulong: - case KW_ullong: - case KW_uint8: - case KW_uint16: - case KW_uint32: - case KW_uint64: - case KW_uint128: - case KW_size: - case KW_uintptr: - case KW_time: - return database_expr_eval(unit, expr, EOLIAN_MASK_UINT); - case KW_float: - case KW_double: - return database_expr_eval(unit, expr, EOLIAN_MASK_FLOAT); - case KW_bool: - return database_expr_eval(unit, expr, EOLIAN_MASK_BOOL); - case KW_char: - return database_expr_eval(unit, expr, EOLIAN_MASK_CHAR); - default: - return err; - } - } - default: - return err; - } -} - EAPI Eolian_Value eolian_expression_eval_type(const Eolian_Unit *unit, const Eolian_Expression *expr, @@ -97,7 +24,7 @@ eolian_expression_eval_type(const Eolian_Unit *unit, Eolian_Value err; err.type = EOLIAN_EXPR_UNKNOWN; EINA_SAFETY_ON_NULL_RETURN_VAL(expr, err); - return _eval_type(unit, expr, type); + return database_expr_eval_type(unit, expr, type); } static void diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index 5f804a5aa9..23a569206a 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -348,6 +348,7 @@ Eina_Bool database_type_is_ownable(const Eolian_Unit *unit, const Eolian_Type *t /* expressions */ Eolian_Value database_expr_eval(const Eolian_Unit *unit, const Eolian_Expression *expr, Eolian_Expression_Mask mask); +Eolian_Value database_expr_eval_type(const Eolian_Unit *unit, const Eolian_Expression *expr, const Eolian_Type *type); void database_expr_del(Eolian_Expression *expr); void database_expr_print(Eolian_Expression *expr); |