elua: update eolian bindings to latest version
authorDaniel Kolesa <d.kolesa@samsung.com>
Tue, 9 Sep 2014 15:30:46 +0000 (16:30 +0100)
committerDaniel Kolesa <d.kolesa@samsung.com>
Tue, 9 Sep 2014 15:30:46 +0000 (16:30 +0100)
src/bin/elua/modules/lualian.lua
src/bindings/luajit/eolian.lua

index 1a963f7..d976162 100644 (file)
@@ -617,14 +617,6 @@ local gen_contents = function(klass)
             cnt[#cnt + 1] = Method(v)
         end
     end
-    -- and constructors
-    local ctors = klass:functions_get(ft.CTOR):to_array()
-    for i, v in ipairs(ctors) do
-        cnt[#cnt + 1] = Constructor(v)
-    end
-    if #ctors == 0 then
-        cnt[#cnt + 1] = Default_Constructor()
-    end
     -- events
     local evs = {}
     local events = klass:events_get():to_array()
index 9b8f65c..037310a 100644 (file)
@@ -17,9 +17,12 @@ ffi.cdef [[
     typedef struct _Eolian_Type Eolian_Type;
     typedef struct _Eolian_Function_Parameter Eolian_Function_Parameter;
     typedef struct _Eolian_Implement Eolian_Implement;
+    typedef struct _Eolian_Constructor Eolian_Constructor;
     typedef struct _Eolian_Event Eolian_Event;
     typedef struct _Eolian_Expression Eolian_Expression;
     typedef struct _Eolian_Variable Eolian_Variable;
+    typedef struct _Eolian_Struct_Type_Field Eolian_Struct_Type_Field;
+    typedef struct _Eolian_Enum_Type_Field Eolian_Enum_Type_Field;
     typedef struct _Eolian_Value Eolian_Value;
 
     typedef enum
@@ -28,8 +31,7 @@ ffi.cdef [[
         EOLIAN_PROPERTY,
         EOLIAN_PROP_SET,
         EOLIAN_PROP_GET,
-        EOLIAN_METHOD,
-        EOLIAN_CTOR
+        EOLIAN_METHOD
     } Eolian_Function_Type;
 
     typedef enum
@@ -61,6 +63,7 @@ ffi.cdef [[
         EOLIAN_TYPE_REGULAR,
         EOLIAN_TYPE_REGULAR_STRUCT,
         EOLIAN_TYPE_REGULAR_ENUM,
+        EOLIAN_TYPE_COMPLEX,
         EOLIAN_TYPE_POINTER,
         EOLIAN_TYPE_FUNCTION,
         EOLIAN_TYPE_STRUCT,
@@ -130,6 +133,42 @@ ffi.cdef [[
         Eolian_Value_Union value;
     } Eolian_Value_t;
 
+    typedef enum {
+        EOLIAN_BINOP_INVALID = -1,
+
+        EOLIAN_BINOP_ADD, /* + int, float */
+        EOLIAN_BINOP_SUB, /* - int, float */
+        EOLIAN_BINOP_MUL, /* * int, float */
+        EOLIAN_BINOP_DIV, /* / int, float */
+        EOLIAN_BINOP_MOD, /* % int */
+
+        EOLIAN_BINOP_EQ, /* == all types */
+        EOLIAN_BINOP_NQ, /* != all types */
+        EOLIAN_BINOP_GT, /* > int, float */
+        EOLIAN_BINOP_LT, /* < int, float */
+        EOLIAN_BINOP_GE, /* >= int, float */
+        EOLIAN_BINOP_LE, /* <= int, float */
+
+        EOLIAN_BINOP_AND, /* && all types */
+        EOLIAN_BINOP_OR, /* || all types */
+
+        EOLIAN_BINOP_BAND, /* & int */
+        EOLIAN_BINOP_BOR, /* | int */
+        EOLIAN_BINOP_BXOR, /* ^ int */
+        EOLIAN_BINOP_LSH, /* << int */
+        EOLIAN_BINOP_RSH /* >> int */
+    } Eolian_Binary_Operator;
+
+    typedef enum {
+        EOLIAN_UNOP_INVALID = -1,
+
+        EOLIAN_UNOP_UNM, /* - sint */
+        EOLIAN_UNOP_UNP, /* + sint */
+
+        EOLIAN_UNOP_NOT, /* ! int, float, bool */
+        EOLIAN_UNOP_BNOT, /* ~ int */
+    } Eolian_Unary_Operator;
+
     Eina_Bool eolian_eo_file_parse(const char *filename);
     Eina_Bool eolian_eot_file_parse(const char *filepath);
     int eolian_init(void);
@@ -168,15 +207,17 @@ ffi.cdef [[
     const char *eolian_function_legacy_get(const Eolian_Function *function_id, Eolian_Function_Type f_type);
     const char *eolian_function_description_get(const Eolian_Function *function_id, Eolian_Function_Type f_type);
     Eina_Bool eolian_function_is_virtual_pure(const Eolian_Function *function_id, Eolian_Function_Type f_type);
+    Eina_Bool eolian_function_is_auto(const Eolian_Function *function_id, Eolian_Function_Type f_type);
+    Eina_Bool eolian_function_is_empty(const Eolian_Function *function_id, Eolian_Function_Type f_type);
     Eina_Bool eolian_function_is_legacy_only(const Eolian_Function *function_id, Eolian_Function_Type ftype);
     Eina_Bool eolian_function_is_class(const Eolian_Function *function_id);
-    Eina_Bool eolian_function_is_constructing(const Eolian_Function *function_id);
     const Eolian_Function_Parameter *eolian_function_parameter_get_by_name(const Eolian_Function *function_id, const char *param_name);
     Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id);
     Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id);
     Eina_Iterator *eolian_function_parameters_get(const Eolian_Function *function_id);
     Eolian_Parameter_Dir eolian_parameter_direction_get(const Eolian_Function_Parameter *param);
     const Eolian_Type *eolian_parameter_type_get(const Eolian_Function_Parameter *param);
+    const Eolian_Expression *eolian_parameter_default_value_get(const Eolian_Function_Parameter *param);
     const char *eolian_parameter_name_get(const Eolian_Function_Parameter *param);
     const char *eolian_parameter_description_get(const Eolian_Function_Parameter *param);
     Eina_Bool eolian_parameter_const_attribute_get(const Eolian_Function_Parameter *param_desc, Eina_Bool is_get);
@@ -190,7 +231,16 @@ ffi.cdef [[
     const char *eolian_implement_full_name_get(const Eolian_Implement *impl);
     const Eolian_Class *eolian_implement_class_get(const Eolian_Implement *impl);
     const Eolian_Function *eolian_implement_function_get(const Eolian_Implement *impl, Eolian_Function_Type *func_type);
+    Eina_Bool eolian_implement_is_auto(const Eolian_Implement *impl);
+    Eina_Bool eolian_implement_is_empty(const Eolian_Implement *impl);
+    Eina_Bool eolian_implement_is_virtual(const Eolian_Implement *impl);
+    Eina_Bool eolian_implement_is_prop_get(const Eolian_Implement *impl);
+    Eina_Bool eolian_implement_is_prop_set(const Eolian_Implement *impl);
     Eina_Iterator *eolian_class_implements_get(const Eolian_Class *klass);
+    const char *eolian_constructor_full_name_get(const Eolian_Constructor *ctor);
+    const Eolian_Class *eolian_constructor_class_get(const Eolian_Constructor *ctor);
+    const Eolian_Function *eolian_constructor_function_get(const Eolian_Constructor *ctor);
+    Eina_Iterator *eolian_class_constructors_get(const Eolian_Class *klass);
     Eina_Iterator *eolian_class_events_get(const Eolian_Class *klass);
     const char *eolian_event_name_get(const Eolian_Event *event);
     const Eolian_Type *eolian_event_type_get(const Eolian_Event *event);
@@ -207,13 +257,16 @@ ffi.cdef [[
     Eolian_Type_Type eolian_type_type_get(const Eolian_Type *tp);
     Eina_Iterator *eolian_type_arguments_get(const Eolian_Type *tp);
     Eina_Iterator *eolian_type_subtypes_get(const Eolian_Type *tp);
-    Eina_Iterator *eolian_type_struct_field_names_get(const Eolian_Type *tp);
-    const Eolian_Type *eolian_type_struct_field_get(const Eolian_Type *tp, const char *field);
-    const char *eolian_type_struct_field_description_get(const Eolian_Type *tp, const char *field);
-    Eina_Iterator *eolian_type_enum_field_names_get(const Eolian_Type *tp);
-    Eina_Bool eolian_type_enum_field_exists(const Eolian_Type *tp, const char *field);
-    const Eolian_Expression *eolian_type_enum_field_get(const Eolian_Type *tp, const char *field);
-    const char *eolian_type_enum_field_description_get(const Eolian_Type *tp, const char *field);
+    Eina_Iterator *eolian_type_struct_fields_get(const Eolian_Type *tp);
+    const Eolian_Struct_Type_Field *eolian_type_struct_field_get(const Eolian_Type *tp, const char *field);
+    const char *eolian_type_struct_field_name_get(const Eolian_Struct_Type_Field *fl);
+    const char *eolian_type_struct_field_description_get(const Eolian_Struct_Type_Field *fl);
+    const Eolian_Type *eolian_type_struct_field_type_get(const Eolian_Struct_Type_Field *fl);
+    Eina_Iterator *eolian_type_enum_fields_get(const Eolian_Type *tp);
+    const Eolian_Enum_Type_Field *eolian_type_enum_field_get(const Eolian_Type *tp, const char *field);
+    const char *eolian_type_enum_field_name_get(const Eolian_Enum_Type_Field *fl);
+    const char *eolian_type_enum_field_description_get(const Eolian_Enum_Type_Field *fl);
+    const Eolian_Expression *eolian_type_enum_field_value_get(const Eolian_Enum_Type_Field *fl);
     const char *eolian_type_enum_legacy_prefix_get(const Eolian_Type *tp);
     const char *eolian_type_description_get(const Eolian_Type *tp);
     const char *eolian_type_file_get(const Eolian_Type *tp);
@@ -232,6 +285,13 @@ ffi.cdef [[
     Eolian_Value_t eolian_expression_eval_type(const Eolian_Expression *expr, const Eolian_Type *type);
     const char *eolian_expression_value_to_literal(const Eolian_Value *v);
     const char *eolian_expression_serialize(const Eolian_Expression *expr);
+    Eolian_Expression_Type eolian_expression_type_get(const Eolian_Expression *expr);
+    Eolian_Binary_Operator eolian_expression_binary_operator_get(const Eolian_Expression *expr);
+    const Eolian_Expression *eolian_expression_binary_lhs_get(const Eolian_Expression *expr);
+    const Eolian_Expression *eolian_expression_binary_rhs_get(const Eolian_Expression *expr);
+    Eolian_Unary_Operator eolian_expression_unary_operator_get(const Eolian_Expression *expr);
+    const Eolian_Expression *eolian_expression_unary_expression_get(const Eolian_Expression *expr);
+    Eolian_Value_t eolian_expression_value_get(const Eolian_Expression *expr);
     const Eolian_Variable *eolian_variable_global_get_by_name(const char *name);
     const Eolian_Variable *eolian_variable_constant_get_by_name(const char *name);
     Eina_Iterator *eolian_variable_globals_get_by_file(const char *fname);
@@ -306,7 +366,7 @@ M.all_eot_files_parse = function()
 end
 
 M.database_validate = function()
-    return eolian.eolian_databasE_validate() ~= 0
+    return eolian.eolian_database_validate() ~= 0
 end
 
 M.eot_file_parse = function(fname)
@@ -347,15 +407,60 @@ M.type_type = {
     REGULAR        = 2,
     REGULAR_STRUCT = 3,
     REGULAR_ENUM   = 4,
-    POINTER        = 5,
-    FUNCTION       = 6,
-    STRUCT         = 7,
-    STRUCT_OPAQUE  = 8,
-    ENUM           = 9,
-    ALIAS          = 10,
-    CLASS          = 11
+    COMPLEX        = 5,
+    POINTER        = 6,
+    FUNCTION       = 7,
+    STRUCT         = 8,
+    STRUCT_OPAQUE  = 9,
+    ENUM           = 10,
+    ALIAS          = 11,
+    CLASS          = 12
 }
 
+ffi.metatype("Eolian_Struct_Type_Field", {
+    __index = {
+        name_get = function(self)
+            local v = eolian.eolian_type_struct_field_name_get(self)
+            if v == nil then return nil end
+            return ffi.string(v)
+        end,
+
+        description_get = function(self)
+            local v = eolian.eolian_type_struct_field_description_get(self)
+            if v == nil then return nil end
+            return ffi.string(v)
+        end,
+
+        type_get = function(self)
+            local v = eolian.eolian_type_struct_field_type_get(self)
+            if v == nil then return nil end
+            return v
+        end
+    }
+})
+
+ffi.metatype("Eolian_Enum_Type_Field", {
+    __index = {
+        name_get = function(self)
+            local v = eolian.eolian_type_enum_field_name_get(self)
+            if v == nil then return nil end
+            return ffi.string(v)
+        end,
+
+        description_get = function(self)
+            local v = eolian.eolian_type_enum_field_description_get(self)
+            if v == nil then return nil end
+            return ffi.string(v)
+        end,
+
+        value_get = function(self)
+            local v = eolian.eolian_type_enum_field_value_get(self)
+            if v == nil then return nil end
+            return v
+        end
+    }
+})
+
 M.Type = ffi.metatype("Eolian_Type", {
     __index = {
         type_get = function(self)
@@ -372,9 +477,9 @@ M.Type = ffi.metatype("Eolian_Type", {
                 eolian.eolian_type_subtypes_get(self))
         end,
 
-        struct_field_names_get = function(self)
-            return iterator.String_Iterator(
-                eolian.eolian_type_struct_field_names_get(self))
+        struct_fields_get = function(self)
+            return Ptr_Iterator("const Eolian_Struct_Type_Field*",
+                eolian.eolian_type_struct_fields_get(self))
         end,
 
         struct_field_get = function(self, name)
@@ -383,19 +488,9 @@ M.Type = ffi.metatype("Eolian_Type", {
             return v
         end,
 
-        struct_field_description_get = function(self, name)
-            local v = eolian.eolian_type_struct_field_description_get(self, name)
-            if v == nil then return nil end
-            return ffi.string(v)
-        end,
-
-        enum_field_names_get = function(self)
-            return iterator.String_Iterator(
-                eolian.eolian_type_enum_field_names_get(self))
-        end,
-
-        enum_field_exists = function(self, field)
-            return eolian.eolian_type_enum_field_exists(self, field) ~= 0
+        enum_fields_get = function(self)
+            return Ptr_Iterator("const Eolian_Enum_Type_Field*",
+                eolian.eolian_type_enum_fields_get(self))
         end,
 
         enum_field_get = function(self, field)
@@ -404,12 +499,6 @@ M.Type = ffi.metatype("Eolian_Type", {
             return v
         end,
 
-        enum_field_description_get = function(self, name)
-            local v = eolian.eolian_type_enum_field_description_get(self, name)
-            if v == nil then return nil end
-            return ffi.string(v)
-        end,
-
         enum_legacy_prefix_get = function(self)
             local v = eolian.eolian_type_enum_legacy_prefix_get(self)
             if v == nil then return nil end
@@ -500,8 +589,7 @@ M.function_type = {
     PROPERTY   = 1,
     PROP_SET   = 2,
     PROP_GET   = 3,
-    METHOD     = 4,
-    CTOR       = 5
+    METHOD     = 4
 }
 
 M.Function = ffi.metatype("Eolian_Function", {
@@ -542,6 +630,14 @@ M.Function = ffi.metatype("Eolian_Function", {
             return eolian.eolian_function_is_virtual_pure(self, ftype) ~= 0
         end,
 
+        is_auto = function(self, ftype)
+            return eolian.eolian_function_is_auto(self, ftype) ~= 0
+        end,
+
+        is_empty = function(self, ftype)
+            return eolian.eolian_function_is_empty(self, ftype) ~= 0
+        end,
+
         is_legacy_only = function(self, ftype)
             return eolian.eolian_function_is_legacy_only(self, ftype) ~= 0
         end,
@@ -550,10 +646,6 @@ M.Function = ffi.metatype("Eolian_Function", {
             return eolian.eolian_function_is_class(self) ~= 0
         end,
 
-        is_constructing = function(self)
-            return eolian.eolian_function_is_constructing(self) ~= 0
-        end,
-
         parameter_get_by_name = function(self, pname)
             local v = eolian.eolian_function_parameter_get_by_name(self, pname)
             if v == nil then return nil end
@@ -622,6 +714,12 @@ ffi.metatype("Eolian_Function_Parameter", {
             return v
         end,
 
+        default_value_get = function(self)
+            local v = eolian.eolian_parameter_default_value_get(self)
+            if v == nil then return nil end
+            return v
+        end,
+
         name_get = function(self)
             local v = eolian.eolian_parameter_name_get(self)
             if v == nil then return nil end
@@ -660,9 +758,51 @@ ffi.metatype("Eolian_Implement", {
 
         function_get = function(self)
             local tp = ffi.new("Eolian_Function_Type[1]")
-            local v = eolian.eolian_implement_class_get(self, tp)
+            local v = eolian.eolian_implement_function_get(self, tp)
             if v == nil then return nil end
             return v, tp[0]
+        end,
+
+        is_auto = function(self)
+            return eolian.eolian_implement_is_auto(self) ~= 0
+        end,
+
+        is_empty = function(self)
+            return eolian.eolian_implement_is_empty(self) ~= 0
+        end,
+
+        is_virtual = function(self)
+            return eolian.eolian_implement_is_virtual(self) ~= 0
+        end,
+
+        is_prop_get = function(self)
+            return eolian.eolian_implement_is_prop_get(self) ~= 0
+        end,
+
+        is_prop_set = function(self)
+            return eolian.eolian_implement_is_prop_set(self) ~= 0
+        end
+    }
+})
+
+ffi.metatype("Eolian_Constructor", {
+    __index = {
+        full_name_get = function(self)
+            local v = eolian.eolian_constructor_full_name_get(self)
+            if v == nil then return nil end
+            return ffi.string(v)
+        end,
+
+        class_get = function(self)
+            local v = eolian.eolian_constructor_class_get(self)
+            if v == nil then return nil end
+            return v
+        end,
+
+        function_get = function(self)
+            local v = eolian.eolian_implement_function_get(self)
+            if v == nil then return nil end
+            return v
         end
     }
 })
@@ -797,6 +937,11 @@ M.Class = ffi.metatype("Eolian_Class", {
                 eolian.eolian_class_implements_get(self))
         end,
 
+        constructors_get = function(self)
+            return Ptr_Iterator("const Eolian_Constructor*",
+                eolian.eolian_class_constructors_get(self))
+        end,
+
         events_get = function(self)
             return Ptr_Iterator("const Eolian_Event*",
                 eolian.eolian_class_events_get(self))
@@ -893,10 +1038,10 @@ M.variable_type = {
 local value_con = {
     [etype.INT   ] = function(v) return tonumber(v.value.i   ) end,
     [etype.UINT  ] = function(v) return tonumber(v.value.u   ) end,
-    [etype.LONG  ] = function(v) return tonumber(v.value.l   ) end,
-    [etype.ULONG ] = function(v) return tonumber(v.value.ul  ) end,
-    [etype.LLONG ] = function(v) return tonumber(v.value.ll  ) end,
-    [etype.ULLONG] = function(v) return tonumber(v.value.ull ) end,
+    [etype.LONG  ] = function(v) return v.value.l              end,
+    [etype.ULONG ] = function(v) return v.value.ul             end,
+    [etype.LLONG ] = function(v) return v.value.ll             end,
+    [etype.ULLONG] = function(v) return v.value.ull            end,
     [etype.FLOAT ] = function(v) return tonumber(v.value.f   ) end,
     [etype.DOUBLE] = function(v) return tonumber(v.value.d   ) end,
     [etype.STRING] = function(v) return ffi.string(v.value.s ) end,
@@ -926,6 +1071,42 @@ M.Value = ffi.metatype("Eolian_Value", {
     }
 })
 
+M.binary_operator = {
+    INVALID = -1,
+
+    ADD = 0,
+    SUB = 1,
+    MUL = 2,
+    DIV = 3,
+    MOD = 4,
+
+    EQ = 5,
+    NQ = 6,
+    GT = 7,
+    LT = 8,
+    GE = 9,
+    LE = 10,
+
+    AND = 11,
+    OR  = 12,
+
+    BAND = 13,
+    BOR  = 14,
+    BXOR = 15,
+    LSH  = 16,
+    RSH  = 17
+}
+
+M.unary_operator = {
+    INVALID = -1,
+
+    UNM = 0,
+    UNP = 1,
+
+    NOT  = 2,
+    BNOT = 3
+}
+
 M.Expression = ffi.metatype("Eolian_Expression", {
     __index = {
         eval = function(self, mask)
@@ -945,6 +1126,42 @@ M.Expression = ffi.metatype("Eolian_Expression", {
             local v = eolian.eolian_expression_serialize(self)
             if v == nil then return nil end
             return ffi_stringshare(v)
+        end,
+
+        type_get = function(self)
+            return tonumber(eolian.eolian_expression_type_get(self))
+        end,
+
+        binary_operator_get = function(self)
+            return tonumber(eolian.eolian_expression_binary_operator_get(self))
+        end,
+
+        binary_lhs_get = function(self)
+            local v = eolian.eolian_expression_binary_lhs_get(self)
+            if v == nil then return nil end
+            return v
+        end,
+
+        binary_rhs_get = function(self)
+            local v = eolian.eolian_expression_binary_rhs_get(self)
+            if v == nil then return nil end
+            return v
+        end,
+
+        unary_operator_get = function(self)
+            return tonumber(eolian.eolian_expression_unary_operator_get(self))
+        end,
+
+        unary_expression_get = function(self)
+            local v = eolian.eolian_expression_unary_expression_get(self)
+            if v == nil then return nil end
+            return v
+        end,
+
+        value_get = function(self)
+            local v = eolian.eolian_expression_value_get(self)
+            if v == nil then return nil end
+            return ffi.cast("Eolian_Value*", v)
         end
     }
 })