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 | 536 |
1 files changed, 0 insertions, 536 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 deleted file mode 100644 index 9ebc1718a4c..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_operation/ami_handler_reply_stub_operation_cs.cpp +++ /dev/null @@ -1,536 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// ami_handler_reply_stub_operation_cs.cpp -// -// = DESCRIPTION -// Visitor generating code for Operation in the stubs file. -// -// = AUTHOR -// Alexander Babu Arulanthu <alex@cs.wustl.edu> -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_operation.h" - -ACE_RCSID(be_visitor_operation, ami_handler_reply_stub_operation_cs, "$Id$") - - -// ************************************************************ -// Operation visitor for client stubs -// ************************************************************ - -be_visitor_operation_ami_handler_reply_stub_operation_cs::be_visitor_operation_ami_handler_reply_stub_operation_cs (be_visitor_context *ctx) - : be_visitor_operation (ctx) -{ -} - -be_visitor_operation_ami_handler_reply_stub_operation_cs::~be_visitor_operation_ami_handler_reply_stub_operation_cs (void) -{ -} - -// processing to be done after every element in the scope is processed -int -be_visitor_operation_ami_handler_reply_stub_operation_cs::post_process (be_decl *bd) -{ - // all we do here is to insert a comma and a newline - TAO_OutStream *os = this->ctx_->stream (); - if (!this->last_node (bd)) - *os << ",\n"; - return 0; -} - -int -be_visitor_operation_ami_handler_reply_stub_operation_cs::visit_operation (be_operation *node) -{ - TAO_OutStream *os; // output stream - be_type *bt; // type node - be_visitor_context ctx; // visitor context - be_visitor *visitor = 0; // visitor - - os = this->ctx_->stream (); - this->ctx_->node (node); // save the node for future use - - // Init 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) // set - *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"; - - *os << "," << be_nl - << "CORBA::Environment &ACE_TRY_ENV"; - - *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 CORBA::Environment - *os << "{\n" << be_idt; - - // Generate any pre stub info if and only if none of our parameters is of the - // native type. - if (!node->has_native ()) - { - // native type does not exist. - - // Generate any "pre" stub information such as tables or declarations - // This is a template method and the actual work will be done by the - // derived class - if (this->gen_pre_stub_info (node, bt) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_operation_cs::" - "visit_operation - " - "gen_pre_stub_info failed\n"), - -1); - } - } - - os->indent(); - - *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, ACE_TRY_ENV);" << be_uidt_nl; - - *os << "ACE_CHECK;" << be_nl << be_nl - << "// Exception handling" << be_nl - << "switch (reply_status)" << be_idt_nl - << "{" << be_idt_nl - << "case TAO_AMI_REPLY_OK:" << be_idt_nl - << "{\n"; - - // declare variables for arguments - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_OPERATION_ARG_DECL_SS); - visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (node->accept (visitor) == -1)) - { - delete visitor; - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) ami_handler_reply_stub_operation_cs::" - "visit_operation - " - "codegen for return var decl failed\n"), - -1); - } - delete visitor; - visitor = 0; - - // 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->indent (); - *os << be_uidt_nl - << "}" << be_uidt_nl << "return;" << be_uidt_nl - << "case TAO_AMI_REPLY_USER_EXCEPTION:" << be_nl - << "case TAO_AMI_REPLY_SYSTEM_EXCEPTION:" << be_idt_nl - << "{" << be_idt_nl - << "const ACE_Message_Block* cdr = _tao_in.start ();" << be_nl << 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); - } - - - *os << original->compute_local_name ("AMI_", "ExceptionHolder") << "_var exception_holder_var;" << be_nl - << "ACE_NEW (exception_holder_var," << be_idt_nl; - - if (original->defined_in ()->scope_node_type () == AST_Decl::NT_module) - { - be_decl *scope = be_scope::narrow_from_scope (original->defined_in ())->decl (); - *os << "OBV_" << scope->name() << "::" - << "_tao_" << original->compute_local_name ("AMI_", "ExceptionHolder"); - } - else - *os << "_tao_" << original->compute_local_name ("AMI_", "ExceptionHolder"); - - *os << " ());" << be_uidt_nl; - - *os << "Messaging::ExceptionHolder::_marshaled_exception_seq::_var_type marshaled_exception_var =" << be_idt_nl - << "new Messaging::ExceptionHolder::_marshaled_exception_seq (cdr->length (), // max" << be_nl - << "cdr->length (), // length" << be_nl - << "(unsigned char*) cdr->rd_ptr (),// data" << be_nl - << "0); // release" << be_uidt_nl - << "exception_holder_var->marshaled_exception (marshaled_exception_var.in ());" << be_nl; - - *os << "if (reply_status == TAO_AMI_REPLY_SYSTEM_EXCEPTION)" << be_idt_nl - << "exception_holder_var->is_system_exception (1);" << be_uidt_nl - << "else" << be_idt_nl - << "exception_holder_var->is_system_exception (0);" << be_uidt_nl - << "exception_holder_var->byte_order (ACE_CDR_BYTE_ORDER);" << be_nl - << be_nl - << "_tao_reply_handler_object->" - << node->local_name () << "_excep (exception_holder_var"; - - if (!idl_global->exception_support ()) - *os << "," << be_nl << " ACE_TRY_ENV"; - - *os << ");" << be_uidt_nl - << "}" << be_uidt_nl - << "return;" << be_uidt_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_nl - << "}" << be_uidt_nl; - *os << be_uidt_nl << "};" << be_nl << be_nl; - - return 0; -} - -int -be_visitor_operation_ami_handler_reply_stub_operation_cs::visit_argument (be_argument *node) -{ - // this method is used to generate the ParamData table entry - - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; // argument type - - // retrieve the type for this argument - bt = be_type::narrow_from_decl (node->field_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_operation_ami_handler_reply_stub_operation_cs::" - "visit_argument - " - "Bad argument type\n"), - -1); - } - - os->indent (); - *os << "{" << bt->tc_name () << ", "; - switch (node->direction ()) - { - case AST_Argument::dir_IN: - *os << "PARAM_IN, "; - break; - case AST_Argument::dir_INOUT: - *os << "PARAM_INOUT, "; - break; - case AST_Argument::dir_OUT: - *os << "PARAM_OUT, "; - break; - } - *os << "0}"; - - return 0; -} - -int -be_visitor_operation_ami_handler_reply_stub_operation_cs::gen_raise_exception (be_type *bt, - const char *excep, - const char *completion_status) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_visitor *visitor; - be_visitor_context ctx; - - if (this->void_return_type (bt)) - { - *os << "ACE_THROW (" - << excep << " (" << completion_status << "));\n"; - } - else - { - *os << "ACE_THROW_RETURN (" - << excep << " (" << completion_status << "), "; - - // return the appropriate return value - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_OPERATION_RETVAL_RETURN_CS); - visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (bt->accept (visitor) == -1)) - { - delete visitor; - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_operation_ami_handler_reply_stub_operation_cs::" - "gen_raise_exception - " - "codegen for return var failed\n"), - -1); - } - *os << ");\n"; - } - return 0; -} - -int -be_visitor_operation_ami_handler_reply_stub_operation_cs::gen_check_exception (be_type *bt) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_visitor *visitor; - be_visitor_context ctx; - - os->indent (); - // check if there is an exception - if (this->void_return_type (bt)) - { - *os << "ACE_CHECK;\n"; - //<< "_tao_environment);\n"; - } - else - { - *os << "ACE_CHECK_RETURN ("; - // << "_tao_environment, "; - - // return the appropriate return value - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_OPERATION_RETVAL_RETURN_CS); - visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (bt->accept (visitor) == -1)) - { - delete visitor; - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_operation_ami_handler_reply_stub_operation_cs::" - "gen_check_exception - " - "codegen failed\n"), - -1); - } - *os << ");\n"; - } - - return 0; -} - -// Currently we do not support interpretative exception handling for AMI -#if 0 - - -// ************************************************************ -// Operation visitor for interpretive client skeletons of the AMI reply handler -// ************************************************************ - -be_interpretive_visitor_operation_ami_handler_reply_stub_operation_cs:: -be_interpretive_visitor_operation_ami_handler_reply_stub_operation_cs (be_visitor_context *ctx) - : be_visitor_operation_ami_handler_reply_stub_operation_cs (ctx) -{ -} - -be_interpretive_visitor_operation_ami_handler_reply_stub_operation_cs::~be_interpretive_visitor_operation_ami_handler_reply_stub_operation_cs (void) -{ -} - -// concrete implementation of the template methods - -int -be_interpretive_visitor_operation_ami_handler_reply_stub_operation_cs::gen_pre_stub_info (be_operation *node, - be_type *bt) -{ - ACE_UNUSED_ARG (node); - ACE_UNUSED_ARG (bt); - - // @@ Michael: To be done. - return 0; -} - -int -be_interpretive_visitor_operation_ami_handler_reply_stub_operation_cs:: -gen_marshal_and_invoke (be_operation*node, - be_type *bt) -{ - ACE_UNUSED_ARG (node); - ACE_UNUSED_ARG (bt); - - // @@ Michael: To be done. - return 0; -} - -#endif /* 0 */ - -// ************************************************************ -// Operation visitor for compiled client skeletons of the AMI reply handler -// ************************************************************ - -be_compiled_visitor_operation_ami_handler_reply_stub_operation_cs:: -be_compiled_visitor_operation_ami_handler_reply_stub_operation_cs (be_visitor_context *ctx) - : be_visitor_operation_ami_handler_reply_stub_operation_cs (ctx) -{ -} - -be_compiled_visitor_operation_ami_handler_reply_stub_operation_cs::~be_compiled_visitor_operation_ami_handler_reply_stub_operation_cs (void) -{ -} - -// concrete implementation of the template methods - -int -be_compiled_visitor_operation_ami_handler_reply_stub_operation_cs::gen_pre_stub_info (be_operation *node, - be_type *bt) -{ - ACE_UNUSED_ARG (bt); - // Check if this operation raises any exceptions. In that case, we must - // generate a list of exception typecodes. This is not valid for - // attributes - if (!this->ctx_->attribute ()) - { - be_visitor_context ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_OPERATION_EXCEPTLIST_CS); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (node->accept (visitor) == -1)) - { - delete visitor; - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) " - "be_compiled_visitor_operation_ami_handler_reply_stub_operation_cs::" - "gen_pre_stub_info - " - "Exceptionlist generation error\n"), - -1); - } - delete visitor; - } - - return 0; -} - -int -be_compiled_visitor_operation_ami_handler_reply_stub_operation_cs:: - gen_marshal_and_invoke (be_operation *node, - be_type *bt) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_visitor *visitor = 0; - be_visitor_context ctx; - - ACE_UNUSED_ARG (bt); - - os->indent (); - - *os << "// Demarshall all the arguments." << be_nl; - if (this->has_param_type (node, AST_Argument::dir_IN)) - { - *os << "if (!(\n" << be_idt << be_idt << be_idt; - - // demarshal each in and inout argument - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_OPERATION_ARG_DEMARSHAL_SS); - ctx.sub_state (TAO_CodeGen::TAO_CDR_INPUT); - visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (node->accept (visitor) == -1)) - { - delete visitor; - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_compiled_visitor_operation_ami_handler_reply_stub_operation_cs::" - "gen_marshal_params - " - "codegen for args failed\n"), - -1); - } - delete visitor; - - *os << be_uidt << be_uidt_nl - << " ))" << be_nl - << "ACE_THROW (CORBA::MARSHAL ());" << be_uidt_nl << be_nl; - } - - - // Invoke the callback method - *os << "// Invoke the call back method." << be_nl - << "_tao_reply_handler_object->"; - - // 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) // set - *os << "set_"; - else - *os << "get_"; - } - - *os << node->local_name () << " (" << be_idt_nl; - - - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_OPERATION_ARG_UPCALL_SS); - // generate the argument list containing the inout and inout arguments - visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (node->accept (visitor) == -1)) - { - delete visitor; - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) ami_handler_reply_stub_operation_cs::" - "visit_operation - " - "codegen for making upcall failed\n"), - -1); - } - delete visitor; - visitor = 0; - - os->indent (); - - *os << ");" << be_uidt_nl; - - *os << "ACE_CHECK;" << be_nl; - - return 0; -} |