diff options
author | Daniel Kolesa <d.kolesa@osg.samsung.com> | 2017-09-22 20:38:17 +0200 |
---|---|---|
committer | Daniel Kolesa <d.kolesa@osg.samsung.com> | 2017-09-22 21:01:12 +0200 |
commit | c146d6f877de68d789631c635290e83cfde20747 (patch) | |
tree | e87c390674ae2025640cc8f5e05e44133cee6039 | |
parent | 9009d3dae40bb702de940a995f2830d5a72a2ab2 (diff) | |
download | efl-c146d6f877de68d789631c635290e83cfde20747.tar.gz |
eolian: add a way to query the builtin type of a type
-rw-r--r-- | src/lib/eolian/Eolian.h | 74 | ||||
-rw-r--r-- | src/lib/eolian/database_type_api.c | 7 | ||||
-rw-r--r-- | src/lib/eolian/eo_parser.c | 1 | ||||
-rw-r--r-- | src/lib/eolian/eolian_database.h | 1 |
4 files changed, 83 insertions, 0 deletions
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index 458a7343e6..966d303ee8 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -233,6 +233,67 @@ typedef enum typedef enum { + EOLIAN_TYPE_BUILTIN_INVALID = 0, + + EOLIAN_TYPE_BUILTIN_BYTE, + EOLIAN_TYPE_BUILTIN_UBYTE, + EOLIAN_TYPE_BUILTIN_CHAR, + EOLIAN_TYPE_BUILTIN_SHORT, + EOLIAN_TYPE_BUILTIN_USHORT, + EOLIAN_TYPE_BUILTIN_INT, + EOLIAN_TYPE_BUILTIN_UINT, + EOLIAN_TYPE_BUILTIN_LONG, + EOLIAN_TYPE_BUILTIN_ULONG, + EOLIAN_TYPE_BUILTIN_LLONG, + EOLIAN_TYPE_BUILTIN_ULLONG, + + EOLIAN_TYPE_BUILTIN_INT8, + EOLIAN_TYPE_BUILTIN_UINT8, + EOLIAN_TYPE_BUILTIN_INT16, + EOLIAN_TYPE_BUILTIN_UINT16, + EOLIAN_TYPE_BUILTIN_INT32, + EOLIAN_TYPE_BUILTIN_UINT32, + EOLIAN_TYPE_BUILTIN_INT64, + EOLIAN_TYPE_BUILTIN_UINT64, + EOLIAN_TYPE_BUILTIN_INT128, + EOLIAN_TYPE_BUILTIN_UINT128, + + EOLIAN_TYPE_BUILTIN_SIZE, + EOLIAN_TYPE_BUILTIN_SSIZE, + EOLIAN_TYPE_BUILTIN_INTPTR, + EOLIAN_TYPE_BUILTIN_UINTPTR, + EOLIAN_TYPE_BUILTIN_PTRDIFF, + + EOLIAN_TYPE_BUILTIN_TIME, + + EOLIAN_TYPE_BUILTIN_FLOAT, + EOLIAN_TYPE_BUILTIN_DOUBLE, + + EOLIAN_TYPE_BUILTIN_BOOL, + + EOLIAN_TYPE_BUILTIN_VOID, + + EOLIAN_TYPE_BUILTIN_ACCESSOR, + EOLIAN_TYPE_BUILTIN_ARRAY, + EOLIAN_TYPE_BUILTIN_ITERATOR, + EOLIAN_TYPE_BUILTIN_HASH, + EOLIAN_TYPE_BUILTIN_LIST, + + EOLIAN_TYPE_BUILTIN_FUTURE, + + EOLIAN_TYPE_BUILTIN_ANY_VALUE, + EOLIAN_TYPE_BUILTIN_ANY_VALUE_PTR, + + EOLIAN_TYPE_BUILTIN_MSTRING, + EOLIAN_TYPE_BUILTIN_STRING, + EOLIAN_TYPE_BUILTIN_STRINGSHARE, + + EOLIAN_TYPE_BUILTIN_VOID_PTR, + EOLIAN_TYPE_BUILTIN_FREE_CB +} Eolian_Type_Builtin_Type; + +typedef enum +{ EOLIAN_C_TYPE_DEFAULT = 0, EOLIAN_C_TYPE_PARAM, EOLIAN_C_TYPE_RETURN @@ -1746,6 +1807,19 @@ EAPI const Eolian_Function *eolian_typedecl_function_pointer_get(const Eolian_Ty EAPI Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp); /* + * @brief Get the builtin type of a type. + * + * @param[in] tp the type. + * @return an Eolian_Type_Builtin_Type. + * + * If the input type is NULL or it's not a builtin, EOLIAN_TYPE_BUILTIN_INVALID + * is returned. + * + * @ingroup Eolian + */ +EAPI Eolian_Type_Builtin_Type eolian_type_builtin_type_get(const Eolian_Type *tp); + +/* * @brief Get the filename of a type. * * @param[in] tp the type. diff --git a/src/lib/eolian/database_type_api.c b/src/lib/eolian/database_type_api.c index f1db367ec4..94f8354889 100644 --- a/src/lib/eolian/database_type_api.c +++ b/src/lib/eolian/database_type_api.c @@ -103,6 +103,13 @@ eolian_type_type_get(const Eolian_Type *tp) return tp->type; } +EAPI Eolian_Type_Builtin_Type +eolian_type_builtin_type_get(const Eolian_Type *tp) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EOLIAN_TYPE_BUILTIN_INVALID); + return tp->btype; +} + EAPI Eolian_Typedecl_Type eolian_typedecl_type_get(const Eolian_Typedecl *tp) { diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index a1e27134bf..e21a034084 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -757,6 +757,7 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ref) check(ls, TOK_VALUE); if (eo_lexer_is_type_keyword(ls->t.kw)) { + def->btype = ls->t.kw - KW_byte + 1; _fill_name(eina_stringshare_ref(ls->t.value.s), &def->full_name, &def->name, &def->namespaces); eo_lexer_get(ls); diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index 9858db4c31..1970034bd5 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -156,6 +156,7 @@ struct _Eolian_Type { Eolian_Object base; Eolian_Type_Type type; + Eolian_Type_Builtin_Type btype; Eolian_Type *base_type; Eolian_Type *next_type; Eina_Stringshare *name; |