summaryrefslogtreecommitdiff
path: root/xsd/xsd/cxx/tree/parser-source.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsd/xsd/cxx/tree/parser-source.cxx')
-rw-r--r--xsd/xsd/cxx/tree/parser-source.cxx151
1 files changed, 62 insertions, 89 deletions
diff --git a/xsd/xsd/cxx/tree/parser-source.cxx b/xsd/xsd/cxx/tree/parser-source.cxx
index 7291cb8..c93368c 100644
--- a/xsd/xsd/cxx/tree/parser-source.cxx
+++ b/xsd/xsd/cxx/tree/parser-source.cxx
@@ -1,6 +1,5 @@
// file : xsd/cxx/tree/parser-source.cxx
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <cxx/tree/parser-source.hxx>
@@ -23,7 +22,7 @@ namespace CXX
{
}
- virtual Void
+ virtual void
traverse (Type& e)
{
if (!doc_root_p (e))
@@ -38,9 +37,11 @@ namespace CXX
// confused if the name is 'type'. (see tests/schema/anonymous)
//
+ char const* d (std >= cxx_version::cxx11 ? "std::move (d)" : "d");
+
// URI.
//
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (const " << string_type << "& u," << endl
<< flags_type << " f," << endl
<< "const " << properties_type << "& p)"
@@ -56,22 +57,20 @@ namespace CXX
<< "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl
<< "u, h, p, f";
- if (options.value<CLI::disable_multi_import> ())
+ if (options.disable_multi_import ())
os << " | ::xsd::cxx::xml::dom::no_muliple_imports";
- os << "));"
+ os << "));"
<< endl
<< "h.throw_if_failed< ::xsd::cxx::tree::parsing< " <<
char_type << " > > ();"
<< endl
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << "return " << auto_ptr << "< " << type << " > (" << endl
<< fq_name (e, "parser") << " (" << endl
- << "d, f | " << flags_type << "::own_dom, p));"
- << endl
- << "return r;"
+ << d << ", f | " << flags_type << "::own_dom, p));"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (const " << string_type << "& u," << endl
<< error_handler << "& h," << endl
<< flags_type << " f," << endl
@@ -86,7 +85,7 @@ namespace CXX
<< "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl
<< "u, h, p, f";
- if (options.value<CLI::disable_multi_import> ())
+ if (options.disable_multi_import ())
os << " | ::xsd::cxx::xml::dom::no_muliple_imports";
os << "));"
@@ -94,14 +93,12 @@ namespace CXX
<< "if (!d.get ())" << endl
<< "throw ::xsd::cxx::tree::parsing< " << char_type << " > ();"
<< endl
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << "return " << auto_ptr << "< " << type << " > (" << endl
<< fq_name (e, "parser") << " (" << endl
- << "d, f | " << flags_type << "::own_dom, p));"
- << endl
- << "return r;"
+ << d << ", f | " << flags_type << "::own_dom, p));"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (const " << string_type << "& u," << endl
<< xerces_ns << "::DOMErrorHandler& h," << endl
<< flags_type << " f," << endl
@@ -112,7 +109,7 @@ namespace CXX
<< "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl
<< "u, h, p, f";
- if (options.value<CLI::disable_multi_import> ())
+ if (options.disable_multi_import ())
os << " | ::xsd::cxx::xml::dom::no_muliple_imports";
os << "));"
@@ -120,17 +117,15 @@ namespace CXX
<< "if (!d.get ())" << endl
<< "throw ::xsd::cxx::tree::parsing< " << char_type << " > ();"
<< endl
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << "return " << auto_ptr << "< " << type << " > (" << endl
<< fq_name (e, "parser") << " (" << endl
- << "d, f | " << flags_type << "::own_dom, p));"
- << endl
- << "return r;"
+ << d << ", f | " << flags_type << "::own_dom, p));"
<< "}";
// istream
//
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (::std::istream& is," << endl
<< flags_type << " f," << endl
<< "const " << properties_type << "& p)"
@@ -143,7 +138,7 @@ namespace CXX
<< "return " << fq_name (e, "parser") << " (isrc, f, p);"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (::std::istream& is," << endl
<< error_handler << "& h," << endl
<< flags_type << " f," << endl
@@ -157,7 +152,7 @@ namespace CXX
<< "return " << fq_name (e, "parser") << " (isrc, h, f, p);"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (::std::istream& is," << endl
<< xerces_ns << "::DOMErrorHandler& h," << endl
<< flags_type << " f," << endl
@@ -167,7 +162,7 @@ namespace CXX
<< "return " << fq_name (e, "parser") << " (isrc, h, f, p);"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (::std::istream& is," << endl
<< "const " << string_type << "& sid," << endl
<< flags_type << " f," << endl
@@ -181,7 +176,7 @@ namespace CXX
<< "return " << fq_name (e, "parser") << " (isrc, f, p);"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (::std::istream& is," << endl
<< "const " << string_type << "& sid," << endl
<< error_handler << "& h," << endl
@@ -196,7 +191,7 @@ namespace CXX
<< "return " << fq_name (e, "parser") << " (isrc, h, f, p);"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (::std::istream& is," << endl
<< "const " << string_type << "& sid," << endl
<< xerces_ns << "::DOMErrorHandler& h," << endl
@@ -210,7 +205,7 @@ namespace CXX
// InputSource.
//
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (" << xerces_ns << "::InputSource& i," << endl
<< flags_type << " f," << endl
<< "const " << properties_type << "& p)"
@@ -222,7 +217,7 @@ namespace CXX
<< "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl
<< "i, h, p, f";
- if (options.value<CLI::disable_multi_import> ())
+ if (options.disable_multi_import ())
os << " | ::xsd::cxx::xml::dom::no_muliple_imports";
os << "));"
@@ -230,14 +225,12 @@ namespace CXX
<< "h.throw_if_failed< ::xsd::cxx::tree::parsing< " <<
char_type << " > > ();"
<< endl
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << "return " << auto_ptr << "< " << type << " > (" << endl
<< fq_name (e, "parser") << " (" << endl
- << "d, f | " << flags_type << "::own_dom, p));"
- << endl
- << "return r;"
+ << d << ", f | " << flags_type << "::own_dom, p));"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (" << xerces_ns << "::InputSource& i," << endl
<< error_handler << "& h," << endl
<< flags_type << " f," << endl
@@ -248,7 +241,7 @@ namespace CXX
<< "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl
<< "i, h, p, f";
- if (options.value<CLI::disable_multi_import> ())
+ if (options.disable_multi_import ())
os << " | ::xsd::cxx::xml::dom::no_muliple_imports";
os << "));"
@@ -256,15 +249,13 @@ namespace CXX
<< "if (!d.get ())" << endl
<< "throw ::xsd::cxx::tree::parsing< " << char_type << " > ();"
<< endl
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << "return " << auto_ptr << "< " << type << " > (" << endl
<< fq_name (e, "parser") << " (" << endl
- << "d, f | " << flags_type << "::own_dom, p));"
- << endl
- << "return r;"
+ << d << ", f | " << flags_type << "::own_dom, p));"
<< "}";
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (" << xerces_ns << "::InputSource& i," << endl
<< xerces_ns << "::DOMErrorHandler& h," << endl
<< flags_type << " f," << endl
@@ -275,7 +266,7 @@ namespace CXX
<< "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl
<< "i, h, p, f";
- if (options.value<CLI::disable_multi_import> ())
+ if (options.disable_multi_import ())
os << " | ::xsd::cxx::xml::dom::no_muliple_imports";
os << "));"
@@ -283,18 +274,16 @@ namespace CXX
<< "if (!d.get ())" << endl
<< "throw ::xsd::cxx::tree::parsing< " << char_type << " > ();"
<< endl
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << "return " << auto_ptr << "< " << type << " > (" << endl
<< fq_name (e, "parser") << " (" << endl
- << "d, f | " << flags_type << "::own_dom, p));"
- << endl
- << "return r;"
+ << d << ", f | " << flags_type << "::own_dom, p));"
<< "}";
// DOM.
//
- Boolean fund (false);
+ bool fund (false);
{
IsFundamentalType test (fund);
test.dispatch (t);
@@ -304,44 +293,36 @@ namespace CXX
// If this element's type is anonymous then we don't need to do
// anything.
//
- Boolean poly (polymorphic && polymorphic_p (t) && !anonymous_p (t));
+ bool poly (polymorphic && polymorphic_p (t) && !anonymous_p (t));
// const DOMDocument&
//
- os << "::std::auto_ptr< " << type << " >" << endl
- << name << " (const " << xerces_ns << "::DOMDocument& d," << endl
+ os << auto_ptr << "< " << type << " >" << endl
+ << name << " (const " << xerces_ns << "::DOMDocument& doc," << endl
<< flags_type << " f," << endl
<< "const " << properties_type << "& p)"
<< "{"
<< "if (f & " << flags_type << "::keep_dom)"
<< "{"
<< dom_auto_ptr << "< " << xerces_ns <<
- "::DOMDocument > c (" << endl
+ "::DOMDocument > d (" << endl
<< "static_cast< " << xerces_ns <<
- "::DOMDocument* > (d.cloneNode (true)));"
+ "::DOMDocument* > (doc.cloneNode (true)));"
<< endl
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << "return " << auto_ptr << "< " << type << " > (" << endl
<< fq_name (e, "parser") << " (" << endl
- << "c, f | " << flags_type << "::own_dom, p));"
- << endl
- << "return r;"
+ << d << ", f | " << flags_type << "::own_dom, p));"
<< "}"
- << "const " << xerces_ns << "::DOMElement& e (*d.getDocumentElement ());"
+ << "const " << xerces_ns << "::DOMElement& e (*doc.getDocumentElement ());"
<< "const " << qname_type << " n (" << endl
<< "::xsd::cxx::xml::dom::name< " << char_type << " > (e));"
<< endl;
if (poly)
{
- // aCC cannot handle an inline call to type_factory_map_instance.
- //
- os << "::xsd::cxx::tree::type_factory_map< " << char_type <<
- " >& tfm (" << endl
- << "::xsd::cxx::tree::type_factory_map_instance< 0, " <<
- char_type << " > ());"
- << endl
- << "::std::auto_ptr< ::xsd::cxx::tree::type > tmp (" << endl
- << "tfm.create (" << endl
+ os << auto_ptr << "< ::xsd::cxx::tree::type > tmp (" << endl
+ << "::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
@@ -349,7 +330,7 @@ namespace CXX
<< endl
<< "if (tmp.get () != 0)"
<< "{"
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << auto_ptr << "< " << type << " > r (" << endl
<< "dynamic_cast< " << type << "* > (tmp.get ()));"
<< endl
<< "if (r.get ())" << endl
@@ -367,7 +348,7 @@ namespace CXX
if (fund)
{
- os << "::std::auto_ptr< " << type << " > r (" << endl
+ os << auto_ptr << "< " << type << " > r (" << endl
<< "new " << type << " (" << endl
<< "::xsd::cxx::tree::traits< " << type << ", " <<
char_type;
@@ -382,7 +363,7 @@ namespace CXX
}
else
{
- os << "::std::auto_ptr< " << type << " > r (" << endl
+ os << auto_ptr << "< " << type << " > r (" << endl
<< "::xsd::cxx::tree::traits< " << type << ", " <<
char_type << " >::create (" << endl
<< "e, f, 0));";
@@ -400,11 +381,11 @@ namespace CXX
<< "}";
- // dom::auto_ptr<DOMDocument>
+ // dom::auto_ptr/unique_ptr<DOMDocument>
//
- os << "::std::auto_ptr< " << type << " >" << endl
+ os << auto_ptr << "< " << type << " >" << endl
<< name << " (" << dom_auto_ptr << "< " << xerces_ns <<
- "::DOMDocument >& d," << endl
+ "::DOMDocument > d," << endl
<< flags_type << " f," << endl
<< "const " << properties_type << "&)"
<< "{"
@@ -431,15 +412,9 @@ namespace CXX
if (poly)
{
- // aCC cannot handle an inline call to type_factory_map_instance.
- //
- os << "::xsd::cxx::tree::type_factory_map< " << char_type <<
- " >& tfm (" << endl
- << "::xsd::cxx::tree::type_factory_map_instance< 0, " <<
- char_type << " > ());"
- << endl
- << "::std::auto_ptr< ::xsd::cxx::tree::type > tmp (" << endl
- << "tfm.create (" << endl
+ os << auto_ptr << "< ::xsd::cxx::tree::type > tmp (" << endl
+ << "::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
@@ -456,7 +431,7 @@ namespace CXX
if (fund)
{
- os << "::std::auto_ptr< " << type << " > r (" << endl
+ os << auto_ptr << "< " << type << " > r (" << endl
<< "new " << type << " (" << endl
<< "::xsd::cxx::tree::traits< " << type << ", " <<
char_type;
@@ -471,7 +446,7 @@ namespace CXX
}
else
{
- os << "::std::auto_ptr< " << type << " > r (" << endl
+ os << auto_ptr << "< " << type << " > r (" << endl
<< "::xsd::cxx::tree::traits< " << type << ", " <<
char_type << " >::create (" << endl
<< "e, f, 0));";
@@ -481,7 +456,7 @@ namespace CXX
if (poly)
{
os << endl
- << "::std::auto_ptr< " << type << " > r (" << endl
+ << auto_ptr << "< " << type << " > r (" << endl
<< "dynamic_cast< " << type << "* > (tmp.get ()));"
<< endl
<< "if (r.get ())" << endl
@@ -517,10 +492,8 @@ namespace CXX
};
}
- Void
- generate_parser_source (Context& ctx,
- UnsignedLong first,
- UnsignedLong last)
+ void
+ generate_parser_source (Context& ctx, size_t first, size_t last)
{
ctx.os << "#include <istream>" << endl
<< "#include <xsd/cxx/xml/sax/std-input-source.hxx>" << endl
@@ -528,7 +501,7 @@ namespace CXX
<< endl;
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx, first, last);
ElementFunction element (ctx);