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 | 87 |
1 files changed, 31 insertions, 56 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 9b24f4fa611..ab5c8bd8b99 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 @@ -3,32 +3,34 @@ #include "idl.h" #include "idl_extern.h" #include "be.h" - #include "be_visitor_operation.h" -ACE_RCSID(be_visitor_operation, direct_proxy_impl_ss, "$Id$") +ACE_RCSID (be_visitor_operation, + direct_proxy_impl_ss, + "$Id$") -be_visitor_operation_direct_proxy_impl_ss::be_visitor_operation_direct_proxy_impl_ss -(be_visitor_context *ctx) - : be_visitor_scope (ctx) +be_visitor_operation_direct_proxy_impl_ss:: +be_visitor_operation_direct_proxy_impl_ss (be_visitor_context *ctx) + : be_visitor_operation (ctx) { } -be_visitor_operation_direct_proxy_impl_ss::~be_visitor_operation_direct_proxy_impl_ss (void) +be_visitor_operation_direct_proxy_impl_ss:: +~be_visitor_operation_direct_proxy_impl_ss (void) { } - int -be_visitor_operation_direct_proxy_impl_ss::visit_operation (be_operation *node) +be_visitor_operation_direct_proxy_impl_ss::visit_operation ( + be_operation *node + ) { TAO_OutStream *os = this->ctx_->stream (); // We need the interface node in which this operation was defined. However, // if this operation node was an attribute node in disguise, we get this - // information from the context - be_interface *intf; - intf = this->ctx_->attribute () + // information from the context. + be_interface *intf = this->ctx_->attribute () ? be_interface::narrow_from_scope (this->ctx_->attribute ()->defined_in ()) : be_interface::narrow_from_scope (node->defined_in ()); @@ -41,8 +43,8 @@ be_visitor_operation_direct_proxy_impl_ss::visit_operation (be_operation *node) -1); } - // retrieve the operation return type be_type *bt = be_type::narrow_from_decl (node->return_type ()); + if (!bt) { ACE_ERROR_RETURN ((LM_ERROR, @@ -51,31 +53,21 @@ be_visitor_operation_direct_proxy_impl_ss::visit_operation (be_operation *node) "Bad return type\n"), -1); } + os->indent (); // STEP 2: generate the return type mapping (same as in the header file) be_visitor_context ctx (*this->ctx_); ctx.state (TAO_CodeGen::TAO_OPERATION_RETTYPE_OTHERS); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - if (!visitor) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_operation_direct_collocated_ss::" - "visit_operation - " - "Bad visitor for return type\n"), - -1); - } + be_visitor_operation_rettype oro_visitor (&ctx); - if (bt->accept (visitor) == -1) + if (bt->accept (&oro_visitor) == -1) { - delete visitor; ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_operation_direct_collocated_ss::" "visit_operation - " "codegen for return type failed\n"), -1); } - delete visitor; *os << " " << intf->full_direct_proxy_impl_name () << "::" << node->local_name () << " "; @@ -84,26 +76,16 @@ be_visitor_operation_direct_proxy_impl_ss::visit_operation (be_operation *node) // in the header file) ctx = *this->ctx_; ctx.state (TAO_CodeGen::TAO_OPERATION_ARGLIST_PROXY_IMPL_XS); - visitor = tao_cg->make_visitor (&ctx); - if (!visitor) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_operation_cs::" - "visit_operation - " - "Bad visitor to return type\n"), - -1); - } + be_visitor_operation_arglist oapi_visitor (&ctx); - if (node->accept (visitor) == -1) + if (node->accept (&oapi_visitor) == -1) { - delete visitor; ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_operation_cs::" "visit_operation - " "codegen for argument list failed\n"), -1); } - delete visitor; *os << "{" << be_idt << "\n"; @@ -122,8 +104,11 @@ be_visitor_operation_direct_proxy_impl_ss::visit_operation (be_operation *node) << "\"" << intf->repoID () << "\"" << ")" << be_uidt_nl // idt = 2 << ")"; + if (this->gen_invoke (ctx, node) == -1) - return -1; + { + return -1; + } *os << be_uidt_nl << "}" << be_nl << be_nl; @@ -134,8 +119,10 @@ be_visitor_operation_direct_proxy_impl_ss::visit_operation (be_operation *node) int -be_visitor_operation_direct_proxy_impl_ss::gen_invoke (be_visitor_context &ctx, - be_operation *node) +be_visitor_operation_direct_proxy_impl_ss::gen_invoke ( + be_visitor_context &ctx, + be_operation *node + ) { TAO_OutStream *os = this->ctx_->stream (); @@ -144,10 +131,10 @@ be_visitor_operation_direct_proxy_impl_ss::gen_invoke (be_visitor_context &ctx, ctx = *this->ctx_; ctx.state (TAO_CodeGen::TAO_OPERATION_COLLOCATED_ARG_UPCALL_SS); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (node->accept (visitor) == -1)) + be_visitor_operation_argument visitor (&ctx); + + if (node->accept (&visitor) == -1) { - delete visitor; ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_operation_direct_collocated_ss::" "gen_invoke - " @@ -155,21 +142,9 @@ be_visitor_operation_direct_proxy_impl_ss::gen_invoke (be_visitor_context &ctx, -1); } - // end the upcall *os << be_uidt_nl << ");" << be_uidt << be_uidt << be_uidt_nl; + return 0; } -int -be_visitor_operation_direct_proxy_impl_ss::void_return_type (be_type *bt) -{ - // is the operation return type void? - - if (bt->node_type () == AST_Decl::NT_pre_defined - && (be_predefined_type::narrow_from_decl (bt)->pt () - == AST_PredefinedType::PT_void)) - return 1; - else - return 0; -} |