docs: add Type to doctree and remove direct eolian api usages

This commit is contained in:
Daniel Kolesa 2016-08-16 14:53:04 +01:00
parent e592f774ca
commit e1a4274e97
2 changed files with 141 additions and 18 deletions

View File

@ -368,7 +368,11 @@ M.Function = Node:clone {
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)
@ -426,7 +430,11 @@ M.Parameter = Node:clone {
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)
@ -473,7 +481,11 @@ M.Event = Node:clone {
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)
@ -526,7 +538,11 @@ M.StructField = Node:clone {
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
}
@ -557,6 +573,103 @@ M.EnumField = Node:clone {
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,
@ -628,11 +741,19 @@ M.Typedecl = Node:clone {
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)
@ -769,7 +890,11 @@ M.Variable = Node:clone {
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)

View File

@ -1,4 +1,3 @@
local eolian = require("eolian")
local keyref = require("docgen.keyref")
local dtree = require("docgen.doctree")
@ -35,17 +34,16 @@ local wrap_type_attrs = function(tp, str)
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
@ -54,18 +52,18 @@ M.get_type_str = function(tp)
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