From c0394bb09c4133ff6bdde593a302d20bc54fa08e Mon Sep 17 00:00:00 2001 From: Alec Theriault Date: Mon, 1 Nov 2021 14:26:36 -0400 Subject: [PATCH] Support `--conform` for vector of unions (#6883) It seems like `--conform` already works for vectors of unions - there is just a spurious check that prevents it from running. Fixes #6882 Also, if schemas do not conform, `flatc` no longer prints out the usage (since the error is not due to bad usage). Fixes #6496 --- src/flatc.cpp | 2 +- src/idl_parser.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/flatc.cpp b/src/flatc.cpp index fc3cc9221..ae2aa5548 100644 --- a/src/flatc.cpp +++ b/src/flatc.cpp @@ -519,7 +519,7 @@ int FlatCompiler::Compile(int argc, const char **argv) { } if ((is_schema || is_binary_schema) && !conform_to_schema.empty()) { auto err = parser->ConformTo(conform_parser); - if (!err.empty()) Error("schemas don\'t conform: " + err); + if (!err.empty()) Error("schemas don\'t conform: " + err, false); } if (schema_binary || opts.binary_schema_gen_embed) { parser->Serialize(); diff --git a/src/idl_parser.cpp b/src/idl_parser.cpp index a6fad123a..f100a6a99 100644 --- a/src/idl_parser.cpp +++ b/src/idl_parser.cpp @@ -2478,8 +2478,7 @@ bool Parser::SupportsDefaultVectorsAndStrings() const { } bool Parser::SupportsAdvancedUnionFeatures() const { - return opts.lang_to_generate != 0 && - (opts.lang_to_generate & + return (opts.lang_to_generate & ~(IDLOptions::kCpp | IDLOptions::kTs | IDLOptions::kPhp | IDLOptions::kJava | IDLOptions::kCSharp | IDLOptions::kKotlin | IDLOptions::kBinary | IDLOptions::kSwift)) == 0; @@ -3255,7 +3254,7 @@ CheckedError Parser::ParseRoot(const char *source, const char **include_paths, for (auto val_it = enum_def.Vals().begin(); val_it != enum_def.Vals().end(); ++val_it) { auto &val = **val_it; - if (!SupportsAdvancedUnionFeatures() && + if (!(opts.lang_to_generate != 0 && SupportsAdvancedUnionFeatures()) && (IsStruct(val.union_type) || IsString(val.union_type))) return Error( "only tables can be union elements in the generated language: " +