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.cpp87
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;
-}