summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_operation/direct_proxy_impl_ss.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_operation/direct_proxy_impl_ss.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_operation/direct_proxy_impl_ss.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_operation/direct_proxy_impl_ss.cpp b/TAO/TAO_IDL/be/be_visitor_operation/direct_proxy_impl_ss.cpp
index c69901bbc09..6cc527087ba 100644
--- a/TAO/TAO_IDL/be/be_visitor_operation/direct_proxy_impl_ss.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_operation/direct_proxy_impl_ss.cpp
@@ -88,6 +88,15 @@ be_visitor_operation_direct_proxy_impl_ss::visit_operation (
*os << be_uidt_nl
<< "{" << be_idt_nl;
+ *os << intf->full_skel_name () << "_ptr _tao_ptr = " << be_idt_nl
+ << "dynamic_cast<" << intf->full_skel_name () << "_ptr> ("
+ << "servant);" << be_uidt_nl;
+
+ *os << "if (!_tao_ptr)" << be_idt_nl
+ << "{" << be_idt_nl
+ << "throw CORBA::INTERNAL ();" << be_uidt_nl
+ << "}" << be_uidt_nl << be_nl;
+
if (!node->void_return_type ())
{
*os << "((TAO::Arg_Traits< ";
@@ -99,9 +108,7 @@ be_visitor_operation_direct_proxy_impl_ss::visit_operation (
*os << ">::ret_val *) args[0])->arg () =" << be_idt_nl;
}
- *os << "dynamic_cast<" << be_idt
- << intf->full_skel_name () << "_ptr>" << be_nl << "("
- << "servant)" << be_uidt_nl;
+ *os << "_tao_ptr";
be_visitor_context ctx;