elua: bind new eolian type builtin API

This commit is contained in:
Daniel Kolesa 2017-09-22 20:47:39 +02:00
parent c146d6f877
commit 5e788e3a5c
2 changed files with 127 additions and 0 deletions

View File

@ -83,6 +83,67 @@ ffi.cdef [[
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,
EOLIAN_C_TYPE_PARAM,
@ -313,6 +374,7 @@ ffi.cdef [[
Eina_Iterator *eolian_typedecl_all_structs_get(const Eolian_Unit *unit);
Eina_Iterator *eolian_typedecl_all_enums_get(const Eolian_Unit *unit);
Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp);
Eolian_Type_Builtin_Type eolian_type_builtin_type_get(const Eolian_Type *tp);
Eolian_Typedecl_Type eolian_typedecl_type_get(const Eolian_Typedecl *tp);
Eina_Iterator *eolian_typedecl_struct_fields_get(const Eolian_Typedecl *tp);
const Eolian_Struct_Type_Field *eolian_typedecl_struct_field_get(const Eolian_Typedecl *tp, const char *field);
@ -504,6 +566,66 @@ M.type_type = {
UNDEFINED = 4
}
M.type_builtin_type = {
INVALID = 0,
BYTE = 1,
UBYTE = 2,
CHAR = 3,
SHORT = 4,
USHORT = 5,
INT = 6,
UINT = 7,
LONG = 8,
ULONG = 9,
LLONG = 10,
ULLONG = 11,
INT8 = 12,
UINT8 = 13,
INT16 = 14,
UINT16 = 15,
INT32 = 16,
UINT32 = 17,
INT64 = 18,
UINT64 = 19,
INT128 = 20,
UINT128 = 21,
SIZE = 22,
SSIZE = 23,
INTPTR = 24,
UINTPTR = 25,
PTRDIFF = 26,
TIME = 27,
FLOAT = 28,
DOUBLE = 29,
BOOL = 30,
VOID = 31,
ACCESSOR = 32,
ARRAY = 33,
ITERATOR = 34,
HASH = 35,
LIST = 36,
FUTURE = 37,
ANY_VALUE = 38,
ANY_VALUE_PTR = 39,
MSTRING = 40,
STRING = 41,
STRINGSHARE = 42,
VOID_PTR = 43,
FREE_CB = 44
}
M.typedecl_type = {
UNKNOWN = 0,
STRUCT = 1,
@ -674,6 +796,10 @@ M.Type = ffi.metatype("Eolian_Type", {
return tonumber(eolian.eolian_type_type_get(self))
end,
builtin_type_get = function(self)
return tonumber(eolian.eolian_type_builtin_type_get(self))
end,
file_get = function(self, name)
local v = eolian.eolian_type_file_get(self)
if v == nil then return nil end

View File

@ -743,6 +743,7 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ref)
if (ls->t.kw == KW_void)
{
def->type = EOLIAN_TYPE_VOID;
def->btype = EOLIAN_TYPE_BUILTIN_VOID;
eo_lexer_get(ls);
}
else if (ls->t.kw == KW___undefined_type)