From cc5cdb07e40f30e614bd15d81a5091faf717f4f4 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 30 Jul 2014 10:19:30 +0200 Subject: Add support for abstract complex types in C++/Tree --- xsd/cxx/tree/tree-source.cxx | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'xsd/cxx/tree/tree-source.cxx') diff --git a/xsd/cxx/tree/tree-source.cxx b/xsd/cxx/tree/tree-source.cxx index 8a01c5a..5720dbd 100644 --- a/xsd/cxx/tree/tree-source.cxx +++ b/xsd/cxx/tree/tree-source.cxx @@ -729,8 +729,16 @@ namespace CXX << strlit (e.name ()) << "," << endl << (e.qualified_p () ? strlit (e.namespace_ ().name ()) - : L + String ("\"\"")) << "," << endl - << "&::xsd::cxx::tree::factory_impl< " << type << " >," << endl + : L + String ("\"\"")) << "," << endl; + + SemanticGraph::Complex* tc; + if ((tc = dynamic_cast (&t)) != 0 && + tc->abstract_p ()) + os << "0,"; + else + os << "&::xsd::cxx::tree::factory_impl< " << type << " >,"; + + os << endl << (e.global_p () ? "true" : "false") << ", " << (e.qualified_p () ? "true" : "false") << ", " << "i, n, f, this));" @@ -3309,12 +3317,13 @@ namespace CXX // _clone // - os << name << "* " << name << "::" << endl - << "_clone (" << flags_type << " f," << endl - << container << "* c) const" - << "{" - << "return new class " << name << " (*this, f, c);" - << "}"; + if (!c.abstract_p ()) + os << name << "* " << name << "::" << endl + << "_clone (" << flags_type << " f," << endl + << container << "* c) const" + << "{" + << "return new class " << name << " (*this, f, c);" + << "}"; // operator= // @@ -3364,7 +3373,7 @@ namespace CXX // Register with type factory map. // - if (polymorphic && polymorphic_p (c)) + if (polymorphic && polymorphic_p (c) && !c.abstract_p ()) { // Note that we are using the original type name. // -- cgit v1.1