diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-03-03 20:10:52 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-03-03 20:10:52 +0200 |
commit | 3717fce14ff732658d542c13890b226c8367e272 (patch) | |
tree | fea72a29626249bdf2961ae7ce0fb15891ad41cd /xsd-frontend | |
parent | e4f4f0bed9befbde2117af6f128d9323be3f1638 (diff) |
Resolve anonymous bases in the multi-schema compilation
Also, resolve anonymous specialization arguments (list and union).
Diffstat (limited to 'xsd-frontend')
-rw-r--r-- | xsd-frontend/parser.cxx | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/xsd-frontend/parser.cxx b/xsd-frontend/parser.cxx index d40cda2..b9c76d2 100644 --- a/xsd-frontend/parser.cxx +++ b/xsd-frontend/parser.cxx @@ -599,6 +599,8 @@ namespace XSDFrontend valid_ = false; } } + + Traversal::List::traverse (l); } Void @@ -638,6 +640,8 @@ namespace XSDFrontend u.context ().remove ("union-member-types"); } + + Traversal::Union::traverse (u); } Void @@ -1979,9 +1983,11 @@ namespace XSDFrontend Traversal::Names names; Traversal::Inherits inherits; + Traversal::Argumented argumented; resolver >> names >> resolver; names >> anonymous_member; resolver >> inherits >> anonymous_base; + resolver >> argumented >> anonymous_base; if (trace_) wcout << "starting resolution pass" << endl; @@ -2201,12 +2207,34 @@ namespace XSDFrontend Traversal::Belongs belongs_; } anonymous_member (resolver); + struct AnonymousBase: Traversal::Type + { + AnonymousBase (Traversal::NodeDispatcherBase& d) + : base_ (d) + { + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + if (!t.named ()) + base_.dispatch (t); + } + + private: + Traversal::NodeDispatcherBase& base_; + } anonymous_base (resolver); + ns_names >> resolver; ns_names >> anonymous_member; Traversal::Names names; + Traversal::Inherits inherits; + Traversal::Argumented argumented; resolver >> names >> resolver; names >> anonymous_member; + resolver >> inherits >> anonymous_base; + resolver >> argumented >> anonymous_base; if (trace_) wcout << "starting resolution pass" << endl; |