diff options
author | gmaxey <gmaxey@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-07-27 23:21:12 +0000 |
---|---|---|
committer | gmaxey <gmaxey@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-07-27 23:21:12 +0000 |
commit | e6f553f7642b36f43609c98f4c0186b3367c9002 (patch) | |
tree | 4010ce178e508b39c62e5d12f9b8eb395b680519 | |
parent | 23c23227aca51739020550ef77938b9633aaa987 (diff) | |
download | ATCD-e6f553f7642b36f43609c98f4c0186b3367c9002.tar.gz |
ChangeLogTag: Wed Jul 27 15:59:54 2005 Gary Maxey <gary.maxey@hp.com>
-rw-r--r-- | TAO/ChangeLog | 20 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_interface/any_op_ch.cpp | 44 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_interface/any_op_cs.cpp | 80 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_interface_fwd/any_op_ch.cpp | 45 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_valuebox/any_op_ch.cpp | 47 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_valuebox/any_op_cs.cpp | 78 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_valuetype/any_op_ch.cpp | 47 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_valuetype/any_op_cs.cpp | 78 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_valuetype_fwd/any_op_ch.cpp | 46 |
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; } |