summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2017-09-22 20:38:17 +0200
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2017-09-22 21:01:12 +0200
commitc146d6f877de68d789631c635290e83cfde20747 (patch)
treee87c390674ae2025640cc8f5e05e44133cee6039
parent9009d3dae40bb702de940a995f2830d5a72a2ab2 (diff)
downloadefl-c146d6f877de68d789631c635290e83cfde20747.tar.gz
eolian: add a way to query the builtin type of a type
-rw-r--r--src/lib/eolian/Eolian.h74
-rw-r--r--src/lib/eolian/database_type_api.c7
-rw-r--r--src/lib/eolian/eo_parser.c1
-rw-r--r--src/lib/eolian/eolian_database.h1
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;