diff options
author | gokhale <asgokhale@users.noreply.github.com> | 1998-03-11 21:51:44 +0000 |
---|---|---|
committer | gokhale <asgokhale@users.noreply.github.com> | 1998-03-11 21:51:44 +0000 |
commit | bb6820cf6490c9091789572814c967e4ce617a2d (patch) | |
tree | 3aece9e68ba41c48ccae948deecdd703a540893f /TAO | |
parent | 46e2c5125e8b248aa1e5c028eebaa60823e01def (diff) | |
download | ATCD-bb6820cf6490c9091789572814c967e4ce617a2d.tar.gz |
*** empty log message ***
Diffstat (limited to 'TAO')
-rw-r--r-- | TAO/ChangeLog-98c | 3 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_interface.cpp | 54 |
2 files changed, 33 insertions, 24 deletions
diff --git a/TAO/ChangeLog-98c b/TAO/ChangeLog-98c index 79c1d58866a..4a8e8123a99 100644 --- a/TAO/ChangeLog-98c +++ b/TAO/ChangeLog-98c @@ -29,6 +29,9 @@ Wed Mar 11 14:37:08 1998 Aniruddha Gokhale <gokhale@mambo.cs.wustl.edu> * TAO_IDL/be/be_visitor_typedef.cpp: Eliminated the multiple declaration of typedefed variables and their typecodes. + * TAO_IDL/be/be_visitor_interface.cpp: The "_is_a_skel" now uses + the same table driven approach as the other skeletons do. + Wed Mar 11 12:54:59 1998 Irfan Pyarali <irfan@cs.wustl.edu> * tests/POA/Explicit_Activation/server.cpp (main): The server was diff --git a/TAO/TAO_IDL/be/be_visitor_interface.cpp b/TAO/TAO_IDL/be/be_visitor_interface.cpp index 490d85cee1d..afbebb7116f 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface.cpp @@ -1252,42 +1252,48 @@ be_visitor_interface_ss::visit_interface (be_interface *node) // generate code for the _is_a skeleton os->indent (); + *os << "static const TAO_Param_Data_Skel " << node->flatname () + << "_is_a_paramdata [] = " << be_nl; + *os << "{" << be_idt_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 << "void " << node->full_skel_name () << "::_is_a_skel (" << be_idt << be_idt_nl - << "CORBA::ServerRequest &req, " << be_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 << "{\n"; os->incr_indent (); - *os << "CORBA::NVList_ptr nvlist;" << be_nl; - *os << "CORBA::NamedValue_ptr nv;" << be_nl; - *os << "CORBA::Any temp_value (CORBA::_tc_string);" << be_nl; - *os << "CORBA::Any *any;" << be_nl; - *os << "CORBA::Boolean *retval = new CORBA::Boolean;" << be_nl; - *os << "CORBA::String value;" << be_nl; - *os << be_nl; - *os << "req.orb()->create_list (0, nvlist);" << be_nl; - *os << "nv = nvlist->add_value (0, temp_value, " - << "CORBA::ARG_IN, _tao_environment);" << be_nl; - *os << "req.params (nvlist, _tao_environment); // parse the args" << be_nl; - *os << "if (_tao_environment.exception () != 0) return;" << be_nl; - *os << "value = *(CORBA::String *)nv->value ()->value ();" << be_nl; - - *os << node->full_skel_name () << "_ptr \t impl = (" + *os << node->full_skel_name () << "_ptr\t_tao_impl = (" << node->full_skel_name () << "_ptr) _tao_object_reference;" << be_nl; - - *os << "*retval = impl->_is_a (value, _tao_environment);" << be_nl - << "if (_tao_environment.exception () != 0) return;" << be_nl; - *os << "any = new CORBA::Any (CORBA::_tc_boolean, " - << "retval, CORBA::B_TRUE);" << be_nl; - *os << "req.result (any, _tao_environment);\n"; - os->decr_indent (); + *os << "CORBA::Boolean _tao_retval;" << be_nl; + *os << "char *_tao_value = 0;" << 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" << be_uidt_nl + << ");" << be_nl; + *os << "if (_tao_environment.exception () != 0) return;" << be_nl; + *os << "_tao_retval = _tao_impl->_is_a (_tao_value, _tao_environment);" + << be_nl; + *os << "_tao_server_request.marshal (" << be_idt_nl + << "_tao_environment, " << be_nl + << "&" << node->flatname () << "_is_a_calldata, " << be_nl + << "&_tao_retval, " << be_nl + << "&_tao_value" << be_uidt_nl + << ");" << be_nl; + *os << "CORBA::string_free (_tao_value);" << be_uidt_nl; *os << "}\n\n"; + os->indent (); *os << "CORBA::Boolean " << node->full_skel_name () << "::_is_a (" << be_idt << be_idt_nl |