summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgmaxey <gmaxey@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2005-07-27 23:21:12 +0000
committergmaxey <gmaxey@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2005-07-27 23:21:12 +0000
commite6f553f7642b36f43609c98f4c0186b3367c9002 (patch)
tree4010ce178e508b39c62e5d12f9b8eb395b680519
parent23c23227aca51739020550ef77938b9633aaa987 (diff)
downloadATCD-e6f553f7642b36f43609c98f4c0186b3367c9002.tar.gz
ChangeLogTag: Wed Jul 27 15:59:54 2005 Gary Maxey <gary.maxey@hp.com>
-rw-r--r--TAO/ChangeLog20
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/any_op_ch.cpp44
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/any_op_cs.cpp80
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp45
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp47
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp78
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp47
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp78
-rw-r--r--TAO/TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp46
9 files changed, 485 insertions, 0 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 71c1f8f65a8..d5bfc8e78b0 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,23 @@
+Wed Jul 27 15:59:54 2005 Gary Maxey <gary.maxey@hp.com>
+
+ * TAO_IDL/be/be_visitor_interface/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_interface/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp
+ * TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp
+ * TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp
+
+ When generating Any insertion and extraction operators
+ conditionally put them in a namespace that corresponds to their
+ enclosing module (if any). Addresses problem reported in
+ Bugzilla report #2071. Since some compilers do not implement
+ symbol lookup correctly the changed code is controlled by the
+ ACE_ANY_OPS_USE_NAMESPACE macro. Use this macro in config*.h if
+ your compiler implements symbol lookup correctly. Without the
+ macro the IDL generated code is as it was.
+
Wed Jul 27 10:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
* tao/Wait_On_Leader_Follower.h:
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/any_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface/any_op_ch.cpp
index 711b6ce0527..0f8344a4477 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/any_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/any_op_ch.cpp
@@ -51,6 +51,45 @@ be_visitor_interface_any_op_ch::visit_interface (be_interface *node)
*os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
+ be_module *module = 0;
+
+ if (node->is_nested () &&
+ node->defined_in ()->scope_node_type () == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_scope (node->defined_in ());
+
+ if (!module)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_valuebox_any_op_ch::"
+ "visit_valuebox - "
+ "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);
+
+ // emit nested variation of any operators
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << "_ptr); // copying" << be_nl;
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << "_ptr *); // non-copying" << be_nl;
+ *os << be_global->stub_export_macro () << " CORBA::Boolean"
+ << " operator>>= (const CORBA::Any &, "
+ << node->local_name () << "_ptr &);";
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // emit #else
+ *os << "#else\n\n";
+ }
+
*os << be_global->stub_export_macro () << " void"
<< " operator<<= (CORBA::Any &, " << node->name ()
<< "_ptr); // copying" << be_nl;
@@ -61,6 +100,11 @@ be_visitor_interface_any_op_ch::visit_interface (be_interface *node)
<< " operator>>= (const CORBA::Any &, "
<< node->name () << "_ptr &);";
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
// All we have to do is to visit the scope and generate code.
if (this->visit_scope (node) == -1)
{
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/any_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_interface/any_op_cs.cpp
index 77fb39bd001..f69b345fa01 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/any_op_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/any_op_cs.cpp
@@ -120,6 +120,81 @@ be_visitor_interface_any_op_cs::visit_interface (be_interface *node)
<< "}";
}
+
+ be_module *module = 0;
+
+ if (node->is_nested () &&
+ node->defined_in ()->scope_node_type () == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_scope (node->defined_in ());
+
+ if (!module)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_valuebox_any_op_cs::"
+ "visit_valuebox - "
+ "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);
+
+ // emit nested variation of any operators
+ *os << be_nl << be_nl
+ << "// Copying insertion." << be_nl
+ << "void" << be_nl
+ << "operator<<= (" << be_idt << be_idt_nl
+ << "CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << "_ptr _tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << node->local_name () << "_ptr _tao_objptr =" << be_idt_nl
+ << node->local_name () << "::_duplicate (_tao_elem);" << be_uidt_nl
+ << "_tao_any <<= &_tao_objptr;" << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
+ *os << "// Non-copying insertion." << be_nl
+ << "void" << be_nl
+ << "operator<<= (" << be_idt << be_idt_nl
+ << "CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << "_ptr *_tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "TAO::Any_Impl_T<" << node->local_name () << ">::insert ("
+ << be_idt << be_idt_nl
+ << "_tao_any," << be_nl
+ << node->local_name () << "::_tao_any_destructor," << be_nl
+ << node->tc_name ()->last_component () << "," << be_nl
+ << "*_tao_elem" << be_uidt_nl
+ << ");" << be_uidt << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
+ *os << "CORBA::Boolean" << be_nl
+ << "operator>>= (" << be_idt << be_idt_nl
+ << "const CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << "_ptr &_tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "return" << be_idt_nl
+ << "TAO::Any_Impl_T<" << node->local_name () << ">::extract ("
+ << be_idt << be_idt_nl
+ << "_tao_any," << be_nl
+ << node->local_name () << "::_tao_any_destructor," << be_nl
+ << node->tc_name ()->last_component () << "," << be_nl
+ << "_tao_elem" << be_uidt_nl
+ << ");" << be_uidt << be_uidt << be_uidt_nl
+ << "}";
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // emit #else
+ *os << "#else\n";
+ }
+
*os << be_nl << be_nl
<< "// Copying insertion." << be_nl
<< "void" << be_nl
@@ -165,6 +240,11 @@ be_visitor_interface_any_op_cs::visit_interface (be_interface *node)
<< ");" << be_uidt << be_uidt << be_uidt_nl
<< "}";
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
// All we have to do is to visit the scope and generate code.
if (this->visit_scope (node) == -1)
{
diff --git a/TAO/TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp
index ee1f579dd58..5de4a020bf0 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp
@@ -62,6 +62,46 @@ be_visitor_interface_fwd_any_op_ch::visit_interface_fwd (be_interface_fwd *node)
*os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
+
+
+ be_module *module = 0;
+
+ if (node->is_nested () &&
+ node->defined_in ()->scope_node_type () == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_scope (node->defined_in ());
+
+ if (!module)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_valuebox_any_op_ch::"
+ "visit_valuebox - "
+ "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 << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << "_ptr); // copying" << be_nl;
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << "_ptr *); // non-copying" << be_nl;
+ *os << be_global->stub_export_macro () << " CORBA::Boolean"
+ << " operator>>= (const CORBA::Any &, "
+ << node->local_name () << " *&);";
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // emit #else
+ *os << "#else\n\n";
+ }
+
*os << be_global->stub_export_macro () << " void"
<< " operator<<= (CORBA::Any &, " << node->name ()
<< "_ptr); // copying" << be_nl;
@@ -72,6 +112,11 @@ be_visitor_interface_fwd_any_op_ch::visit_interface_fwd (be_interface_fwd *node)
<< " operator>>= (const CORBA::Any &, "
<< node->name () << " *&);";
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
node->cli_hdr_any_op_gen (1);
return 0;
}
diff --git a/TAO/TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp
index 8a752991f3e..eb2cdd2da41 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp
@@ -52,6 +52,48 @@ be_visitor_valuebox_any_op_ch::visit_valuebox (be_valuebox *node)
*os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
+
+ be_module *module = 0;
+
+ if (node->is_nested () &&
+ node->defined_in ()->scope_node_type () == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_scope (node->defined_in ());
+
+ if (!module)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_valuebox_any_op_ch::"
+ "visit_valuebox - "
+ "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);
+
+ // emit nested variation of any operators
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << " *); // copying" << be_nl;
+
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << " **); // non-copying" << be_nl;
+
+ *os << be_global->stub_export_macro () << " CORBA::Boolean"
+ << " operator>>= (const CORBA::Any &, "
+ << node->local_name () << " *&);";
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // emit #else
+ *os << "#else\n\n";
+ }
+
*os << be_global->stub_export_macro () << " void"
<< " operator<<= (CORBA::Any &, " << node->name ()
<< " *); // copying" << be_nl;
@@ -64,6 +106,11 @@ be_visitor_valuebox_any_op_ch::visit_valuebox (be_valuebox *node)
<< " operator>>= (const CORBA::Any &, "
<< node->name () << " *&);";
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
node->cli_hdr_any_op_gen (1);
return 0;
}
diff --git a/TAO/TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp
index 2a39ff48d3a..226edc52bd1 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp
@@ -73,6 +73,79 @@ be_visitor_valuebox_any_op_cs::visit_valuebox (be_valuebox *node)
<< "}" << be_uidt_nl
<< "}" << be_nl << be_nl;
+
+ be_module *module = 0;
+
+ if (node->is_nested () &&
+ node->defined_in ()->scope_node_type () == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_scope (node->defined_in ());
+
+ if (!module)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_valuebox_any_op_cs::"
+ "visit_valuebox - "
+ "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);
+
+ // emit nested variation of any operators
+ *os << "// Copying insertion." << be_nl
+ << "void" << be_nl
+ << "operator<<= (" << be_idt << be_idt_nl
+ << "CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << " *_tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "CORBA::add_ref (_tao_elem);" << be_nl
+ << "_tao_any <<= &_tao_elem;" << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
+ *os << "// Non-copying insertion." << be_nl
+ << "void" << be_nl
+ << "operator<<= (" << be_idt << be_idt_nl
+ << "CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << " **_tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "TAO::Any_Impl_T<" << node->local_name () << ">::insert ("
+ << be_idt << be_idt_nl
+ << "_tao_any," << be_nl
+ << node->local_name () << "::_tao_any_destructor," << be_nl
+ << node->tc_name ()->last_component () << "," << be_nl
+ << "*_tao_elem" << be_uidt_nl
+ << ");" << be_uidt << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
+ *os << "CORBA::Boolean" << be_nl
+ << "operator>>= (" << be_idt << be_idt_nl
+ << "const CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << " *&_tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "return" << be_idt_nl
+ << "TAO::Any_Impl_T<" << node->local_name () << ">::extract ("
+ << be_idt << be_idt_nl
+ << "_tao_any," << be_nl
+ << node->local_name () << "::_tao_any_destructor," << be_nl
+ << node->tc_name ()->last_component () << "," << be_nl
+ << "_tao_elem" << be_uidt_nl
+ << ");" << be_uidt << be_uidt << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // emit #else
+ *os << "#else\n\n";
+ }
+
*os << "// Copying insertion." << be_nl
<< "void" << be_nl
<< "operator<<= (" << be_idt << be_idt_nl
@@ -116,6 +189,11 @@ be_visitor_valuebox_any_op_cs::visit_valuebox (be_valuebox *node)
<< ");" << be_uidt << be_uidt << be_uidt_nl
<< "}" << be_nl << be_nl;
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
node->cli_stub_any_op_gen (1);
return 0;
}
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp
index 6245adb5ec3..b998dfb1404 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp
@@ -53,6 +53,48 @@ be_visitor_valuetype_any_op_ch::visit_valuetype (be_valuetype *node)
*os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
+
+ be_module *module = 0;
+
+ if (node->is_nested () &&
+ node->defined_in ()->scope_node_type () == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_scope (node->defined_in ());
+
+ if (!module)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_valuebox_any_op_ch::"
+ "visit_valuebox - "
+ "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);
+
+ // emit nested variation of any operators
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << " *); // copying" << be_nl;
+
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << " **); // non-copying" << be_nl;
+
+ *os << be_global->stub_export_macro () << " CORBA::Boolean"
+ << " operator>>= (const CORBA::Any &, "
+ << node->local_name () << " *&);";
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // emit #else
+ *os << "#else\n\n";
+ }
+
*os << be_global->stub_export_macro () << " void"
<< " operator<<= (CORBA::Any &, " << node->name ()
<< " *); // copying" << be_nl;
@@ -65,6 +107,11 @@ be_visitor_valuetype_any_op_ch::visit_valuetype (be_valuetype *node)
<< " operator>>= (const CORBA::Any &, "
<< node->name () << " *&);";
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
node->cli_hdr_any_op_gen (1);
return 0;
}
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp
index 3999a884d30..9b922610c3c 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp
@@ -74,6 +74,79 @@ be_visitor_valuetype_any_op_cs::visit_valuetype (be_valuetype *node)
<< "}" << be_uidt_nl
<< "}" << be_nl << be_nl;
+
+ be_module *module = 0;
+
+ if (node->is_nested () &&
+ node->defined_in ()->scope_node_type () == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_scope (node->defined_in ());
+
+ if (!module)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_valuebox_any_op_cs::"
+ "visit_valuebox - "
+ "Error parsing nested name\n"),
+ -1);
+ }
+
+ // Some compiler 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);
+
+ // emit nested variation of any operators
+ *os << "// Copying insertion." << be_nl
+ << "void" << be_nl
+ << "operator<<= (" << be_idt << be_idt_nl
+ << "CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << " *_tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "CORBA::add_ref (_tao_elem);" << be_nl
+ << "_tao_any <<= &_tao_elem;" << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
+ *os << "// Non-copying insertion." << be_nl
+ << "void" << be_nl
+ << "operator<<= (" << be_idt << be_idt_nl
+ << "CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << " **_tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "TAO::Any_Impl_T<" << node->local_name () << ">::insert ("
+ << be_idt << be_idt_nl
+ << "_tao_any," << be_nl
+ << node->local_name () << "::_tao_any_destructor," << be_nl
+ << node->tc_name ()->last_component () << "," << be_nl
+ << "*_tao_elem" << be_uidt_nl
+ << ");" << be_uidt << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
+ *os << "CORBA::Boolean" << be_nl
+ << "operator>>= (" << be_idt << be_idt_nl
+ << "const CORBA::Any &_tao_any," << be_nl
+ << node->local_name () << " *&_tao_elem" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "return" << be_idt_nl
+ << "TAO::Any_Impl_T<" << node->local_name () << ">::extract ("
+ << be_idt << be_idt_nl
+ << "_tao_any," << be_nl
+ << node->local_name () << "::_tao_any_destructor," << be_nl
+ << node->tc_name ()->last_component () << "," << be_nl
+ << "_tao_elem" << be_uidt_nl
+ << ");" << be_uidt << be_uidt << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // emit #else
+ *os << "#else\n";
+ }
+
*os << "// Copying insertion." << be_nl
<< "void" << be_nl
<< "operator<<= (" << be_idt << be_idt_nl
@@ -117,6 +190,11 @@ be_visitor_valuetype_any_op_cs::visit_valuetype (be_valuetype *node)
<< ");" << be_uidt << be_uidt << be_uidt_nl
<< "}" << be_nl << be_nl;
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
node->cli_stub_any_op_gen (1);
return 0;
}
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp
index 772bc543db3..8ac5a38e962 100644
--- a/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp
@@ -64,6 +64,47 @@ be_visitor_valuetype_fwd_any_op_ch::visit_valuetype_fwd (
*os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
+
+
+ be_module *module = 0;
+
+ if (node->is_nested () &&
+ node->defined_in ()->scope_node_type () == AST_Decl::NT_module)
+ {
+ module = be_module::narrow_from_scope (node->defined_in ());
+
+ if (!module)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_valuebox_any_op_ch::"
+ "visit_valuebox - "
+ "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);
+
+ // emit nested variation of any operators
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << " *); // copying" << be_nl;
+ *os << be_global->stub_export_macro () << " void"
+ << " operator<<= (CORBA::Any &, " << node->local_name ()
+ << " **); // non-copying" << be_nl;
+ *os << be_global->stub_export_macro () << " CORBA::Boolean"
+ << " operator>>= (const CORBA::Any &, "
+ << node->local_name () << " *&);";
+
+ be_util::gen_nested_namespace_end (os, module);
+
+ // emit #else
+ *os << "#else\n\n";
+ }
+
*os << be_global->stub_export_macro () << " void"
<< " operator<<= (CORBA::Any &, " << node->name ()
<< " *); // copying" << be_nl;
@@ -74,6 +115,11 @@ be_visitor_valuetype_fwd_any_op_ch::visit_valuetype_fwd (
<< " operator>>= (const CORBA::Any &, "
<< node->name () << " *&);";
+ if (module != 0)
+ {
+ *os << "\n\n#endif";
+ }
+
node->cli_hdr_any_op_gen (1);
return 0;
}