From c7a135cc66ab0270cebc04664dad7baa2e4c3818 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 14 Apr 2010 18:25:02 +0200 Subject: Handle type customization corner cases --- xsd/cxx/tree/name-processor.cxx | 15 ++++++++------- xsd/cxx/tree/tree-header.cxx | 4 +++- xsd/cxx/tree/tree-source.cxx | 4 +++- 3 files changed, 14 insertions(+), 9 deletions(-) (limited to 'xsd') diff --git a/xsd/cxx/tree/name-processor.cxx b/xsd/cxx/tree/name-processor.cxx index a9427a6..a563849 100644 --- a/xsd/cxx/tree/name-processor.cxx +++ b/xsd/cxx/tree/name-processor.cxx @@ -1067,6 +1067,12 @@ namespace CXX { SemanticGraph::Context& cc (c.context ()); + // We leave this set around to allow other mappings to use + // this information. + // + cc.set ("cxx-tree-name-processor-stem-set", NameSet ()); + cc.set ("cxx-tree-name-processor-member-set", NameSet ()); + // Use processed name. // String name (cc.get ("name")); @@ -1078,12 +1084,6 @@ namespace CXX if (renamed_type (c, name) && !name) return; - // We leave this set around to allow other mappings to use - // this information. - // - cc.set ("cxx-tree-name-processor-stem-set", NameSet ()); - cc.set ("cxx-tree-name-processor-member-set", NameSet ()); - NameSet& stem_set ( cc.get ("cxx-tree-name-processor-stem-set")); @@ -1102,7 +1102,8 @@ namespace CXX // SemanticGraph::Type& base (c.inherits ().base ()); - if (base.is_a ()) + if (base.is_a () && + !base.is_a ()) { if (!base.context ().count ( "cxx-tree-name-processor-member-set")) diff --git a/xsd/cxx/tree/tree-header.cxx b/xsd/cxx/tree/tree-header.cxx index 835a40f..65fdd65 100644 --- a/xsd/cxx/tree/tree-header.cxx +++ b/xsd/cxx/tree/tree-header.cxx @@ -2665,7 +2665,9 @@ namespace CXX if (string_based) { - if (enum_base != 0) + // We might not have the value type if this enum is customized. + // + if (enum_base != 0 && enum_base->context ().count ("value")) { // c-tor (enum-value, all-non-optional-members) // diff --git a/xsd/cxx/tree/tree-source.cxx b/xsd/cxx/tree/tree-source.cxx index 1fd31b2..fda9e63 100644 --- a/xsd/cxx/tree/tree-source.cxx +++ b/xsd/cxx/tree/tree-source.cxx @@ -2491,7 +2491,9 @@ namespace CXX if (string_based) { - if (enum_base != 0) + // We might not have the value type if this enum is customized. + // + if (enum_base != 0 && enum_base->context ().count ("value")) { // c-tor (enum-value, all-non-optional-members) // -- cgit v1.1