eolian: add a way to query the builtin type of a type
This commit is contained in:
parent
9009d3dae4
commit
c146d6f877
|
@ -231,6 +231,67 @@ typedef enum
|
|||
EOLIAN_TYPE_UNDEFINED
|
||||
} Eolian_Type_Type;
|
||||
|
||||
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,
|
||||
|
@ -1745,6 +1806,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.
|
||||
*
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue