diff options
Diffstat (limited to 'xsde/cxx/hybrid/serializer-source.cxx')
-rw-r--r-- | xsde/cxx/hybrid/serializer-source.cxx | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/xsde/cxx/hybrid/serializer-source.cxx b/xsde/cxx/hybrid/serializer-source.cxx index b035246..0aeaf89 100644 --- a/xsde/cxx/hybrid/serializer-source.cxx +++ b/xsde/cxx/hybrid/serializer-source.cxx @@ -1222,28 +1222,28 @@ namespace CXX } os << "}"; + } - // reset - // - if (reset) - { - os << "void " << name << "::" << endl - << "_reset ()" - << "{"; + // reset + // + if (reset && (rec || (mixin && recursive_base (c)))) + { + os << "void " << name << "::" << endl + << "_reset ()" + << "{"; - if (mixin && hb) - os << esimpl (c); - else - os << esskel (c); + if (mixin && hb) + os << esimpl (c.inherits ().base ()) << "::_reset ();"; - os << "::_reset ();"; + os << esskel (c) << "::_reset ();"; + if (rec) os << "for (; !this->" << state << ".empty (); " << "this->" << state << ".pop ()) ;"; // Space is for g++-4.3. - os << "}"; - } + os << "}"; } + } private: |