summaryrefslogtreecommitdiff
path: root/xsd/cxx/tree/generator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsd/cxx/tree/generator.cxx')
-rw-r--r--xsd/cxx/tree/generator.cxx23
1 files changed, 23 insertions, 0 deletions
diff --git a/xsd/cxx/tree/generator.cxx b/xsd/cxx/tree/generator.cxx
index 012a1fd..a70214c 100644
--- a/xsd/cxx/tree/generator.cxx
+++ b/xsd/cxx/tree/generator.cxx
@@ -10,6 +10,7 @@
#include <cxx/tree/counter.hxx>
#include <cxx/tree/validator.hxx>
#include <cxx/tree/name-processor.hxx>
+#include <cxx/tree/polymorphism-processor.hxx>
#include <cxx/tree/tree-forward.hxx>
#include <cxx/tree/tree-header.hxx>
@@ -119,6 +120,8 @@ namespace CXX
extern Key char_encoding = "char-encoding";
extern Key output_dir = "output-dir";
extern Key generate_polymorphic = "generate-polymorphic";
+ extern Key polymorphic_type = "polymorphic-type";
+ extern Key polymorphic_type_all = "polymorphic-type-all";
extern Key generate_serialization = "generate-serialization";
extern Key generate_inline = "generate-inline";
extern Key generate_ostream = "generate-ostream";
@@ -239,6 +242,16 @@ namespace CXX
<< " option if you use substitution groups or xsi:type."
<< endl;
+ e << "--polymorphic-type <type>" << endl
+ << " Indicate that <type> is a root of a polymorphic\n"
+ << " type hierarchy."
+ << endl;
+
+ e << "--polymorphic-type-all" << endl
+ << " Indicate that all types should be treated as\n"
+ << " polymorphic."
+ << endl;
+
e << "--generate-serialization" << endl
<< " Generate serialization functions. They convert an\n"
<< " in-memory representation back to XML."
@@ -878,6 +891,16 @@ namespace CXX
throw Failed ();
}
+ // Process polymorphic types.
+ //
+ if (ops.value<CLI::generate_polymorphic> () &&
+ !ops.value<CLI::polymorphic_type_all> ())
+ {
+ PolymorphismProcessor proc;
+ if (!proc.process (ops, schema, file_path, disabled_warnings))
+ throw Failed ();
+ }
+
// Parts.
//
UnsignedLong parts (ops.value<CLI::parts> ());