diff options
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.cpp | 13 |
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; |