From 5e788e3a5c99a28152d5960fe49bdd3ef4d9707e Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Fri, 22 Sep 2017 20:47:39 +0200 Subject: [PATCH] elua: bind new eolian type builtin API --- src/bindings/luajit/eolian.lua | 126 +++++++++++++++++++++++++++++++++ src/lib/eolian/eo_parser.c | 1 + 2 files changed, 127 insertions(+) diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index 1f3c009682..8982ef4817 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua @@ -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 diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index e21a034084..6baeb5d017 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -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) -- 2.34.1