end,
return_type_get = function(self, ft)
- return self.func:return_type_get(ft)
+ local v = self.func:return_type_get(ft)
+ if not v then
+ return nil
+ end
+ return M.Type(v)
end,
return_default_value_get = function(self, ft)
end,
type_get = function(self)
- return self.param:type_get()
+ local v = self.param:type_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
end,
default_value_get = function(self)
end,
type_get = function(self)
- return self.event:type_get()
+ local v = self.event:type_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
end,
doc_get = function(self)
end,
type_get = function(self)
- return self.field:type_get()
+ local v = self.field:type_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
end
}
end
}
+M.Type = Node:clone {
+ UNKNOWN = eolian.type_type.UNKNOWN,
+ VOID = eolian.type_type.VOID,
+ REGULAR = eolian.type_type.REGULAR,
+ COMPLEX = eolian.type_type.COMPLEX,
+ POINTER = eolian.type_type.POINTER,
+ CLASS = eolian.type_type.CLASS,
+ STATIC_ARRAY = eolian.type_type.STATIC_ARRAY,
+ TERMINATED_ARRAY = eolian.type_type.TERMINATED_ARRAY,
+ UNDEFINED = eolian.type_type.UNDEFINED,
+
+ __ctor = function(self, tp)
+ self.type = tp
+ assert(self.type)
+ end,
+
+ type_get = function(self)
+ return self.type:type_get()
+ end,
+
+ file_get = function(self)
+ return self.type:file_get()
+ end,
+
+ base_type_get = function(self)
+ local v = self.type:base_type_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
+ end,
+
+ next_type_get = function(self)
+ local v = self.type:next_type_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
+ end,
+
+ typedecl_get = function(self)
+ local v = self.type:typedecl_get()
+ if not v then
+ return nil
+ end
+ return M.Typedecl(v)
+ end,
+
+ aliased_base_get = function(self)
+ local v = self.type:aliased_base_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
+ end,
+
+ class_get = function(self)
+ return self.type:class_get()
+ end,
+
+ array_size_get = function(self)
+ return self.type_array_size_get()
+ end,
+
+ is_own = function(self)
+ return self.type:is_own()
+ end,
+
+ is_const = function(self)
+ return self.type:is_const()
+ end,
+
+ is_ref = function(self)
+ return self.type:is_ref()
+ end,
+
+ c_type_get = function(self)
+ return self.type:c_type_get()
+ end,
+
+ name_get = function(self)
+ return self.type:name_get()
+ end,
+
+ full_name_get = function(self)
+ return self.type:full_name_get()
+ end,
+
+ namespaces_get = function(self)
+ return self.type:namespaces_get()
+ end,
+
+ free_func_get = function(self)
+ return self.type:free_func_get()
+ end
+}
+
M.Typedecl = Node:clone {
UNKNOWN = eolian.typedecl_type.UNKNOWN,
STRUCT = eolian.typedecl_type.STRUCT,
end,
base_type_get = function(self)
- return self.typedecl:base_type_get()
+ local v = self.typedecl:base_type_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
end,
aliased_base_get = function(self)
- return self.typedecl:aliased_base_get()
+ local v = self.typedecl:aliased_base_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
end,
is_extern = function(self)
end,
base_type_get = function(self)
- return self.variable:base_type_get()
+ local v = self.variable:base_type_get()
+ if not v then
+ return nil
+ end
+ return M.Type(v)
end,
value_get = function(self)
-local eolian = require("eolian")
local keyref = require("docgen.keyref")
local dtree = require("docgen.doctree")
end
M.get_type_str = function(tp)
- local tps = eolian.type_type
local tpt = tp:type_get()
- if tpt == tps.UNKNOWN then
+ if tpt == tp.UNKNOWN then
error("unknown type: " .. tp:full_name_get())
- elseif tpt == tps.VOID then
+ elseif tpt == tp.VOID then
return wrap_type_attrs(tp, "void")
- elseif tpt == tps.UNDEFINED then
+ elseif tpt == tp.UNDEFINED then
return wrap_type_attrs(tp, "__undefined_type")
- elseif tpt == tps.REGULAR or tpt == tps.CLASS then
+ elseif tpt == tp.REGULAR or tpt == tp.CLASS then
return wrap_type_attrs(tp, tp:full_name_get())
- elseif tpt == tps.COMPLEX then
+ elseif tpt == tp.COMPLEX then
local stypes = {}
local stp = tp:base_type_get()
while stp do
end
return wrap_type_attrs(tp, tp:full_name_get() .. "<"
.. table.concat(stypes, ", ") .. ">")
- elseif tpt == tps.POINTER then
+ elseif tpt == tp.POINTER then
local btp = tp:base_type_get()
local suffix = " *"
- if btp:type_get() == tps.POINTER then
+ if btp:type_get() == tp.POINTER then
suffix = "*"
end
return wrap_type_attrs(tp, M.get_type_str(btp) .. suffix)
- elseif tpt == tps.STATIC_ARRAY then
+ elseif tpt == tp.STATIC_ARRAY then
return wrap_type_attrs(tp, "static_array<"
.. M.get_type_str(tp:base_type_get()) .. ", "
.. tp:array_size_get() .. ">")
- elseif tpt == tps.TERMINATED_ARRAY then
+ elseif tpt == tp.TERMINATED_ARRAY then
return wrap_type_attrs(tp, "terminated_array<"
.. M.get_type_str(tp:base_type_get()) .. ">")
end