summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_enum/any_op_ch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_enum/any_op_ch.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_enum/any_op_ch.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_enum/any_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_enum/any_op_ch.cpp
index 79ddce9f48f..2761135062a 100644
--- a/TAO/TAO_IDL/be/be_visitor_enum/any_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_enum/any_op_ch.cpp
@@ -42,6 +42,50 @@ be_visitor_enum_any_op_ch::visit_enum (be_enum *node)
*os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl
<< "// " << __FILE__ << ":" << __LINE__;
+ be_module *module = 0;
+
+ if (node->is_nested ())
+ {
+ AST_Decl *d = node;
+ AST_Decl::NodeType nt = d->node_type ();
+
+ while (nt != AST_Decl::NT_root)
+ {
+ if (nt == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_decl (d);
+ break;
+ }
+ else
+ {
+ d = ScopeAsDecl (d->defined_in ());
+ nt = d->node_type ();
+ }
+ }
+
+ if (module != 0)
+ {
+ // Some compilers handle "any" operators in a namespace
+ // corresponding to their module, others do not.
+ *os << "\n\n#if defined (ACE_ANY_OPS_USE_NAMESPACE)\n";
+
+ be_util::gen_nested_namespace_begin (os, module);
+
+ // Generate the Any <<= and >>= operators.
+ *os << be_nl << be_nl
+ << macro << " void operator<<= (::CORBA::Any &, ::" << node->name ()
+ << ");" << be_nl;
+ *os << macro << " ::CORBA::Boolean operator>>= (const ::CORBA::Any &, ::"
+ << node->name () << " &);";
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // Emit #else.
+ *os << be_nl << be_nl
+ << "#else\n\n";
+ }
+ }
+
*os << be_global->core_versioning_begin () << be_nl;
// Generate the Any <<= and >>= operators.
@@ -53,6 +97,11 @@ be_visitor_enum_any_op_ch::visit_enum (be_enum *node)
*os << be_global->core_versioning_end () << be_nl;
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
node->cli_hdr_any_op_gen (1);
return 0;
}