summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp161
1 files changed, 94 insertions, 67 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp
index 45ec707fa93..2b14e10b3cf 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp
@@ -108,8 +108,10 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
"be_visitor_interface_ss::visit_interface - "
" copy ctor generation failed\n"), -1);
*os << " TAO_ServantBase (rhs)" << be_uidt_nl
- << "{}\n" << be_nl;
+ << "{}\n";
+ // destructor
+ os->indent ();
*os << "// skeleton destructor" << be_nl;
if (!node->is_nested ())
@@ -125,7 +127,7 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
" (void)" << be_nl;
}
*os << "{\n";
- *os << "}\n\n";
+ *os << "}\n";
// generate code for elements in the scope (e.g., operations)
@@ -144,46 +146,45 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
<< "::_is_a_skel (" << be_idt << be_idt_nl
<< "CORBA::ServerRequest &_tao_server_request, " << be_nl
<< "void * _tao_object_reference," << be_nl
- << "void * /* context */," << be_nl
- << "CORBA::Environment &ACE_TRY_ENV" << be_uidt_nl
- << ")" << be_uidt_nl;
- *os << "{" << be_idt_nl;
- *os << "TAO_InputCDR &_tao_in = _tao_server_request.incoming ();" << be_nl;
- *os << node->full_skel_name () << " *_tao_impl = ("
- << node->full_skel_name () << " *) _tao_object_reference;" << be_nl;
- *os << "CORBA::Boolean _tao_retval = 0;" << be_nl;
- *os << "CORBA::String_var value;" << be_nl;
- *os << "if (!((_tao_in >> value.out ())))" << be_idt_nl;
- *os << "ACE_THROW (CORBA::MARSHAL ());" << be_uidt_nl << be_nl;
- *os << "_tao_retval = _tao_impl->_is_a (value.in (), ACE_TRY_ENV);" << be_nl;
- *os << "ACE_CHECK;" << be_nl << be_nl;
- *os << "_tao_server_request.init_reply (ACE_TRY_ENV);" << be_nl;
- *os << "ACE_CHECK;" << be_nl;
- *os << "TAO_OutputCDR &_tao_out = _tao_server_request.outgoing ();" << be_nl;
- *os << "if (!((_tao_out << CORBA::Any::from_boolean (_tao_retval))))" << be_idt_nl;
- *os << "ACE_THROW (CORBA::MARSHAL ());" << be_uidt << be_uidt_nl;
- *os << "}\n\n";
-
-
- // generate code for the _non_existent skeleton
- os->indent ();
- *os << "void " << node->full_skel_name ()
- << "::_non_existent_skel (" << be_idt << be_idt_nl
- << "CORBA::ServerRequest &_tao_server_request, " << be_nl
- << "void * _tao_object_reference," << be_nl
- << "void * /* context */," << be_nl
- << "CORBA::Environment &ACE_TRY_ENV" << be_uidt_nl
+ << "void * /*context*/," << be_nl
+ << "CORBA::Environment &_tao_environment" << be_uidt_nl
<< ")" << be_uidt_nl;
+ *os << "{\n";
+ os->incr_indent ();
+ *os << "static const TAO_Param_Data_Skel " << node->flatname ()
+ << "_is_a_paramdata [] = " << be_nl;
*os << "{" << be_idt_nl;
- *os << node->full_skel_name () << " *_tao_impl = ("
- << node->full_skel_name () << " *) _tao_object_reference;" << be_nl;
- *os << "CORBA::Boolean _tao_retval = _tao_impl->_non_existent (ACE_TRY_ENV);" << be_nl;
- *os << "ACE_CHECK;" << be_nl << be_nl;
- *os << "_tao_server_request.init_reply (ACE_TRY_ENV);" << be_nl;
- *os << "ACE_CHECK;" << be_nl;
- *os << "TAO_OutputCDR &_tao_out = _tao_server_request.outgoing ();" << be_nl;
- *os << "if (!((_tao_out << CORBA::Any::from_boolean (_tao_retval))))" << be_idt_nl;
- *os << "ACE_THROW (CORBA::MARSHAL ());" << be_uidt << be_uidt_nl;
+ *os << "{CORBA::_tc_boolean, 0, 0}," << be_nl;
+ *os << "{CORBA::_tc_string, CORBA::ARG_IN, 0}" << be_uidt_nl;
+ *os << "};" << be_nl;
+ *os << "static const TAO_Call_Data_Skel " << node->flatname ()
+ << "_is_a_calldata = " << be_nl;
+ *os << "{\"_is_a\", 1, 2, " << node->flatname () << "_is_a_paramdata};"
+ << be_nl;
+ // *os << "CORBA::Environment _tao_skel_environment;" << be_nl;
+ *os << node->full_skel_name () << "_ptr _tao_impl = ("
+ << node->full_skel_name () << "_ptr) _tao_object_reference;"
+ << be_nl;
+ *os << "CORBA::Boolean _tao_retval;" << be_nl;
+ *os << "CORBA::String_var _tao_value;" << be_nl;
+ *os << "_tao_server_request.demarshal (" << be_idt_nl
+ << "_tao_environment, " << be_nl
+ << "&" << node->flatname () << "_is_a_calldata, " << be_nl
+ << "&_tao_retval, " << be_nl
+ << "&_tao_value.inout ()" << be_uidt_nl
+ << ");" << be_nl;
+ *os << "TAO_CHECK_ENV_RETURN_VOID (_tao_environment);" << be_nl;
+ *os << "_tao_retval = _tao_impl->_is_a (_tao_value.in (), "
+ << "_tao_environment);" << be_nl;
+ *os << "TAO_CHECK_ENV_RETURN_VOID (_tao_environment);" << be_nl;
+ *os << "_tao_server_request.marshal (" << be_idt_nl
+ << "_tao_environment, " << be_nl
+ // << "_tao_skel_environment," << be_nl
+ << "&" << node->flatname () << "_is_a_calldata, " << be_nl
+ << "&_tao_retval, " << be_nl
+ << "&_tao_value.inout ()" << be_uidt_nl
+ << ");" << be_uidt_nl;
+ // *os << "CORBA::string_free (_tao_value);" << be_uidt_nl;
*os << "}\n\n";
@@ -191,7 +192,7 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
*os << "CORBA::Boolean " << node->full_skel_name ()
<< "::_is_a (" << be_idt << be_idt_nl
<< "const char* value," << be_nl
- << "CORBA::Environment &ACE_TRY_ENV" << be_uidt_nl
+ << "CORBA::Environment &_tao_environment" << be_uidt_nl
<< ")" << be_uidt_nl
<< "{" << be_idt_nl
<< "if (\n" << be_idt;
@@ -206,12 +207,41 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
os->indent ();
*os << "(!ACE_OS::strcmp ((char *)value, "
- << "CORBA::_tc_Object->id (ACE_TRY_ENV))))"
+ << "CORBA::_tc_Object->id (_tao_environment))))"
<< be_idt_nl << "return 1;" << be_uidt_nl
<< "else" << be_idt_nl
<< "return 0;" << be_uidt << be_uidt << be_uidt_nl
<< "}\n\n";
+ // generate code for the _non_existent skeleton
+ os->indent ();
+ *os << "void " << node->full_skel_name ()
+ << "::_non_existent_skel (" << be_idt << be_idt_nl
+ << "CORBA::ServerRequest &_tao_server_request, " << be_nl
+ << "void * /* _tao_object_reference */ ," << be_nl
+ << "void * /*context*/," << be_nl
+ << "CORBA::Environment &_tao_environment" << be_uidt_nl
+ << ")" << be_uidt_nl;
+ *os << "{" << be_idt_nl;
+ *os << "static const TAO_Param_Data_Skel " << node->flatname ()
+ << "_non_existent_paramdata [] = " << be_nl
+ << "{" << be_idt_nl
+ << "{CORBA::_tc_boolean, 0, 0}" << be_uidt_nl
+ << "};" << be_nl;
+ *os << "static const TAO_Call_Data_Skel " << node->flatname ()
+ << "_non_existent_calldata = " << be_nl
+ << "{\"_non_existent\", 1, 1, " << node->flatname ()
+ << "_non_existent_paramdata};" << be_nl;
+ // *os << "CORBA::Environment _tao_skel_environment;" << be_nl;
+ *os << "CORBA::Boolean _tao_retval = 0;" << be_nl;
+ *os << "_tao_server_request.marshal (" << be_idt_nl
+ << "_tao_environment, " << be_nl
+ // << "_tao_skel_environment," << be_nl
+ << "&" << node->flatname () << "_non_existent_calldata, " << be_nl
+ << "&_tao_retval " << be_uidt_nl
+ << ");" << be_uidt_nl;
+ *os << "}\n\n";
+
os->indent ();
*os << "void* " << node->full_skel_name ()
<< "::_downcast (" << be_idt << be_idt_nl
@@ -241,23 +271,22 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
os->indent ();
*os << "void " << node->full_skel_name () <<
"::_dispatch (CORBA::ServerRequest &req, " <<
- "void *context, CORBA::Environment &ACE_TRY_ENV)" << be_nl;
+ "void *context, CORBA::Environment &env)" << be_nl;
*os << "{\n";
os->incr_indent ();
*os << "TAO_Skeleton skel; // pointer to skeleton for operation" << be_nl;
*os << "const char *opname = req.operation (); // retrieve operation name"
<< be_nl;
*os << "// find the skeleton corresponding to this opname" << be_nl;
- *os << "if (this->_find (opname, skel, req.operation_length ()) == -1)" << be_nl;
+ *os << "if (this->_find (opname, skel) == -1)" << be_nl;
*os << "{" << be_idt_nl;
*os << "ACE_ERROR ((LM_ERROR, \"Bad operation <%s>\\n\", opname));" << be_nl;
- *os << "ACE_THROW (CORBA_BAD_OPERATION ());"
- //<< "ACE_TRY_ENV);" << be_uidt_nl;
- << be_uidt_nl;
- // *os << "env.exception (new CORBA_BAD_OPERATION ());" << be_nl;
+ *os << "TAO_THROW_ENV (CORBA_BAD_OPERATION (CORBA::COMPLETED_NO), "
+ << "env);" << be_uidt_nl;
+ // *os << "env.exception (new CORBA_BAD_OPERATION (CORBA::COMPLETED_NO));" << be_nl;
*os << "}" << be_nl;
*os << "else" << be_idt_nl;
- *os << "skel (req, this, context, ACE_TRY_ENV);" << be_uidt << be_uidt_nl;
+ *os << "skel (req, this, context, env);" << be_uidt << be_uidt_nl;
*os << "}\n\n";
os->indent ();
@@ -270,22 +299,6 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
os->decr_indent ();
*os << "}\n\n";
- *os << "\n";
-
- // the _this () operation
- *os << node->name () << "*" << be_nl
- << node->full_skel_name ()
- << "::_this (CORBA_Environment &ACE_TRY_ENV)" << be_nl
- << "{" << be_idt_nl
- << "TAO_Stub *stub = this->_create_stub (ACE_TRY_ENV);" << be_nl
- << "ACE_CHECK_RETURN (0);" << be_nl
- // << "if (ACE_TRY_ENV.exception () != 0)" << be_idt_nl
- // << "return 0;" << be_uidt_nl
- << "return new " << node->full_coll_name ()
- << " (this, stub);" << be_uidt << be_nl;
-
- *os << "}\n\n";
-
// generate the collocated class impl
be_visitor_context ctx (*this->ctx_);
ctx.state (TAO_CodeGen::TAO_INTERFACE_COLLOCATED_SS);
@@ -309,7 +322,21 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
}
delete visitor;
- *os << "\n\n";
+ *os << "\n";
+
+ // the _this () operation
+ *os << node->name () << "*" << be_nl
+ << node->full_skel_name ()
+ << "::_this (CORBA_Environment &ACE_TRY_ENV)" << be_nl
+ << "{" << be_idt_nl
+ << "STUB_Object *stub = this->_create_stub (ACE_TRY_ENV);" << be_nl
+ << "TAO_CHECK_ENV_RETURN (ACE_TRY_ENV, 0);" << be_nl
+ // << "if (ACE_TRY_ENV.exception () != 0)" << be_idt_nl
+ // << "return 0;" << be_uidt_nl
+ << "return new " << node->full_coll_name ()
+ << " (this, stub);" << be_uidt << be_nl;
+
+ *os << "}\n\n";
- return 0;
+ return 0;
}