summaryrefslogtreecommitdiff
path: root/xsd/xsd/cxx/tree/counter.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-12-19 17:12:05 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2021-02-25 13:45:49 +0300
commitfea8db080353e408a38ad9b66b50b1c9dfaf96de (patch)
tree19c060eb9d6b66104f3bff3e5ea940dd7441c74d /xsd/xsd/cxx/tree/counter.cxx
parent5e527213a2430bb3018e5eebd909aef294edf9b5 (diff)
Various fixes
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;
}