diff options
Diffstat (limited to 'xsde/cxx/hybrid/serializer-source.cxx')
-rw-r--r-- | xsde/cxx/hybrid/serializer-source.cxx | 28 |
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; |