q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=79f10fc0a0b1442ad0381e74fdf2804817363260

commit 79f10fc0a0b1442ad0381e74fdf2804817363260
Author: Daniel Kolesa <d.kol...@osg.samsung.com>
Date:   Fri Mar 3 15:53:31 2017 +0100

    docgen: move stats and keyref build into later stage
    
    That way we can multipass the doc build without worrying about stats.
---
 src/scripts/elua/apps/gendoc.lua | 82 +++++++++++++++++++++++++---------------
 1 file changed, 52 insertions(+), 30 deletions(-)

diff --git a/src/scripts/elua/apps/gendoc.lua b/src/scripts/elua/apps/gendoc.lua
index 48b1c18..fb4c5f0 100644
--- a/src/scripts/elua/apps/gendoc.lua
+++ b/src/scripts/elua/apps/gendoc.lua
@@ -33,14 +33,11 @@ local get_func_csig_part = function(cn, tp)
     return dtree.type_cstr_get(tp, cn)
 end
 
-local gen_func_csig = function(f, ftype, ns)
+local gen_func_csig = function(f, ftype)
     ftype = ftype or f.METHOD
     assert(ftype ~= f.PROPERTY)
 
     local cn = f:full_c_name_get(ftype)
-    if ns then
-        keyref.add(cn, ns, "c")
-    end
     local rtype = f:return_type_get(ftype)
 
     local fparam = "Eo *obj"
