diff options
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_operation/ami_handler_reply_stub_operation_cs.cpp')
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_operation/ami_handler_reply_stub_operation_cs.cpp | 271 |
1 files changed, 12 insertions, 259 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_operation/ami_handler_reply_stub_operation_cs.cpp b/TAO/TAO_IDL/be/be_visitor_operation/ami_handler_reply_stub_operation_cs.cpp index e8a7aefc44e..be325370a40 100644 --- a/TAO/TAO_IDL/be/be_visitor_operation/ami_handler_reply_stub_operation_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_operation/ami_handler_reply_stub_operation_cs.cpp @@ -56,8 +56,6 @@ be_visitor_operation_ami_handler_reply_stub_operation_cs::post_process ( return 0; } -#if defined (TAO_HAS_DEPRECATED_EXCEPTION_HOLDER) - int be_visitor_operation_ami_handler_reply_stub_operation_cs::visit_operation ( be_operation *node @@ -130,14 +128,18 @@ be_visitor_operation_ami_handler_reply_stub_operation_cs::visit_operation ( // Generate the argument list. *os << "TAO_InputCDR &_tao_in, " << be_nl - << "::Messaging::ReplyHandler_ptr _tao_reply_handler," << be_nl + << "Messaging::ReplyHandler_ptr _tao_reply_handler," << be_nl << "::CORBA::ULong reply_status"; - << env_decl << ")" << be_uidt << be_uidt_nl; + + *os << be_nl + << "ACE_ENV_ARG_DECL"; + + *os << ")" << be_uidt << be_uidt_nl; // Generate the actual code for the stub. However, if any of the argument // types is "native", we flag a MARSHAL exception. // last argument - is always ACE_ENV_ARG_PARAMETER - *os << "{" << be_idt_nl; + *os << "{\n" << be_idt; // Generate any pre stub info if and only if none of our parameters is of the // native type. @@ -165,10 +167,9 @@ be_visitor_operation_ami_handler_reply_stub_operation_cs::visit_operation ( << "_tao_reply_handler_object =" << be_idt_nl; *os << parent->full_name (); - *os << "::_narrow (_tao_reply_handler" - << (be_global->use_raw_throw () ? "" : " ACE_ENV_ARG_PARAMETER") - << ");" << be_uidt - << TAO_ACE_CHECK () << be_nl << be_nl + *os << "::_narrow (_tao_reply_handler ACE_ENV_ARG_PARAMETER);" << be_uidt_nl; + + *os << "ACE_CHECK;" << be_nl << be_nl << "// Exception handling" << be_nl << "switch (reply_status)" << be_nl << "{" << be_idt_nl @@ -288,254 +289,6 @@ be_visitor_operation_ami_handler_reply_stub_operation_cs::visit_operation ( return 0; } -#else - -int -be_visitor_operation_ami_handler_reply_stub_operation_cs::visit_operation ( - be_operation *node - ) -{ - be_type *bt; - be_visitor_context ctx; - - TAO_OutStream *os = this->ctx_->stream (); - this->ctx_->node (node); - - // Initialize the return type variable. - bt = be_type::narrow_from_decl (node->return_type ()); - - if (!bt) - { - ACE_ERROR_RETURN (( - LM_ERROR, - "(%N:%l) be_visitor_ami_handler_reply_stub_operation_cs::" - "visit_operation - " - "Bad return type\n" - ), - -1 - ); - } - - // Start with the current indentation level. - os->indent (); - - // Generate the return type. Return type is simply void. - *os << be_nl << "void" << be_nl; - - // Get the scope name. - be_decl *parent = - be_scope::narrow_from_scope (node->defined_in ())->decl (); - - if (!parent) - { - ACE_ERROR_RETURN (( - LM_ERROR, - "(%N:%l) be_visitor_operation_ami_handler_reply_stub_operation_cs::" - "visit_operation - " - "node information not sufficient :-<\n" - ), - -1 - ); - } - - // Genereate scope name. - *os << parent->full_name (); - - // Generate the operation name. - *os << "::"; - - // Check if we are an attribute node in disguise - if (this->ctx_->attribute ()) - { - // Now check if we are a "get" or "set" operation - if (node->nmembers () == 1) - { - *os << "_set_"; - } - else - { - *os << "_get_"; - } - } - - *os << node->local_name () << "_reply_stub (" << be_idt_nl; - - // Generate the argument list. - *os << "TAO_InputCDR &_tao_in, " << be_nl - << "::Messaging::ReplyHandler_ptr _tao_reply_handler," << be_nl - << "::CORBA::ULong reply_status" - << env_decl << ")" << be_uidt << be_uidt_nl - << "{" << be_idt_nl; - - *os << "// Retrieve Reply Handler object." << be_nl; - *os << parent->full_name () << "_var " - << "_tao_reply_handler_object =" << be_idt_nl; - - *os << parent->full_name (); - *os << "::_narrow (_tao_reply_handler" - << (be_global->use_raw_throw () ? "" : " ACE_ENV_ARG_PARAMETER") - << ");" << be_uidt - << TAO_ACE_CHECK () << be_nl << be_nl - << "// Exception handling" << be_nl - << "switch (reply_status)" << be_nl - << "{" << be_idt_nl - << "case TAO_AMI_REPLY_OK:" << be_nl - << "{" << be_idt << "\n"; - - // declare variables for arguments - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_OPERATION_ARG_DECL_SS); - be_visitor_operation_argument oad_visitor (&ctx); - - if (node->accept (&oad_visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) ami_handler_reply_stub_operation_cs::" - "visit_operation - " - "codegen for return var decl failed\n"), - -1); - } - - // Demarshal parameters - if (this->gen_marshal_and_invoke (node, bt) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%1) ami_handler_reply_stub_operation_cs::" - "visit_operation - " - "gen_demarshal_params failed\n"), - -1); - } - - *os << "break;" << be_uidt_nl - << "}" << be_nl - << "case TAO_AMI_REPLY_USER_EXCEPTION:" << be_nl - << "case TAO_AMI_REPLY_SYSTEM_EXCEPTION:" << be_nl - << "{" << be_idt_nl - << "const ACE_Message_Block* cdr = _tao_in.start ();" << be_nl ; - - be_interface *original = - (be_interface::narrow_from_decl (parent))->original_interface (); - - if (!original) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%1) ami_handler_reply_stub_operation_cs::" - "visit_operation - " - "original interface is not set\n"), - -1); - } - - const char *exception_data_arg = "0"; - const char *exception_count_arg = "0"; - - // Don't do anything if the exception list is empty. - if (node->exceptions ()) - { - *os << be_nl << "static TAO::Exception_Data " << "exceptions_data [] = " << be_nl; - *os << "{" << be_idt_nl; - - int excep_count = 0; - - be_exception *ex = 0; - - // Initialize an iterator to iterate thru the exception list. - // Continue until each element is visited. - // Iterator must be explicitly advanced inside the loop. - for (UTL_ExceptlistActiveIterator ei (node->exceptions ()); - !ei.is_done ();) - { - ex = be_exception::narrow_from_decl (ei.item ()); - - *os << "{" << be_idt_nl - << "\"" << ex->repoID () << "\"," << be_nl; - // Allocator method. - *os << ex->name () << "::_alloc" - << "\n#if TAO_HAS_INTERCEPTORS == 1" << be_nl; - - if (be_global->tc_support ()) - { - *os << ", " << ex->tc_name (); - } - else - { - *os << ", 0"; - } - - *os << "\n#endif /* TAO_HAS_INTERCEPTORS */" << be_uidt_nl - << "}"; - - ++excep_count; - ei.next (); - - if (!ei.is_done ()) - { - *os << "," << be_nl; - } - - } - - *os << be_uidt_nl << "};" << be_nl << be_nl; - - *os << "::CORBA::ULong exceptions_count = " - << excep_count << ";\n" << be_nl; - - exception_data_arg = "exceptions_data"; - exception_count_arg = "exceptions_count"; - } - - *os << "::CORBA::OctetSeq " - << "_tao_marshaled_exception (" << be_idt << be_idt_nl - << "static_cast <CORBA::ULong> (cdr->length ())," << be_nl - << "static_cast <CORBA::ULong> (cdr->length ())," << be_nl - << "reinterpret_cast <unsigned char*> (cdr->rd_ptr ())," << be_nl - << "0" << be_uidt_nl - << ");" << be_uidt_nl; - - *os << "::Messaging::ExceptionHolder* exception_holder_ptr = 0;" << be_nl - << "ACE_NEW (" << be_idt << be_idt_nl - << "exception_holder_ptr," << be_nl - << "::TAO::ExceptionHolder (" << be_idt_nl - << "(reply_status == TAO_AMI_REPLY_SYSTEM_EXCEPTION)," << be_nl - << "_tao_in.byte_order ()," << be_nl - << "_tao_marshaled_exception," << be_nl - << exception_data_arg << "," << be_nl - << exception_count_arg << ")" << be_uidt_nl - << ");" << be_uidt_nl << be_uidt_nl; - - *os << "::Messaging::ExceptionHolder_var exception_holder_var = " - << "exception_holder_ptr;" << be_nl; - - *os << "_tao_reply_handler_object->" - << node->local_name () << "_excep (" << be_idt << be_idt_nl - << "exception_holder_var"; - - if (!be_global->exception_support ()) - { - *os << " ACE_ENV_ARG_PARAMETER"; - } - - *os << be_uidt_nl << ");" << be_uidt_nl; - - if (!be_global->exception_support ()) - { - *os << "ACE_CHECK;" << be_nl; - } - - *os << "break;" << be_uidt_nl - << "}" << be_nl; - - *os << "case TAO_AMI_REPLY_NOT_OK:" << be_idt_nl - << "// @@ Michael: Not even the spec mentions this case." << be_nl - << "// We have to think about this case." << be_nl - << "break;" << be_uidt << be_uidt_nl - << "}" << be_uidt << be_uidt_nl; - *os << "}" << be_nl << be_nl; - - return 0; -} - -#endif - // This method is used to generate the ParamData table entry. int be_visitor_operation_ami_handler_reply_stub_operation_cs::visit_argument ( @@ -690,8 +443,8 @@ be_visitor_operation_ami_handler_reply_stub_operation_cs::gen_marshal_and_invoke -1); } - *os << be_uidt_nl << ");" << be_uidt - << TAO_ACE_CHECK () << be_nl; + *os << be_uidt_nl << ");" << be_uidt_nl; + *os << "ACE_CHECK;" << be_nl; return 0; } |