aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/hybrid/serializer-header.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsde/cxx/hybrid/serializer-header.cxx')
-rw-r--r--xsde/cxx/hybrid/serializer-header.cxx35
1 files changed, 35 insertions, 0 deletions
diff --git a/xsde/cxx/hybrid/serializer-header.cxx b/xsde/cxx/hybrid/serializer-header.cxx
index 20f4e15..db0578f 100644
--- a/xsde/cxx/hybrid/serializer-header.cxx
+++ b/xsde/cxx/hybrid/serializer-header.cxx
@@ -343,10 +343,40 @@ namespace CXX
//
//
+ struct PreOverride: Traversal::Complex, Context
+ {
+ PreOverride (Context& c)
+ : Context (c)
+ {
+ }
+
+ virtual Void
+ traverse (SemanticGraph::Complex& c)
+ {
+ if (c.inherits_p ())
+ {
+ SemanticGraph::Type& b (c.inherits ().base ());
+
+ if (polymorphic (b))
+ {
+ if (tiein)
+ dispatch (b);
+
+ os << "virtual void" << endl
+ << "pre (" << sarg_type (b) << ");"
+ << endl;
+ }
+ }
+ }
+ };
+
+ //
+ //
struct Complex : Traversal::Complex, Context
{
Complex (Context& c)
: Context (c),
+ pre_override_ (c),
// State.
//
@@ -422,6 +452,9 @@ namespace CXX
// pre
//
+ if (polymorphic (c))
+ pre_override_.dispatch (c);
+
os << "virtual void" << endl
<< "pre (" << arg << ");"
<< endl;
@@ -522,6 +555,8 @@ namespace CXX
}
private:
+ PreOverride pre_override_;
+
// State.
//
CompositorState compositor_state_;