diff options
Diffstat (limited to 'TAO_IDL/be/be_visitor_interface/interface_cs.cpp')
-rw-r--r-- | TAO_IDL/be/be_visitor_interface/interface_cs.cpp | 100 |
1 files changed, 59 insertions, 41 deletions
diff --git a/TAO_IDL/be/be_visitor_interface/interface_cs.cpp b/TAO_IDL/be/be_visitor_interface/interface_cs.cpp index ad466d52b82..0cfcf428e3d 100644 --- a/TAO_IDL/be/be_visitor_interface/interface_cs.cpp +++ b/TAO_IDL/be/be_visitor_interface/interface_cs.cpp @@ -47,15 +47,15 @@ be_visitor_interface_cs::visit_interface (be_interface *node) AST_Component *c = AST_Component::narrow_from_decl (node); TAO_OutStream *os = this->ctx_->stream (); - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl + *os << be_nl_2 << "// TAO_IDL - Generated from" << be_nl << "// " << __FILE__ << ":" << __LINE__; if (node->is_defined ()) { - *os << be_nl << be_nl + *os << be_nl_2 << "// Traits specializations for " << node->name () << "."; - *os << be_nl << be_nl + *os << be_nl_2 << node->name () << "_ptr" << be_nl << "TAO::Objref_Traits<" << node->name () << ">::duplicate (" << be_idt << be_idt_nl @@ -64,16 +64,27 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "return " << node->name () << "::_duplicate (p);" << be_uidt_nl << "}"; - *os << be_nl << be_nl + *os << be_nl_2 << "void" << be_nl << "TAO::Objref_Traits<" << node->name () << ">::release (" << be_idt << be_idt_nl << node->name () << "_ptr p)" << be_uidt << be_uidt_nl - << "{" << be_idt_nl - << "::CORBA::release (p);" << be_uidt_nl - << "}"; + << "{" << be_idt_nl; - *os << be_nl << be_nl + // Workaround for broken HP V7.4-004 on OpenVMS IA83 + if (node->has_mixed_parentage ()) + { + *os << "::CORBA::AbstractBase_ptr abs = p;" << be_nl + << "::CORBA::release (abs);" << be_uidt_nl; + } + else + { + *os << "::CORBA::release (p);" << be_uidt_nl; + } + + *os << "}"; + + *os << be_nl_2 << node->name () << "_ptr" << be_nl << "TAO::Objref_Traits<" << node->name () << ">::nil (void)" << be_nl @@ -81,7 +92,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "return " << node->name () << "::_nil ();" << be_uidt_nl << "}"; - *os << be_nl << be_nl + *os << be_nl_2 << "::CORBA::Boolean" << be_nl << "TAO::Objref_Traits<" << node->name () << ">::marshal (" << be_idt << be_idt_nl @@ -90,14 +101,14 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "{" << be_idt_nl << "return "; - if (node->is_abstract () || c != 0) - { - *os << "cdr << p;"; - } - else - { - *os << "::CORBA::Object::marshal (p, cdr);"; - } + if (node->is_abstract () || c != 0) + { + *os << "cdr << p;"; + } + else + { + *os << "::CORBA::Object::marshal (p, cdr);"; + } *os << be_uidt_nl << "}"; @@ -105,7 +116,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) if (c == 0 && be_global->gen_ostream_operators ()) { - *os << be_nl << be_nl + *os << be_nl_2 << "std::ostream &" << be_nl << node->name () << "::_tao_stream_v (std::ostream &strm) const" << be_nl @@ -117,7 +128,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) if (node->has_mixed_parentage ()) { - *os << be_nl << be_nl + *os << be_nl_2 << "void" << be_nl << "CORBA::release (" << node->name () @@ -127,7 +138,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "::CORBA::release (abs);" << be_uidt_nl << "}"; - *os << be_nl << be_nl + *os << be_nl_2 << "::CORBA::Boolean" << be_nl << "CORBA::is_nil (" << node->name () @@ -142,7 +153,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) (be_global->gen_direct_collocation() || be_global->gen_thru_poa_collocation ())) { // Generate the proxy broker factory function pointer definition. - *os << be_nl << be_nl + *os << be_nl_2 << "// Function pointer for collocation factory initialization." << be_nl << "TAO::Collocation_Proxy_Broker * " << be_nl @@ -166,7 +177,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) if (node->is_local ()) { - *os << be_nl << be_nl + *os << be_nl_2 << node->name () << "::" << node->local_name () << " (void)" << be_nl << "{}"; @@ -174,7 +185,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) if (! node->is_abstract () && ! node->is_local ()) { - *os << be_nl << be_nl + *os << be_nl_2 << node->name () << "::" << node->local_name () << " (void)" << be_nl; @@ -197,7 +208,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) (be_global->gen_direct_collocation() || be_global->gen_thru_poa_collocation ())) { - *os << be_nl << be_nl + *os << be_nl_2 << "void" << be_nl << node->name () << "::" << node->flat_name () << "_setup_collocation ()" << be_nl @@ -248,10 +259,10 @@ be_visitor_interface_cs::visit_interface (be_interface *node) *os << be_uidt_nl << "}"; } - *os << be_nl << be_nl + *os << be_nl_2 << node->name () << "::~" << node->local_name () << " (void)" << be_nl; - *os << "{}" << be_nl << be_nl; + *os << "{}" << be_nl_2; bool gen_any_destructor = be_global->any_support () @@ -268,7 +279,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "static_cast<" << node->local_name () << " *> (_tao_void_pointer);" << be_uidt_nl << "::CORBA::release (_tao_tmp_pointer);" << be_uidt_nl - << "}" << be_nl << be_nl; + << "}" << be_nl_2; } if (node->has_mixed_parentage ()) @@ -278,7 +289,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "{" << be_idt_nl << "this->::CORBA::Object::_add_ref ();" << be_uidt_nl - << "}" << be_nl << be_nl; + << "}" << be_nl_2; } // The _narrow method @@ -302,6 +313,13 @@ be_visitor_interface_cs::visit_interface (be_interface *node) -1); } + // The _nil method + *os << node->full_name () << "_ptr" << be_nl + << node->full_name () << "::_nil (void)" + << be_nl + << "{" << be_idt_nl + << "return 0;" << be_uidt_nl + << "}" << be_nl_2; // The _duplicate method *os << node->full_name () << "_ptr" << be_nl @@ -314,7 +332,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "obj->_add_ref ();" << be_uidt_nl << "}" << be_uidt_nl << be_nl << "return obj;" << be_uidt_nl - << "}" << be_nl << be_nl; + << "}" << be_nl_2; // The _tao_release method if (c == 0) @@ -325,7 +343,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "_ptr obj)" << be_nl << "{" << be_idt_nl << "::CORBA::release (obj);" << be_uidt_nl - << "}" << be_nl << be_nl; + << "}" << be_nl_2; } *os << "::CORBA::Boolean" << be_nl @@ -337,7 +355,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "if (" << be_idt << be_idt_nl; int status = node->gen_is_a_ancestors (os); - + if (status == -1) { ACE_ERROR_RETURN ((LM_ERROR, @@ -346,7 +364,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) ACE_TEXT ("gen_is_a_ancestors() failed\n")), -1); } - + *os << ")" << be_uidt_nl << "{" << be_idt_nl << "return true; // success using local knowledge" << be_uidt_nl @@ -364,7 +382,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) } *os << "}" << be_uidt << be_uidt_nl - << "}" << be_nl << be_nl; + << "}" << be_nl_2; *os << "const char* " << node->full_name () << "::_interface_repository_id (void) const" @@ -373,10 +391,10 @@ be_visitor_interface_cs::visit_interface (be_interface *node) << "return \"" << node->repoID () << "\";" << be_uidt_nl << "}"; - + bool is_loc = node->is_local (); - *os << be_nl << be_nl + *os << be_nl_2 << "::CORBA::Boolean" << be_nl << node->name () << "::marshal (TAO_OutputCDR &" << (is_loc ? " /* " : "") << "cdr" @@ -460,7 +478,7 @@ be_visitor_interface_cs::gen_xxx_narrow (const char *pre, << "_ptr> (_tao_objref)" << be_uidt_nl << ");" << be_uidt << be_uidt_nl - << "}" << be_nl << be_nl; + << "}" << be_nl_2; return true; } @@ -468,7 +486,7 @@ be_visitor_interface_cs::gen_xxx_narrow (const char *pre, !node->is_abstract ()) { *os << node->full_name () << " *proxy = 0;" - << be_nl << be_nl + << be_nl_2 << "proxy = TAO::Narrow_Utils<" << node->local_name () << ">::" << pre << " ("; @@ -491,7 +509,7 @@ be_visitor_interface_cs::gen_xxx_narrow (const char *pre, << "return TAO_" << node->flat_name () << "_PROXY_FACTORY_ADAPTER::instance ()->create_proxy (proxy);" << be_uidt << be_uidt_nl - << "}" << be_nl << be_nl; + << "}" << be_nl_2; } else { @@ -524,7 +542,7 @@ be_visitor_interface_cs::gen_xxx_narrow (const char *pre, *os << "0" << be_uidt_nl; } *os << ");" << be_uidt << be_uidt << be_uidt_nl - << "}" << be_nl << be_nl; + << "}" << be_nl_2; } return true; @@ -553,7 +571,7 @@ be_visitor_interface_cs::visit_extended_port (be_extended_port *node) /// line to tell what scope we are actually in. this->ctx_->interface ( be_interface::narrow_from_scope (node->defined_in ())); - + /// Will ignore everything but porttype attributes. int status = this->visit_scope (node->port_type ()); @@ -582,7 +600,7 @@ be_visitor_interface_cs::visit_mirror_port (be_mirror_port *node) /// line to tell what scope we are actually in. this->ctx_->interface ( be_interface::narrow_from_scope (node->defined_in ())); - + /// Will ignore everything but porttype attributes. int status = this->visit_scope (node->port_type ()); |