summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2016-08-16 14:37:45 +0100
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2016-08-16 14:37:45 +0100
commit206d323281d8420dbfab5bc52cecb2948e6d8b53 (patch)
treea4ff5fbacbc349edecf3f43923c185f733076157
parent6d52d1db2b2b85eda6dc16124d319d25e975f49c (diff)
downloadefl-206d323281d8420dbfab5bc52cecb2948e6d8b53.tar.gz
docs: add Expression node type
-rw-r--r--src/scripts/elua/apps/docgen/doctree.lua49
-rw-r--r--src/scripts/elua/apps/docgen/serializers.lua2
2 files changed, 47 insertions, 4 deletions
diff --git a/src/scripts/elua/apps/docgen/doctree.lua b/src/scripts/elua/apps/docgen/doctree.lua
index 7188423516..f8760ccd58 100644
--- a/src/scripts/elua/apps/docgen/doctree.lua
+++ b/src/scripts/elua/apps/docgen/doctree.lua
@@ -372,7 +372,11 @@ M.Function = Node:clone {
end,
return_default_value_get = function(self, ft)
- return self.func:return_default_value_get(ft)
+ local v = self.func:return_default_value_get(ft)
+ if not v then
+ return nil
+ end
+ return M.Expression(v)
end,
return_doc_get = function(self, ft)
@@ -426,7 +430,11 @@ M.Parameter = Node:clone {
end,
default_value_get = function(self)
- return self.param:default_value_get()
+ local v = self.param:default_value_get()
+ if not v then
+ return nil
+ end
+ return M.Expression(v)
end,
name_get = function(self)
@@ -541,7 +549,11 @@ M.EnumField = Node:clone {
end,
value_get = function(self, force)
- return self.field:value_get(force)
+ local v = self.field:value_get(force)
+ if not v then
+ return nil
+ end
+ return M.Expression(v)
end
}
@@ -835,6 +847,37 @@ M.Variable = Node:clone {
end
}
+M.Expression = Node:clone {
+ __ctor = function(self, expr)
+ self.expr = expr
+ assert(self.expr)
+ end,
+
+ eval = function(self, mask)
+ return self.expr:eval(mask)
+ end,
+
+ eval_enum = function(self)
+ return self.expr:eval(eolian.expression_mask.INT)
+ end,
+
+ eval_type = function(self, tp)
+ return self.expr:eval_type(tp)
+ end,
+
+ serialize = function(self)
+ return self.expr:serialize()
+ end,
+
+ type_get = function(self)
+ return self.expr:type_get()
+ end,
+
+ value_get = function(self)
+ return self.expr:value_get()
+ end
+}
+
local decl_to_nspace = function(decl)
local dt = eolian.declaration_type
local decltypes = {
diff --git a/src/scripts/elua/apps/docgen/serializers.lua b/src/scripts/elua/apps/docgen/serializers.lua
index e39abe769f..ece712845f 100644
--- a/src/scripts/elua/apps/docgen/serializers.lua
+++ b/src/scripts/elua/apps/docgen/serializers.lua
@@ -195,7 +195,7 @@ M.get_typedecl_cstr = function(tp)
local val = fld:value_get()
if val then
buf[#buf + 1] = " = "
- local ev = val:eval(eolian.expression_mask.INT)
+ local ev = val:eval_enum()
local lit = ev:to_literal()
buf[#buf + 1] = lit
local ser = val:serialize()