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.cpp181
1 files changed, 167 insertions, 14 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 8e4fa72fa30..51e6d03bd97 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp
@@ -171,6 +171,16 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
// Generate code for the _is_a skeleton.
{
+ *os << "void " << full_skel_name
+ << "::_is_a_skel (" << be_idt << be_idt_nl
+ << "TAO_ServerRequest & server_request, " << be_nl
+ << "void * servant_upcall," << be_nl
+ << "void * servant" << be_nl
+ << "ACE_ENV_ARG_DECL" << be_uidt_nl
+ << ")" << be_uidt_nl;
+ *os << "{" << be_idt_nl;
+
+
be_predefined_type rt (AST_PredefinedType::PT_boolean, 0);
// @@ Cheat a little by placing a space before the operation name
// to prevent the IDL compiler from interpreting the leading
@@ -197,12 +207,91 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
is_a.be_add_argument (&repository_id);
+ be_visitor_operation_upcall_command_ss upcall_command_visitor (this->ctx_);
+ upcall_command_visitor.visit (&is_a, full_skel_name);
+
+ // Generate exception list.
+ be_visitor_operation_exceptlist_ss exception_list (this->ctx_);
+ exception_list.visit_operation (&is_a);
+
be_visitor_operation_ss op_visitor (this->ctx_);
- op_visitor.visit_operation (&is_a);
+
+ *os << "TAO::SArg_Traits< ";
+
+ op_visitor.gen_arg_template_param_name (&is_a,
+ &rt,
+ os);
+
+ *os << ">::ret_val retval;";
+
+ op_visitor.gen_skel_body_arglist (&is_a,
+ os);
+
+ *os << be_nl << be_nl
+ << "TAO::Argument * const args[] =" << be_idt_nl
+ << "{" << be_idt_nl
+ << "&retval," << be_nl
+ << "&_tao_" << arg_name.get_string ()
+ << be_uidt_nl
+ << "};" << be_uidt_nl << be_nl;
+
+ *os << "static size_t const nargs = 2;" << be_nl << be_nl;
+
+ // Get the right object implementation.
+ *os << full_skel_name << " * const impl =" << be_idt_nl
+ << "static_cast<" << be_idt_nl
+ << full_skel_name << " *> (servant);" << be_uidt
+ << be_uidt_nl;
+
+ // Upcall_Command instantiation.
+ *os << be_nl
+ << "Upcall_Command command (" << be_idt_nl
+ << "impl";
+
+ if (!is_a.void_return_type ()
+ || is_a.argument_count () > 0)
+ {
+ // server_request.operation_details () will be non-zero in the
+ // thru-POA collocation case. Use them if available.
+ *os << "," << be_nl;
+
+ if (be_global->gen_thru_poa_collocation ())
+ *os << "server_request.operation_details ()," << be_nl;
+
+ *os << "args";
+ }
+
+ *os << ");" << be_uidt_nl << be_nl;
+
+ *os << "TAO::Upcall_Wrapper upcall_wrapper;" << be_nl
+ << "upcall_wrapper.upcall (server_request" << be_nl
+ << " , args" << be_nl
+ << " , nargs" << be_nl
+ << " , command" << be_nl
+ << "\n#if TAO_HAS_INTERCEPTORS == 1" << be_nl
+ << " , servant_upcall" << be_nl
+ << " , exceptions" << be_nl
+ << " , nexceptions"
+ << "\n#endif /* TAO_HAS_INTERCEPTORS == 1 */" << be_nl << be_nl
+ << " ACE_ENV_ARG_PARAMETER);" << be_nl
+ << "ACE_CHECK;" << be_nl;
+
+ *os << be_uidt_nl
+ << "}" << be_nl << be_nl;
}
// Generate code for the _non_existent skeleton.
{
+ *os << "void " << full_skel_name
+ << "::_non_existent_skel (" << be_idt << be_idt_nl
+ << "TAO_ServerRequest & server_request, " << be_nl
+ << "void * servant_upcall," << be_nl
+ << "void * servant" << be_nl
+ << "ACE_ENV_ARG_DECL" << be_uidt_nl
+ << ")" << be_uidt_nl;
+ *os << "{" << be_idt_nl;
+
+
be_predefined_type rt (AST_PredefinedType::PT_boolean, 0);
// @@ Cheat a little by placing a space before the operation name
// to prevent the IDL compiler from interpreting the leading
@@ -216,8 +305,77 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
node->is_abstract ());
non_existent.set_defined_in (node);
+ be_visitor_operation_upcall_command_ss upcall_command_visitor (this->ctx_);
+ upcall_command_visitor.visit (&non_existent, full_skel_name);
+
+ // Generate exception list.
+ be_visitor_operation_exceptlist_ss exception_list (this->ctx_);
+ exception_list.visit_operation (&non_existent);
+
be_visitor_operation_ss op_visitor (this->ctx_);
- op_visitor.visit_operation (&non_existent);
+
+ *os << "TAO::SArg_Traits< ";
+
+ op_visitor.gen_arg_template_param_name (&non_existent,
+ &rt,
+ os);
+
+ *os << ">::ret_val retval;";
+
+ op_visitor.gen_skel_body_arglist (&non_existent,
+ os);
+
+ *os << be_nl << be_nl
+ << "TAO::Argument * const args[] =" << be_idt_nl
+ << "{" << be_idt_nl
+ << "&retval"
+ << be_uidt_nl
+ << "};" << be_uidt_nl << be_nl;
+
+ *os << "static size_t const nargs = 1;" << be_nl << be_nl;
+
+ // Get the right object implementation.
+ *os << full_skel_name << " * const impl =" << be_idt_nl
+ << "static_cast<" << be_idt_nl
+ << full_skel_name << " *> (servant);" << be_uidt
+ << be_uidt_nl;
+
+ // Upcall_Command instantiation.
+ *os << be_nl
+ << "Upcall_Command command (" << be_idt_nl
+ << "impl";
+
+ if (!non_existent.void_return_type ()
+ || non_existent.argument_count () > 0)
+ {
+ // server_request.operation_details () will be non-zero in the
+ // thru-POA collocation case. Use them if available.
+ *os << "," << be_nl;
+
+ if (be_global->gen_thru_poa_collocation ())
+ *os << "server_request.operation_details ()," << be_nl;
+
+ *os << "args";
+ }
+
+ *os << ");" << be_uidt_nl << be_nl;
+
+ *os << "TAO::Upcall_Wrapper upcall_wrapper;" << be_nl
+ << "upcall_wrapper.upcall (server_request" << be_nl
+ << " , args" << be_nl
+ << " , nargs" << be_nl
+ << " , command" << be_nl
+ << "\n#if TAO_HAS_INTERCEPTORS == 1" << be_nl
+ << " , servant_upcall" << be_nl
+ << " , exceptions" << be_nl
+ << " , nexceptions"
+ << "\n#endif /* TAO_HAS_INTERCEPTORS == 1 */" << be_nl << be_nl
+ << " ACE_ENV_ARG_PARAMETER);" << be_nl
+ << "ACE_CHECK;" << be_nl;
+
+ *os << be_uidt_nl
+ << "}" << be_nl << be_nl;
+
}
*os << be_nl << be_nl << "// TAO_IDL - Generated from " << be_nl
@@ -247,7 +405,7 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
// get_interface.set_defined_in (node);
// be_visitor_operation_upcall_command_ss upcall_command_visitor (this->ctx_);
-// upcall_command_visitor.visit_operation (&get_interface);
+// upcall_command_visitor.visit (&get_interface, full_skel_name);
// }
*os << be_nl << be_nl
@@ -271,9 +429,9 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
<< "}" << be_uidt_nl << be_nl;
// Get the right object implementation.
- *os << node->full_skel_name () << " * const impl =" << be_idt_nl
+ *os << full_skel_name << " * const impl =" << be_idt_nl
<< "static_cast<" << be_idt_nl
- << node->full_skel_name () << " *> (servant);" << be_uidt
+ << full_skel_name << " *> (servant);" << be_uidt
<< be_uidt_nl;
*os << "CORBA::InterfaceDef_ptr _tao_retval = " << be_idt_nl
@@ -301,11 +459,6 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
<< "}" << be_nl << be_nl;
- // @@ Can't fully automate generation of _component() skeleton code
- // as easily as we do for _is_a() and _non_existent() above due
- // to naming conventions that differ from IDL based methods .
- // *sigh*
- //
// Generate code for the _component skeleton.
{
*os << "void " << full_skel_name
@@ -334,7 +487,7 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
get_component.set_defined_in (node);
be_visitor_operation_upcall_command_ss upcall_command_visitor (this->ctx_);
- upcall_command_visitor.visit_operation (&get_component);
+ upcall_command_visitor.visit (&get_component, full_skel_name);
// Generate exception list.
be_visitor_operation_exceptlist_ss exception_list (this->ctx_);
@@ -344,7 +497,7 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
*os << "TAO::SArg_Traits< ";
- operation_visitor.gen_arg_template_param_name (node,
+ operation_visitor.gen_arg_template_param_name (&get_component,
&rt,
os);
@@ -360,9 +513,9 @@ be_visitor_interface_ss::visit_interface (be_interface *node)
*os << "static size_t const nargs = 1;" << be_nl << be_nl;
// Get the right object implementation.
- *os << node->full_skel_name () << " * const impl =" << be_idt_nl
+ *os << full_skel_name << " * const impl =" << be_idt_nl
<< "static_cast<" << be_idt_nl
- << node->full_skel_name () << " *> (servant);" << be_uidt
+ << full_skel_name << " *> (servant);" << be_uidt
<< be_uidt_nl;
// Upcall_Command instantiation.