Generating enums and intentries only if the tables are non-empty.

pull/13171/head
Martin Maly 10 years ago
parent 0c7eb664fc
commit c688be9e06
  1. 52
      tools/dump_cinit.lua

@ -173,6 +173,10 @@ function LinkTable:objs(objtype)
end
end
function LinkTable:empty(objtype)
return #self.obj_arrays[objtype] == 0
end
--[[
Dumper: an object that can dump C initializers for several constructs.
@ -405,9 +409,13 @@ local function dump_defs_c(symtab, basename, namespace, append)
append('#include "upb/symtab.h"\n\n')
append("static const upb_msgdef %s;\n", linktab:cdecl(upb.DEF_MSG))
append("static const upb_fielddef %s;\n", linktab:cdecl(upb.DEF_FIELD))
append("static const upb_enumdef %s;\n", linktab:cdecl(upb.DEF_ENUM))
if not linktab:empty(upb.DEF_ENUM) then
append("static const upb_enumdef %s;\n", linktab:cdecl(upb.DEF_ENUM))
end
append("static const upb_tabent %s;\n", linktab:cdecl("strentries"))
append("static const upb_tabent %s;\n", linktab:cdecl("intentries"))
if not linktab:empty("intentries") then
append("static const upb_tabent %s;\n", linktab:cdecl("intentries"))
end
append("static const _upb_value %s;\n", linktab:cdecl("arrays"))
append("\n")
append("#ifdef UPB_DEBUG_REFS\n")
@ -469,21 +477,23 @@ local function dump_defs_c(symtab, basename, namespace, append)
end
append("};\n\n")
append("static const upb_enumdef %s = {\n", linktab:cdecl(upb.DEF_ENUM))
for e in linktab:objs(upb.DEF_ENUM) do
local tables = gettables(e)
-- UPB_ENUMDEF_INIT(name, ntoi, iton, defaultval)
append(' UPB_ENUMDEF_INIT("%s", %s, %s, %d, ' ..
'&reftables[%d], &reftables[%d]),\n',
e:full_name(),
dumper:strtable(tables.str),
dumper:inttable(tables.int),
--e:default())
0,
reftable, reftable + 1)
reftable = reftable + 2
if not linktab:empty(upb.DEF_ENUM) then
append("static const upb_enumdef %s = {\n", linktab:cdecl(upb.DEF_ENUM))
for e in linktab:objs(upb.DEF_ENUM) do
local tables = gettables(e)
-- UPB_ENUMDEF_INIT(name, ntoi, iton, defaultval)
append(' UPB_ENUMDEF_INIT("%s", %s, %s, %d, ' ..
'&reftables[%d], &reftables[%d]),\n',
e:full_name(),
dumper:strtable(tables.str),
dumper:inttable(tables.int),
--e:default())
0,
reftable, reftable + 1)
reftable = reftable + 2
end
append("};\n\n")
end
append("};\n\n")
append("static const upb_tabent %s = {\n", linktab:cdecl("strentries"))
for ent in linktab:objs("strentries") do
@ -491,11 +501,13 @@ local function dump_defs_c(symtab, basename, namespace, append)
end
append("};\n\n");
append("static const upb_tabent %s = {\n", linktab:cdecl("intentries"))
for ent in linktab:objs("intentries") do
append(dumper:tabent(ent))
if not linktab:empty("intentries") then
append("static const upb_tabent %s = {\n", linktab:cdecl("intentries"))
for ent in linktab:objs("intentries") do
append(dumper:tabent(ent))
end
append("};\n\n");
end
append("};\n\n");
append("static const _upb_value %s = {\n", linktab:cdecl("arrays"))
for ent in linktab:objs("arrays") do

Loading…
Cancel
Save