summaryrefslogtreecommitdiff
path: root/TAO_IDL/be/be_visitor_union/any_op_ch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO_IDL/be/be_visitor_union/any_op_ch.cpp')
-rw-r--r--TAO_IDL/be/be_visitor_union/any_op_ch.cpp46
1 files changed, 35 insertions, 11 deletions
diff --git a/TAO_IDL/be/be_visitor_union/any_op_ch.cpp b/TAO_IDL/be/be_visitor_union/any_op_ch.cpp
index 1de1131be30..a7fa30a73c1 100644
--- a/TAO_IDL/be/be_visitor_union/any_op_ch.cpp
+++ b/TAO_IDL/be/be_visitor_union/any_op_ch.cpp
@@ -40,11 +40,11 @@ be_visitor_union_any_op_ch::visit_union (be_union *node)
TAO_OutStream *os = this->ctx_->stream ();
const char *macro = this->ctx_->export_macro ();
- *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl
- << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
+ *os << be_nl_2 << "// TAO_IDL - Generated from" << be_nl
+ << "// " << __FILE__ << ":" << __LINE__ << be_nl_2;
be_module *module = 0;
-
+
AST_Decl *decl = node;
if (decl->is_nested ())
{
@@ -67,14 +67,14 @@ be_visitor_union_any_op_ch::visit_union (be_union *node)
"Error parsing nested name\n"),
-1);
}
-
+
// 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);
-
-
+
+
*os << macro << " void operator<<= (::CORBA::Any &, const ::" << node->name ()
<< " &); // copying version" << be_nl;
*os << macro << " void operator<<= (::CORBA::Any &, ::" << node->name ()
@@ -83,17 +83,17 @@ be_visitor_union_any_op_ch::visit_union (be_union *node)
<< node->name () << " *&); // deprecated\n";
*os << macro << " ::CORBA::Boolean operator>>= (const ::CORBA::Any &, const ::"
<< node->name () << " *&);";
-
+
be_util::gen_nested_namespace_end (os, module);
-
+
// Emit #else.
- *os << be_nl << be_nl
+ *os << be_nl_2
<< "#else\n\n";
}
}
*os << be_global->core_versioning_begin () << be_nl;
-
+
*os << macro << " void operator<<= (::CORBA::Any &, const " << node->name ()
<< " &); // copying version" << be_nl;
*os << macro << " void operator<<= (::CORBA::Any &, " << node->name ()
@@ -110,6 +110,30 @@ be_visitor_union_any_op_ch::visit_union (be_union *node)
*os << "\n\n#endif";
}
+ be_visitor_context ctx (*this->ctx_);
+ for (UTL_ScopeActiveIterator si (node, UTL_Scope::IK_localtypes);
+ !si.is_done ();
+ si.next ())
+ {
+ AST_Decl *d = si.item ();
+
+ be_enum *e = be_enum::narrow_from_decl (d);
+ if (e != 0)
+ {
+ be_visitor_enum_any_op_ch visitor (&ctx);
+
+ if (e->accept (&visitor) == -1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%N:%l) be_visitor_union_any_op_ch::visit_union"
+ " - codegen for enum failed\n"));
+ }
+
+ // Restore the union node in the enum visitor's context.
+ ctx.node (this->ctx_->node ());
+ }
+ }
+
if (this->visit_scope (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,