@@ -348,8 +345,6 @@ local build_ref = function()
             mixins[#mixins + 1] = cl
         elseif tp == dtree.Class.INTERFACE then
             ifaces[#ifaces + 1] = cl
-        else
-            error("unknown class: " .. cl:full_name_get())
         end
     end
 
@@ -941,9 +936,6 @@ local build_class = function(cl)
     local fulln = cl:full_name_get()
     local f = writer.Writer(cln, fulln)
     printgen("Generating class: " .. fulln)
-    stats.check_class(cl)
-
-    keyref.add(cl:full_name_get():gsub("%.", "_"), cln, "c")
 
     f:write_folded("Inheritance graph", function()
         f:write_graph(build_igraph(cl))
@@ -988,9 +980,6 @@ end
 
 local build_classes = function()
     for i, cl in ipairs(dtree.Class.all_get()) do
-        if not cl:type_str_get() then
-            error("unknown class: " .. cl:full_name_get())
-        end
         build_class(cl)
     end
 end
@@ -1010,7 +999,6 @@ local build_alias = function(tp)
     local fulln = tp:full_name_get()
     local f = writer.Writer(ns, fulln)
     printgen("Generating alias: " .. fulln)
-    stats.check_alias(tp)
 
     write_tsigs(f, tp, ns)
 
@@ -1029,7 +1017,6 @@ local build_struct = function(tp)
     local fulln = tp:full_name_get()
     local f = writer.Writer(ns, fulln)
     printgen("Generating struct: " .. fulln)
-    stats.check_struct(tp)
 
     write_tsigs(f, tp, ns)
 
@@ -1063,7 +1050,6 @@ local build_enum = function(tp)
     local fulln = tp:full_name_get()
     local f = writer.Writer(ns, fulln)
     printgen("Generating enum: " .. fulln)
-    stats.check_enum(tp)
 
     write_tsigs(f, tp, ns)
 
@@ -1097,11 +1083,6 @@ local build_variable = function(v, constant)
     local fulln = v:full_name_get()
     local f = writer.Writer(ns, fulln)
     printgen("Generating variable: " .. fulln)
-    if constant then
-        stats.check_constant(v)
-    else
-        stats.check_global(v)
-    end
 
     write_tsigs(f, v, ns)
 
@@ -1280,7 +1261,6 @@ build_method = function(impl, cl)
     local methn = cl:full_name_get() .. "." .. fn:name_get()
     local f = writer.Writer(mns, methn)
     printgen("Generating method: " .. methn)
-    stats.check_method(fn, cl)
 
     write_inherited_from(f, impl, cl, over, false)
 
@@ -1294,7 +1274,7 @@ build_method = function(impl, cl)
     f:write_nl()
 
     f:write_h("C signature", 2)
-    f:write_code(gen_func_csig(fn, nil, mns), "c")
+    f:write_code(gen_func_csig(fn, nil), "c")
     f:write_nl()
 
     local pars = fn:parameters_get()
@@ -1332,9 +1312,6 @@ build_property = function(impl, cl)
     local isget = pimp:is_prop_get()
     local isset = pimp:is_prop_set()
 
-    if isget then stats.check_property(fn, cl, fn.PROP_GET) end
-    if isset then stats.check_property(fn, cl, fn.PROP_SET) end
-
     local doc = impl:doc_get(fn.PROPERTY)
     local gdoc = impl:doc_get(fn.PROP_GET)
     local sdoc = impl:doc_get(fn.PROP_SET)
@@ -1358,10 +1335,10 @@ build_property = function(impl, cl)
     f:write_h("C signature", 2)
     local codes = {}
     if isget then
-        codes[#codes + 1] = gen_func_csig(fn, fn.PROP_GET, pns)
+        codes[#codes + 1] = gen_func_csig(fn, fn.PROP_GET)
     end
     if isset then
-        codes[#codes + 1] = gen_func_csig(fn, fn.PROP_SET, pns)
+        codes[#codes + 1] = gen_func_csig(fn, fn.PROP_SET)
     end
     f:write_code(table.concat(codes, "\n"), "c")
     f:write_nl()
@@ -1463,9 +1440,7 @@ build_event = function(ev, cl)
     f:write_nl()
 
     f:write_h("C signature", 2)
-    local cn = ev:c_name_get()
-    keyref.add(cn, evn, "c")
-    f:write_code(dtree.type_cstr_get(etp, cn) .. ";", "c")
+    f:write_code(dtree.type_cstr_get(etp, ev:c_name_get()) .. ";", "c")
     f:write_nl()
 
     f:write_h("Description", 2)
@@ -1478,6 +1453,51 @@ build_event = function(ev, cl)
     f:finish()
 end
 
+local build_stats_keyref = function()
+    for i, cl in ipairs(dtree.Class.all_get()) do
+        stats.check_class(cl)
+        keyref.add(cl:full_name_get():gsub("%.", "_"), cl:nspaces_get(), "c")
+        for i, imp in ipairs(cl:implements_get()) do
+            -- TODO: handle doc overrides in stats system
+            if not imp:is_overridden(cl) then
+                local func = imp:function_get()
+                local fns = func:nspaces_get(cl)
+                if imp:is_prop_get() or imp:is_prop_set() then
+                    if imp:is_prop_get() then
+                        stats.check_property(func, cl, func.PROP_GET)
+                        keyref.add(func:full_c_name_get(func.PROP_GET), fns, 
"c")
+                    end
+                    if imp:is_prop_set() then
+                        stats.check_property(func, cl, func.PROP_SET)
+                        keyref.add(func:full_c_name_get(func.PROP_SET), fns, 
"c")
+                    end
+                else
+                    stats.check_method(func, cl)
+                    keyref.add(func:full_c_name_get(func.METHOD), fns, "c")
+                end
+            end
+        end
+        for i, ev in ipairs(cl:events_get()) do
+            keyref.add(ev:c_name_get(), ev:nspaces_get(cl), "c")
+        end
+    end
+    for i, tp in ipairs(dtree.Typedecl.all_aliases_get()) do
+        stats.check_alias(tp)
+    end
+    for i, tp in ipairs(dtree.Typedecl.all_structs_get()) do
+        stats.check_struct(tp)
+    end
+    for i, tp in ipairs(dtree.Typedecl.all_enums_get()) do
+        stats.check_enum(tp)
+    end
+    for i, v in ipairs(dtree.Variable.all_constants_get()) do
+        stats.check_constant(v)
+    end
+    for i, v in ipairs(dtree.Variable.all_globals_get()) do
+        stats.check_global(v)
+    end
+end
+
 getopt.parse {
     args = arg,
     descs = {
@@ -1547,6 +1567,8 @@ getopt.parse {
         build_classes()
         build_typedecls()
         build_variables()
+
+        build_stats_keyref()
         keyref.build()
         -- newline if printing what's being generated
         printgen()

-- 


Reply via email to