summaryrefslogtreecommitdiff
path: root/xsd/xsd/cxx/tree/counter.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsd/xsd/cxx/tree/counter.cxx')
-rw-r--r--xsd/xsd/cxx/tree/counter.cxx23
1 files changed, 14 insertions, 9 deletions
diff --git a/xsd/xsd/cxx/tree/counter.cxx b/xsd/xsd/cxx/tree/counter.cxx
index 94bcc87..3fee0b1 100644
--- a/xsd/xsd/cxx/tree/counter.cxx
+++ b/xsd/xsd/cxx/tree/counter.cxx
@@ -241,18 +241,23 @@ namespace CXX
schema >> sources >> schema;
- Traversal::Names schema_names;
- Traversal::Namespace ns;
- Traversal::Names ns_names;
- GlobalType global_type (ctx, counts);
- GlobalElement global_element (ctx, counts);
+ // The GlobalElement object destructor updates the counts, so make sure
+ // that this object is destroyed before we return the counts.
+ //
+ {
+ Traversal::Names schema_names;
+ Traversal::Namespace ns;
+ Traversal::Names ns_names;
+ GlobalType global_type (ctx, counts);
+ GlobalElement global_element (ctx, counts);
- schema >> schema_names >> ns >> ns_names;
+ schema >> schema_names >> ns >> ns_names;
- ns_names >> global_element;
- ns_names >> global_type;
+ ns_names >> global_element;
+ ns_names >> global_type;
- schema.dispatch (tu);
+ schema.dispatch (tu);
+ }
return counts;
}