aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-07-27 12:00:39 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-07-27 12:00:39 +0200
commit62cadf03af778b508bd684be19c6e6958b2fe52f (patch)
tree28564b6906ae65a26b810444d989b002939b9b0b
parentb8cd7bef48b9208223d061b4302c25dd3b09d413 (diff)
Make sure we don't process sourced schemas more than once
-rw-r--r--xsde/cxx/elements.hxx16
-rw-r--r--xsde/cxx/hybrid/extraction-header.cxx2
-rw-r--r--xsde/cxx/hybrid/extraction-source.cxx2
-rw-r--r--xsde/cxx/hybrid/insertion-header.cxx2
-rw-r--r--xsde/cxx/hybrid/insertion-source.cxx2
-rw-r--r--xsde/cxx/hybrid/parser-aggregate-header.cxx6
-rw-r--r--xsde/cxx/hybrid/parser-aggregate-source.cxx4
-rw-r--r--xsde/cxx/hybrid/parser-header.cxx2
-rw-r--r--xsde/cxx/hybrid/parser-name-processor.cxx2
-rw-r--r--xsde/cxx/hybrid/parser-source.cxx2
-rw-r--r--xsde/cxx/hybrid/serializer-aggregate-header.cxx6
-rw-r--r--xsde/cxx/hybrid/serializer-aggregate-source.cxx4
-rw-r--r--xsde/cxx/hybrid/serializer-header.cxx2
-rw-r--r--xsde/cxx/hybrid/serializer-name-processor.cxx2
-rw-r--r--xsde/cxx/hybrid/serializer-source.cxx2
-rw-r--r--xsde/cxx/hybrid/tree-forward.cxx2
-rw-r--r--xsde/cxx/hybrid/tree-header.cxx2
-rw-r--r--xsde/cxx/hybrid/tree-inline.cxx2
-rw-r--r--xsde/cxx/hybrid/tree-name-processor.cxx4
-rw-r--r--xsde/cxx/hybrid/tree-source.cxx2
-rw-r--r--xsde/cxx/hybrid/validator.cxx8
-rw-r--r--xsde/cxx/parser/attribute-validation-source.cxx2
-rw-r--r--xsde/cxx/parser/characters-validation-source.cxx2
-rw-r--r--xsde/cxx/parser/driver-source.cxx2
-rw-r--r--xsde/cxx/parser/element-validation-source.cxx4
-rw-r--r--xsde/cxx/parser/impl-header.cxx2
-rw-r--r--xsde/cxx/parser/impl-source.cxx2
-rw-r--r--xsde/cxx/parser/name-processor.cxx2
-rw-r--r--xsde/cxx/parser/parser-forward.cxx2
-rw-r--r--xsde/cxx/parser/parser-header.cxx2
-rw-r--r--xsde/cxx/parser/parser-inline.cxx2
-rw-r--r--xsde/cxx/parser/parser-source.cxx2
-rw-r--r--xsde/cxx/parser/state-processor.cxx2
-rw-r--r--xsde/cxx/parser/type-processor.cxx2
-rw-r--r--xsde/cxx/parser/validator.cxx6
-rw-r--r--xsde/cxx/serializer/attribute-validation-source.cxx2
-rw-r--r--xsde/cxx/serializer/driver-source.cxx2
-rw-r--r--xsde/cxx/serializer/element-validation-source.cxx2
-rw-r--r--xsde/cxx/serializer/impl-header.cxx2
-rw-r--r--xsde/cxx/serializer/impl-source.cxx2
-rw-r--r--xsde/cxx/serializer/name-processor.cxx2
-rw-r--r--xsde/cxx/serializer/serializer-forward.cxx2
-rw-r--r--xsde/cxx/serializer/serializer-header.cxx2
-rw-r--r--xsde/cxx/serializer/serializer-inline.cxx2
-rw-r--r--xsde/cxx/serializer/serializer-source.cxx2
-rw-r--r--xsde/cxx/serializer/type-processor.cxx2
-rw-r--r--xsde/cxx/serializer/validator.cxx6
-rw-r--r--xsde/processing/inheritance/processor.cxx19
48 files changed, 94 insertions, 63 deletions
diff --git a/xsde/cxx/elements.hxx b/xsde/cxx/elements.hxx
index b70433a..2816fea 100644
--- a/xsde/cxx/elements.hxx
+++ b/xsde/cxx/elements.hxx
@@ -8,6 +8,7 @@
#include <cult/types.hxx>
#include <cult/containers/map.hxx>
+#include <cult/containers/set.hxx>
#include <cult/containers/vector.hxx>
#include <backend-elements/regex.hxx>
@@ -432,6 +433,21 @@ namespace CXX
return 0;
}
+ // Sources traverser that goes into each schema only once.
+ //
+ struct Sources: Traversal::Sources
+ {
+ virtual void
+ traverse (SemanticGraph::Sources& s)
+ {
+ if (schemas_.insert (&s.schema ()).second)
+ Traversal::Sources::traverse (s);
+ }
+
+ private:
+ Cult::Containers::Set<SemanticGraph::Schema*> schemas_;
+ };
+
// Usual namespace mapping.
//
struct Namespace : Traversal::Namespace
diff --git a/xsde/cxx/hybrid/extraction-header.cxx b/xsde/cxx/hybrid/extraction-header.cxx
index c7dda53..3240f54 100644
--- a/xsde/cxx/hybrid/extraction-header.cxx
+++ b/xsde/cxx/hybrid/extraction-header.cxx
@@ -289,7 +289,7 @@ namespace CXX
generate_extraction_header (Context& ctx)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/extraction-source.cxx b/xsde/cxx/hybrid/extraction-source.cxx
index 2094340..8b314f5 100644
--- a/xsde/cxx/hybrid/extraction-source.cxx
+++ b/xsde/cxx/hybrid/extraction-source.cxx
@@ -1295,7 +1295,7 @@ namespace CXX
generate_extraction_source (Context& ctx)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/insertion-header.cxx b/xsde/cxx/hybrid/insertion-header.cxx
index 91f61c2..887b948 100644
--- a/xsde/cxx/hybrid/insertion-header.cxx
+++ b/xsde/cxx/hybrid/insertion-header.cxx
@@ -289,7 +289,7 @@ namespace CXX
generate_insertion_header (Context& ctx)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/insertion-source.cxx b/xsde/cxx/hybrid/insertion-source.cxx
index af76a05..0c034dc 100644
--- a/xsde/cxx/hybrid/insertion-source.cxx
+++ b/xsde/cxx/hybrid/insertion-source.cxx
@@ -758,7 +758,7 @@ namespace CXX
generate_insertion_source (Context& ctx)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/parser-aggregate-header.cxx b/xsde/cxx/hybrid/parser-aggregate-header.cxx
index bb953a2..986db36 100644
--- a/xsde/cxx/hybrid/parser-aggregate-header.cxx
+++ b/xsde/cxx/hybrid/parser-aggregate-header.cxx
@@ -973,7 +973,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
@@ -1011,7 +1011,7 @@ namespace CXX
if (ctx.poly_code)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
@@ -1028,7 +1028,7 @@ namespace CXX
// Generate code.
//
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/hybrid/parser-aggregate-source.cxx b/xsde/cxx/hybrid/parser-aggregate-source.cxx
index 3b4e183..a1d9bf3 100644
--- a/xsde/cxx/hybrid/parser-aggregate-source.cxx
+++ b/xsde/cxx/hybrid/parser-aggregate-source.cxx
@@ -464,7 +464,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
@@ -481,7 +481,7 @@ namespace CXX
if (gen)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/hybrid/parser-header.cxx b/xsde/cxx/hybrid/parser-header.cxx
index 4bb9b85..1e96dac 100644
--- a/xsde/cxx/hybrid/parser-header.cxx
+++ b/xsde/cxx/hybrid/parser-header.cxx
@@ -792,7 +792,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Includes includes (ctx, Includes::impl_header);
Traversal::Names schema_names;
diff --git a/xsde/cxx/hybrid/parser-name-processor.cxx b/xsde/cxx/hybrid/parser-name-processor.cxx
index 4bae7e7..99d11fa 100644
--- a/xsde/cxx/hybrid/parser-name-processor.cxx
+++ b/xsde/cxx/hybrid/parser-name-processor.cxx
@@ -768,7 +768,7 @@ namespace CXX
//
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/hybrid/parser-source.cxx b/xsde/cxx/hybrid/parser-source.cxx
index 2afa3cc..63afd43 100644
--- a/xsde/cxx/hybrid/parser-source.cxx
+++ b/xsde/cxx/hybrid/parser-source.cxx
@@ -2117,7 +2117,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/serializer-aggregate-header.cxx b/xsde/cxx/hybrid/serializer-aggregate-header.cxx
index 76b395e..07b24cd 100644
--- a/xsde/cxx/hybrid/serializer-aggregate-header.cxx
+++ b/xsde/cxx/hybrid/serializer-aggregate-header.cxx
@@ -986,7 +986,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
@@ -1024,7 +1024,7 @@ namespace CXX
if (ctx.poly_code)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
@@ -1041,7 +1041,7 @@ namespace CXX
// Generate code.
//
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/hybrid/serializer-aggregate-source.cxx b/xsde/cxx/hybrid/serializer-aggregate-source.cxx
index 5ba29bd..2a3deb0 100644
--- a/xsde/cxx/hybrid/serializer-aggregate-source.cxx
+++ b/xsde/cxx/hybrid/serializer-aggregate-source.cxx
@@ -463,7 +463,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
@@ -480,7 +480,7 @@ namespace CXX
if (gen)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/hybrid/serializer-header.cxx b/xsde/cxx/hybrid/serializer-header.cxx
index 7b20e5a..e78430d 100644
--- a/xsde/cxx/hybrid/serializer-header.cxx
+++ b/xsde/cxx/hybrid/serializer-header.cxx
@@ -697,7 +697,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Includes includes (ctx, Includes::impl_header);
Traversal::Names schema_names;
diff --git a/xsde/cxx/hybrid/serializer-name-processor.cxx b/xsde/cxx/hybrid/serializer-name-processor.cxx
index 4cd108a..b8cec72 100644
--- a/xsde/cxx/hybrid/serializer-name-processor.cxx
+++ b/xsde/cxx/hybrid/serializer-name-processor.cxx
@@ -776,7 +776,7 @@ namespace CXX
//
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/hybrid/serializer-source.cxx b/xsde/cxx/hybrid/serializer-source.cxx
index d2b6524..f116eea 100644
--- a/xsde/cxx/hybrid/serializer-source.cxx
+++ b/xsde/cxx/hybrid/serializer-source.cxx
@@ -1427,7 +1427,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/tree-forward.cxx b/xsde/cxx/hybrid/tree-forward.cxx
index 8b357fe..08d7fac 100644
--- a/xsde/cxx/hybrid/tree-forward.cxx
+++ b/xsde/cxx/hybrid/tree-forward.cxx
@@ -811,7 +811,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/tree-header.cxx b/xsde/cxx/hybrid/tree-header.cxx
index 17d951e..123b235 100644
--- a/xsde/cxx/hybrid/tree-header.cxx
+++ b/xsde/cxx/hybrid/tree-header.cxx
@@ -2981,7 +2981,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx, true);
diff --git a/xsde/cxx/hybrid/tree-inline.cxx b/xsde/cxx/hybrid/tree-inline.cxx
index 0607c22..748184c 100644
--- a/xsde/cxx/hybrid/tree-inline.cxx
+++ b/xsde/cxx/hybrid/tree-inline.cxx
@@ -2090,7 +2090,7 @@ namespace CXX
}
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/tree-name-processor.cxx b/xsde/cxx/hybrid/tree-name-processor.cxx
index 2efa1fc..a2d630d 100644
--- a/xsde/cxx/hybrid/tree-name-processor.cxx
+++ b/xsde/cxx/hybrid/tree-name-processor.cxx
@@ -2274,7 +2274,7 @@ namespace CXX
//
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
@@ -2293,7 +2293,7 @@ namespace CXX
//
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/hybrid/tree-source.cxx b/xsde/cxx/hybrid/tree-source.cxx
index a235bbe..dac6528 100644
--- a/xsde/cxx/hybrid/tree-source.cxx
+++ b/xsde/cxx/hybrid/tree-source.cxx
@@ -3239,7 +3239,7 @@ namespace CXX
<< endl;
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx);
diff --git a/xsde/cxx/hybrid/validator.cxx b/xsde/cxx/hybrid/validator.cxx
index 611dfe0..70d8b1c 100644
--- a/xsde/cxx/hybrid/validator.cxx
+++ b/xsde/cxx/hybrid/validator.cxx
@@ -199,7 +199,7 @@ namespace CXX
private:
Containers::Set<String> types_;
- Traversal::Sources sources_;
+ Sources sources_;
Traversal::Names schema_names_;
Traversal::Namespace ns_;
@@ -337,7 +337,7 @@ namespace CXX
Containers::Set<String> types_;
- Traversal::Sources sources_;
+ Sources sources_;
Traversal::Names schema_names_;
Traversal::Namespace ns_;
@@ -528,7 +528,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
@@ -569,7 +569,7 @@ namespace CXX
options.value<CLI::suppress_parser_val> ()))
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/parser/attribute-validation-source.cxx b/xsde/cxx/parser/attribute-validation-source.cxx
index 8a30e25..c82e8f0 100644
--- a/xsde/cxx/parser/attribute-validation-source.cxx
+++ b/xsde/cxx/parser/attribute-validation-source.cxx
@@ -449,7 +449,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/parser/characters-validation-source.cxx b/xsde/cxx/parser/characters-validation-source.cxx
index c07e031..f17b135 100644
--- a/xsde/cxx/parser/characters-validation-source.cxx
+++ b/xsde/cxx/parser/characters-validation-source.cxx
@@ -56,7 +56,7 @@ namespace CXX
//
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/parser/driver-source.cxx b/xsde/cxx/parser/driver-source.cxx
index 897c1ca..516b836 100644
--- a/xsde/cxx/parser/driver-source.cxx
+++ b/xsde/cxx/parser/driver-source.cxx
@@ -782,7 +782,7 @@ namespace CXX
SemanticGraph::Element* root (0);
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/parser/element-validation-source.cxx b/xsde/cxx/parser/element-validation-source.cxx
index 1ea9cab..e1216f7 100644
--- a/xsde/cxx/parser/element-validation-source.cxx
+++ b/xsde/cxx/parser/element-validation-source.cxx
@@ -2077,7 +2077,7 @@ namespace CXX
// In case of an inheritance-by-extension, call our base first.
// We don't need to generate this code for the 'all' compositor
// because it can only inherit from the empty content model.
- // Sattes of the root machine for sequence and choice:
+ // States of the root machine for sequence and choice:
//
// 0 - calling base
// 1 - base returned false
@@ -2292,7 +2292,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/parser/impl-header.cxx b/xsde/cxx/parser/impl-header.cxx
index 44a5b39..e909ce5 100644
--- a/xsde/cxx/parser/impl-header.cxx
+++ b/xsde/cxx/parser/impl-header.cxx
@@ -282,7 +282,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Includes includes (ctx, Includes::impl_header);
Traversal::Names schema_names;
diff --git a/xsde/cxx/parser/impl-source.cxx b/xsde/cxx/parser/impl-source.cxx
index 10c63a2..e9b87ca 100644
--- a/xsde/cxx/parser/impl-source.cxx
+++ b/xsde/cxx/parser/impl-source.cxx
@@ -518,7 +518,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/parser/name-processor.cxx b/xsde/cxx/parser/name-processor.cxx
index c3c2ec3..ab8f318 100644
--- a/xsde/cxx/parser/name-processor.cxx
+++ b/xsde/cxx/parser/name-processor.cxx
@@ -1287,7 +1287,7 @@ namespace CXX
//
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/parser/parser-forward.cxx b/xsde/cxx/parser/parser-forward.cxx
index 8d02cb9..f2ee20b 100644
--- a/xsde/cxx/parser/parser-forward.cxx
+++ b/xsde/cxx/parser/parser-forward.cxx
@@ -85,7 +85,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/parser/parser-header.cxx b/xsde/cxx/parser/parser-header.cxx
index 9d45b45..238b5e6 100644
--- a/xsde/cxx/parser/parser-header.cxx
+++ b/xsde/cxx/parser/parser-header.cxx
@@ -1899,7 +1899,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Includes includes (ctx, Includes::header);
Traversal::Names schema_names;
diff --git a/xsde/cxx/parser/parser-inline.cxx b/xsde/cxx/parser/parser-inline.cxx
index 774dc8d..ac8ae2a 100644
--- a/xsde/cxx/parser/parser-inline.cxx
+++ b/xsde/cxx/parser/parser-inline.cxx
@@ -919,7 +919,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/parser/parser-source.cxx b/xsde/cxx/parser/parser-source.cxx
index 68a2338..e7a4fe3 100644
--- a/xsde/cxx/parser/parser-source.cxx
+++ b/xsde/cxx/parser/parser-source.cxx
@@ -1642,7 +1642,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/parser/state-processor.cxx b/xsde/cxx/parser/state-processor.cxx
index cd46472..3caeb00 100644
--- a/xsde/cxx/parser/state-processor.cxx
+++ b/xsde/cxx/parser/state-processor.cxx
@@ -301,7 +301,7 @@ namespace CXX
process (SemanticGraph::Schema& tu, SemanticGraph::Path const&)
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Traversal::Namespace ns;
Traversal::Names ns_names;
diff --git a/xsde/cxx/parser/type-processor.cxx b/xsde/cxx/parser/type-processor.cxx
index 8b35250..07fa413 100644
--- a/xsde/cxx/parser/type-processor.cxx
+++ b/xsde/cxx/parser/type-processor.cxx
@@ -308,7 +308,7 @@ namespace CXX
//
Traversal::Schema schema;
Traversal::Schema xs_schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Implies implies;
schema >> sources >> schema;
diff --git a/xsde/cxx/parser/validator.cxx b/xsde/cxx/parser/validator.cxx
index da5caf1..08029e1 100644
--- a/xsde/cxx/parser/validator.cxx
+++ b/xsde/cxx/parser/validator.cxx
@@ -380,7 +380,7 @@ namespace CXX
private:
Containers::Set<String> types_;
- Traversal::Sources sources_;
+ Sources sources_;
Traversal::Names schema_names_;
Traversal::Namespace ns_;
@@ -525,7 +525,7 @@ namespace CXX
Containers::Set<String> types_;
- Traversal::Sources sources_;
+ Sources sources_;
Traversal::Names schema_names_;
Traversal::Namespace ns_;
@@ -688,7 +688,7 @@ namespace CXX
SemanticGraph::Element* element (0);
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/serializer/attribute-validation-source.cxx b/xsde/cxx/serializer/attribute-validation-source.cxx
index 8ff58a6..699d4c9 100644
--- a/xsde/cxx/serializer/attribute-validation-source.cxx
+++ b/xsde/cxx/serializer/attribute-validation-source.cxx
@@ -452,7 +452,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/serializer/driver-source.cxx b/xsde/cxx/serializer/driver-source.cxx
index 9390665..8ae20d8 100644
--- a/xsde/cxx/serializer/driver-source.cxx
+++ b/xsde/cxx/serializer/driver-source.cxx
@@ -781,7 +781,7 @@ namespace CXX
SemanticGraph::Element* root (0);
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/serializer/element-validation-source.cxx b/xsde/cxx/serializer/element-validation-source.cxx
index 06e2139..4be8db9 100644
--- a/xsde/cxx/serializer/element-validation-source.cxx
+++ b/xsde/cxx/serializer/element-validation-source.cxx
@@ -893,7 +893,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/serializer/impl-header.cxx b/xsde/cxx/serializer/impl-header.cxx
index 55107b6..93cd982 100644
--- a/xsde/cxx/serializer/impl-header.cxx
+++ b/xsde/cxx/serializer/impl-header.cxx
@@ -461,7 +461,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Includes includes (ctx, Includes::impl_header);
Traversal::Names schema_names;
diff --git a/xsde/cxx/serializer/impl-source.cxx b/xsde/cxx/serializer/impl-source.cxx
index d21c2d7..f03768d 100644
--- a/xsde/cxx/serializer/impl-source.cxx
+++ b/xsde/cxx/serializer/impl-source.cxx
@@ -639,7 +639,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/serializer/name-processor.cxx b/xsde/cxx/serializer/name-processor.cxx
index 4449ff2..cfe7a16 100644
--- a/xsde/cxx/serializer/name-processor.cxx
+++ b/xsde/cxx/serializer/name-processor.cxx
@@ -1378,7 +1378,7 @@ namespace CXX
//
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/cxx/serializer/serializer-forward.cxx b/xsde/cxx/serializer/serializer-forward.cxx
index 9b7ed42..1ee7f9a 100644
--- a/xsde/cxx/serializer/serializer-forward.cxx
+++ b/xsde/cxx/serializer/serializer-forward.cxx
@@ -85,7 +85,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/serializer/serializer-header.cxx b/xsde/cxx/serializer/serializer-header.cxx
index b66fab4..ea07ca5 100644
--- a/xsde/cxx/serializer/serializer-header.cxx
+++ b/xsde/cxx/serializer/serializer-header.cxx
@@ -2062,7 +2062,7 @@ namespace CXX
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Includes includes (ctx, Includes::header);
Traversal::Names schema_names;
diff --git a/xsde/cxx/serializer/serializer-inline.cxx b/xsde/cxx/serializer/serializer-inline.cxx
index d2481a2..ed3ec93 100644
--- a/xsde/cxx/serializer/serializer-inline.cxx
+++ b/xsde/cxx/serializer/serializer-inline.cxx
@@ -811,7 +811,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/serializer/serializer-source.cxx b/xsde/cxx/serializer/serializer-source.cxx
index 3fc74f0..39c4677 100644
--- a/xsde/cxx/serializer/serializer-source.cxx
+++ b/xsde/cxx/serializer/serializer-source.cxx
@@ -2727,7 +2727,7 @@ namespace CXX
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names schema_names;
Namespace ns (ctx);
diff --git a/xsde/cxx/serializer/type-processor.cxx b/xsde/cxx/serializer/type-processor.cxx
index 982cdb9..86a18aa 100644
--- a/xsde/cxx/serializer/type-processor.cxx
+++ b/xsde/cxx/serializer/type-processor.cxx
@@ -340,7 +340,7 @@ namespace CXX
//
Traversal::Schema schema;
Traversal::Schema xs_schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Implies implies;
schema >> sources >> schema;
diff --git a/xsde/cxx/serializer/validator.cxx b/xsde/cxx/serializer/validator.cxx
index 58a447b..9403437 100644
--- a/xsde/cxx/serializer/validator.cxx
+++ b/xsde/cxx/serializer/validator.cxx
@@ -196,7 +196,7 @@ namespace CXX
private:
Containers::Set<String> types_;
- Traversal::Sources sources_;
+ Sources sources_;
Traversal::Names schema_names_;
Traversal::Namespace ns_;
@@ -334,7 +334,7 @@ namespace CXX
Containers::Set<String> types_;
- Traversal::Sources sources_;
+ Sources sources_;
Traversal::Names schema_names_;
Traversal::Namespace ns_;
@@ -485,7 +485,7 @@ namespace CXX
SemanticGraph::Element* element (0);
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
diff --git a/xsde/processing/inheritance/processor.cxx b/xsde/processing/inheritance/processor.cxx
index 5900239..79615c3 100644
--- a/xsde/processing/inheritance/processor.cxx
+++ b/xsde/processing/inheritance/processor.cxx
@@ -422,6 +422,21 @@ namespace Processing
};
+ // Sources traverser that goes into each schema only once.
+ //
+ struct Sources: Traversal::Sources
+ {
+ virtual void
+ traverse (SemanticGraph::Sources& s)
+ {
+ if (schemas_.insert (&s.schema ()).second)
+ Traversal::Sources::traverse (s);
+ }
+
+ private:
+ Cult::Containers::Set<SemanticGraph::Schema*> schemas_;
+ };
+
// Go into included/imported schemas while making sure we don't
// process the same stuff more than once.
//
@@ -453,7 +468,7 @@ namespace Processing
if (!s.context ().count ("processing-inheritance-seen"))
{
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
schema >> sources >> schema;
schema >> *this;
@@ -492,7 +507,7 @@ namespace Processing
// rely on the order of types in the schema.
//
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Uses uses (tu, by_value_key, failed);
schema >> sources >> schema;