elua: update eolian bindings and make docgen work again

This commit is contained in:
Daniel Kolesa 2017-08-30 19:38:53 +02:00
parent 10fd3c32e8
commit 8b5d555cf5
3 changed files with 68 additions and 12 deletions

View File

@ -36,7 +36,8 @@ ffi.cdef [[
EOLIAN_PROPERTY,
EOLIAN_PROP_SET,
EOLIAN_PROP_GET,
EOLIAN_METHOD
EOLIAN_METHOD,
EOLIAN_FUNCTION_POINTER
} Eolian_Function_Type;
typedef enum
@ -69,7 +70,8 @@ ffi.cdef [[
EOLIAN_TYPEDECL_STRUCT,
EOLIAN_TYPEDECL_STRUCT_OPAQUE,
EOLIAN_TYPEDECL_ENUM,
EOLIAN_TYPEDECL_ALIAS
EOLIAN_TYPEDECL_ALIAS,
EOLIAN_TYPEDECL_FUNCTION_POINTER
} Eolian_Typedecl_Type;
typedef enum
@ -259,6 +261,9 @@ ffi.cdef [[
const Eolian_Implement *eolian_function_implement_get(const Eolian_Function *function_id);
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_beta(const Eolian_Function *function_id);
Eina_Bool eolian_function_is_constructor(const Eolian_Function *function_id, const Eolian_Class *klass);
Eina_Bool eolian_function_is_function_pointer(const Eolian_Function *function_id);
Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype);
Eina_Iterator *eolian_function_parameters_get(const Eolian_Function *function_id);
@ -361,6 +366,8 @@ ffi.cdef [[
const char *eolian_type_free_func_get(const Eolian_Type *tp);
const char *eolian_typedecl_free_func_get(const Eolian_Typedecl *tp);
const Eolian_Function *eolian_typedecl_function_pointer_get(const Eolian_Typedecl *tp);
Eolian_Value_t eolian_expression_eval(const Eolian_Unit *unit, const Eolian_Expression *expr, Eolian_Expression_Mask m);
Eolian_Value_t eolian_expression_eval_type(const Eolian_Unit *unit, const Eolian_Expression *expr, const Eolian_Type *type);
const char *eolian_expression_value_to_literal(const Eolian_Value *v);
@ -510,11 +517,12 @@ M.type_type = {
}
M.typedecl_type = {
UNKNOWN = 0,
STRUCT = 1,
STRUCT_OPAQUE = 2,
ENUM = 3,
ALIAS = 4
UNKNOWN = 0,
STRUCT = 1,
STRUCT_OPAQUE = 2,
ENUM = 3,
ALIAS = 4,
FUNCTION_POINTER = 5
}
M.c_type_type = {
@ -662,6 +670,12 @@ M.Typedecl = ffi.metatype("Eolian_Typedecl", {
local v = eolian.eolian_typedecl_free_func_get(self)
if v == nil then return nil end
return ffi.string(v)
end,
function_pointer_get = function(self)
local v = eolian.eolian_typedecl_function_pointer_get(self)
if v == nil then return nil end
return v
end
}
})
@ -756,11 +770,12 @@ M.Type = ffi.metatype("Eolian_Type", {
})
M.function_type = {
UNRESOLVED = 0,
PROPERTY = 1,
PROP_SET = 2,
PROP_GET = 3,
METHOD = 4
UNRESOLVED = 0,
PROPERTY = 1,
PROP_SET = 2,
PROP_GET = 3,
METHOD = 4,
FUNCTION_POINTER = 5
}
M.Function = ffi.metatype("Eolian_Function", {
@ -805,6 +820,18 @@ M.Function = ffi.metatype("Eolian_Function", {
return eolian.eolian_function_is_class(self) ~= 0
end,
is_beta = function(self)
return eolian.eolian_function_is_beta(self) ~= 0
end,
is_constructor = function(self, klass)
return eolian.eolian_function_is_constructor(self, klass) ~= 0
end,
is_function_pointer = function(self)
return eolian.eolian_function_is_function_pointer(self) ~= 0
end,
property_keys_get = function(self, ftype)
return Ptr_Iterator("const Eolian_Function_Parameter*",
eolian.eolian_property_keys_get(self, ftype))

View File

@ -349,6 +349,7 @@ M.Function = Node:clone {
PROP_SET = eolian.function_type.PROP_SET,
PROP_GET = eolian.function_type.PROP_GET,
METHOD = eolian.function_type.METHOD,
FUNCTION_POINTER = eolian.function_type.FUNCTION_POINTER,
__ctor = function(self, fn)
self.func = fn
@ -391,6 +392,18 @@ M.Function = Node:clone {
return self.func:is_class()
end,
is_beta = function(self)
return self.func:is_beta()
end,
is_constructor = function(self, klass)
return self.func:is_constructor(klass.class)
end,
is_function_pointer = function(self)
return self.func:is_function_pointer()
end,
property_keys_get = function(self, ft)
local ret = {}
for par in self.func:property_keys_get(ft) do
@ -808,6 +821,7 @@ M.Typedecl = Node:clone {
STRUCT_OPAQUE = eolian.typedecl_type.STRUCT_OPAQUE,
ENUM = eolian.typedecl_type.ENUM,
ALIAS = eolian.typedecl_type.ALIAS,
FUNCTION_POINTER = eolian.typedecl_type.FUNCTION_POINTER,
__ctor = function(self, tp)
self.typedecl = tp
@ -913,6 +927,14 @@ M.Typedecl = Node:clone {
return self.typedecl:free_func_get()
end,
function_pointer_get = function(self)
local v = self.typedecl:function_pointer_get()
if not v then
return nil
end
return M.Function(v)
end,
nspaces_get = function(self, root)
return M.Node.nspaces_get(self, self:type_str_get(), root)
end,
@ -1064,6 +1086,8 @@ M.Typedecl = Node:clone {
buf[#buf + 1] = self:base_type_get():serialize()
buf[#buf + 1] = ";"
return table.concat(buf)
elseif tpt == self.FUNCTION_POINTER then
return "TODO"
end
error("unhandled typedecl type: " .. tpt)
end,
@ -1134,6 +1158,8 @@ M.Typedecl = Node:clone {
keyref.add(fulln, ns, "c")
return "typedef "
.. M.type_cstr_get(self:base_type_get(), fulln) .. ";"
elseif tpt == self.FUNCTION_POINTER then
return "TODO"
end
error("unhandled typedecl type: " .. tpt)
end

View File

@ -100,6 +100,9 @@ local gen_func_namesig = function(fn, cl, buf, isprop, isget, isset)
end
buf[#buf + 1] = fn:name_get()
buf[#buf + 1] = " "
if fn:is_beta() then
buf[#buf + 1] = "@beta "
end
if not isprop then
if fn:scope_get(fn.METHOD) == fn.scope.PROTECTED then
buf[#buf + 1] = "@protected "