Commit 04a9c84d authored by Philip Quinn's avatar Philip Quinn

Remove zero-length array of brand dependencies from generated headers when there are none.

Zero-length arrays are a GNU extension.
parent a6d898a2
...@@ -667,16 +667,19 @@ private: ...@@ -667,16 +667,19 @@ private:
} }
} }
auto brandDeps = makeBrandDepInitializers(templateContext, schema);
return kj::strTree( return kj::strTree(
"{\n", "{\n",
macroParam(kj::StringTree(scopes.finish(), "").flatten()), macroParam(kj::StringTree(scopes.finish(), "").flatten()),
"}, {\n", "}, {\n",
macroParam(kj::StringTree(bindings.releaseAsArray(), "").flatten()), macroParam(kj::StringTree(bindings.releaseAsArray(), "").flatten()),
"}, ", macroParam(makeBrandDepInitializers(templateContext, schema).flatten())); "}, ",
brandDeps.size() == 0 ? kj::strTree("{}") : macroParam(brandDeps.flatten()));
} }
kj::StringTree makeBrandDepInitializers(const TemplateContext& templateContext, Schema schema) { kj::StringTree makeBrandDepInitializers(const TemplateContext& templateContext, Schema schema) {
// Build deps. // Build deps. Returns a braced initialiser list, or an empty string if there are no dependencies.
std::map<uint, kj::StringTree> depMap; std::map<uint, kj::StringTree> depMap;
#define ADD_DEP(kind, index, ...) \ #define ADD_DEP(kind, index, ...) \
...@@ -719,6 +722,10 @@ private: ...@@ -719,6 +722,10 @@ private:
} }
#undef ADD_DEP #undef ADD_DEP
if (!depMap.size()) {
return kj::strTree();
}
auto deps = kj::heapArrayBuilder<kj::StringTree>(depMap.size()); auto deps = kj::heapArrayBuilder<kj::StringTree>(depMap.size());
for (auto& entry: depMap) { for (auto& entry: depMap) {
deps.add(kj::strTree(" { ", entry.first, ", ", kj::mv(entry.second), " },\n")); deps.add(kj::strTree(" { ", entry.first, ", ", kj::mv(entry.second), " },\n"));
...@@ -2335,6 +2342,8 @@ private: ...@@ -2335,6 +2342,8 @@ private:
break; break;
} }
auto brandDeps = makeBrandDepInitializers(templateContext, schema.getGeneric());
auto schemaDef = kj::strTree( auto schemaDef = kj::strTree(
"static const ::capnp::_::AlignedData<", rawSchema.size(), "> b_", hexId, " = {\n" "static const ::capnp::_::AlignedData<", rawSchema.size(), "> b_", hexId, " = {\n"
" {", kj::mv(schemaLiteral), " }\n" " {", kj::mv(schemaLiteral), " }\n"
...@@ -2355,16 +2364,18 @@ private: ...@@ -2355,16 +2364,18 @@ private:
"static const uint16_t i_", hexId, "[] = {", "static const uint16_t i_", hexId, "[] = {",
kj::StringTree(KJ_MAP(index, membersByDiscrim) { return kj::strTree(index); }, ", "), kj::StringTree(KJ_MAP(index, membersByDiscrim) { return kj::strTree(index); }, ", "),
"};\n"), "};\n"),
"const ::capnp::_::RawBrandedSchema::Dependency bd_", hexId, "[] = ", brandDeps.size() == 0 ? kj::strTree() : kj::strTree(
makeBrandDepInitializers(templateContext, schema.getGeneric()), ";\n" "const ::capnp::_::RawBrandedSchema::Dependency bd_", hexId, "[] = ", kj::mv(brandDeps), ";\n"),
"const ::capnp::_::RawSchema s_", hexId, " = {\n" "const ::capnp::_::RawSchema s_", hexId, " = {\n"
" 0x", hexId, ", b_", hexId, ".words, ", rawSchema.size(), ", ", " 0x", hexId, ", b_", hexId, ".words, ", rawSchema.size(), ", ",
deps.size() == 0 ? kj::strTree("nullptr") : kj::strTree("d_", hexId), ", ", deps.size() == 0 ? kj::strTree("nullptr") : kj::strTree("d_", hexId), ", ",
membersByName.size() == 0 ? kj::strTree("nullptr") : kj::strTree("m_", hexId), ",\n", membersByName.size() == 0 ? kj::strTree("nullptr") : kj::strTree("m_", hexId), ",\n",
" ", deps.size(), ", ", membersByName.size(), ", ", " ", deps.size(), ", ", membersByName.size(), ", ",
membersByDiscrim.size() == 0 ? kj::strTree("nullptr") : kj::strTree("i_", hexId), membersByDiscrim.size() == 0 ? kj::strTree("nullptr") : kj::strTree("i_", hexId),
", nullptr, nullptr, { &s_", hexId, ", nullptr, bd_", hexId, ", 0, " ", nullptr, nullptr, { &s_", hexId, ", nullptr, ",
"sizeof(bd_", hexId, ") / sizeof(bd_", hexId, "[0]), nullptr }\n" brandDeps.size() == 0 ? kj::strTree("nullptr, 0, 0") : kj::strTree(
"bd_", hexId, ", 0, " "sizeof(bd_", hexId, ") / sizeof(bd_", hexId, "[0])"),
", nullptr }\n"
"};\n" "};\n"
"#endif // !CAPNP_LITE\n"); "#endif // !CAPNP_LITE\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment