From 83c0c33a8ee9d5d5a7c83d4285f4a32594cb6c3f Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sat, 13 Sep 2014 20:24:55 +0200 Subject: Don't instantiate factories for abstract types in parsing functions --- xsd/cxx/tree/parser-source.cxx | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/xsd/cxx/tree/parser-source.cxx b/xsd/cxx/tree/parser-source.cxx index c93368c..cf4d6cc 100644 --- a/xsd/cxx/tree/parser-source.cxx +++ b/xsd/cxx/tree/parser-source.cxx @@ -324,8 +324,16 @@ namespace CXX << "::xsd::cxx::tree::type_factory_map_instance< " << poly_plate << ", " << char_type << " > ().create (" << endl << strlit (e.name ()) << "," << endl - << strlit (e.namespace_().name ()) << "," << endl - << "&::xsd::cxx::tree::factory_impl< " << type << " >," << endl + << strlit (e.namespace_().name ()) << "," << 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 << "true, true, e, n, f, 0));" << endl << "if (tmp.get () != 0)" @@ -416,8 +424,16 @@ namespace CXX << "::xsd::cxx::tree::type_factory_map_instance< " << poly_plate << ", " << char_type << " > ().create (" << endl << strlit (e.name ()) << "," << endl - << strlit (e.namespace_().name ()) << "," << endl - << "&::xsd::cxx::tree::factory_impl< " << type << " >," << endl + << strlit (e.namespace_().name ()) << "," << 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 << "true, true, e, n, f, 0));" << endl << "if (tmp.get () != 0)" -- cgit v1.1