aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/hybrid/serializer-source.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsde/cxx/hybrid/serializer-source.cxx')
-rw-r--r--xsde/cxx/hybrid/serializer-source.cxx28
1 files changed, 27 insertions, 1 deletions
diff --git a/xsde/cxx/hybrid/serializer-source.cxx b/xsde/cxx/hybrid/serializer-source.cxx
index fa613d4..178dc73 100644
--- a/xsde/cxx/hybrid/serializer-source.cxx
+++ b/xsde/cxx/hybrid/serializer-source.cxx
@@ -1383,7 +1383,7 @@ namespace CXX
}
Void
- generate_serializer_source (Context& ctx)
+ generate_serializer_source (Context& ctx, Regex const& hxx_obj_expr)
{
if (ctx.poly_code && !ctx.stl)
ctx.os << "#include <string.h>" << endl
@@ -1399,6 +1399,32 @@ namespace CXX
<< endl;
}
+ {
+ // Emit "weak" header includes for the object model types.
+ // Otherwise they will only be forward-declared.
+ //
+ Traversal::Schema schema;
+ Includes includes (ctx, Includes::source, &hxx_obj_expr);
+
+ schema >> includes;
+
+ schema.dispatch (ctx.schema_root);
+ }
+
+ if (ctx.poly_code)
+ {
+ // Also emit "weak" header includes for the serializer
+ // implementations. These are needed for the _static_type if we are
+ // generating polymorphic code.
+ //
+ Traversal::Schema schema;
+ Includes includes (ctx, Includes::source);
+
+ schema >> includes;
+
+ schema.dispatch (ctx.schema_root);
+ }
+
Traversal::Schema schema;
Traversal::Sources sources;