summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_operation/direct_collocated_ss.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_operation/direct_collocated_ss.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_operation/direct_collocated_ss.cpp89
1 files changed, 32 insertions, 57 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_operation/direct_collocated_ss.cpp b/TAO/TAO_IDL/be/be_visitor_operation/direct_collocated_ss.cpp
index a253d39b1e7..5324bc7090c 100644
--- a/TAO/TAO_IDL/be/be_visitor_operation/direct_collocated_ss.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_operation/direct_collocated_ss.cpp
@@ -21,37 +21,39 @@
#include "idl.h"
#include "idl_extern.h"
#include "be.h"
-
#include "be_visitor_operation.h"
-ACE_RCSID(be_visitor_operation, direct_collocated_ss, "$Id$")
+ACE_RCSID (be_visitor_operation,
+ direct_collocated_ss,
+ "$Id$")
// *************************************************************************
-// be_visitor_operation_direct_collocated_ss --
// This visitor generates code for the direct_collocated operation signature in a
-// server skeletons file
+// server skeletons file.
// *************************************************************************
-be_visitor_operation_direct_collocated_ss::be_visitor_operation_direct_collocated_ss
-(be_visitor_context *ctx)
- : be_visitor_scope (ctx)
+be_visitor_operation_direct_collocated_ss::
+be_visitor_operation_direct_collocated_ss(be_visitor_context *ctx)
+ : be_visitor_operation (ctx)
{
}
-be_visitor_operation_direct_collocated_ss::~be_visitor_operation_direct_collocated_ss (void)
+be_visitor_operation_direct_collocated_ss::
+~be_visitor_operation_direct_collocated_ss (void)
{
}
-int be_visitor_operation_direct_collocated_ss::visit_operation (be_operation *node)
+int be_visitor_operation_direct_collocated_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 ());
@@ -64,8 +66,9 @@ int be_visitor_operation_direct_collocated_ss::visit_operation (be_operation *no
-1);
}
- // retrieve the operation return type
+ // Retrieve the operation return type.
be_type *bt = be_type::narrow_from_decl (node->return_type ());
+
if (!bt)
{
ACE_ERROR_RETURN ((LM_ERROR,
@@ -78,27 +81,16 @@ int be_visitor_operation_direct_collocated_ss::visit_operation (be_operation *no
// 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_coll_name (be_interface::DIRECT) << "::"
<< node->local_name () << " ";
@@ -107,26 +99,16 @@ int be_visitor_operation_direct_collocated_ss::visit_operation (be_operation *no
// in the header file)
ctx = *this->ctx_;
ctx.state (TAO_CodeGen::TAO_OPERATION_ARGLIST_OTHERS);
- 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 oao_visitor (&ctx);
- if (node->accept (visitor) == -1)
+ if (node->accept (&oao_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";
@@ -138,8 +120,11 @@ int be_visitor_operation_direct_collocated_ss::visit_operation (be_operation *no
}
*os << "this->servant_";
+
if (this->gen_invoke (ctx, node) == -1)
- return -1;
+ {
+ return -1;
+ }
*os << be_uidt_nl
<< "}\n\n";
@@ -147,8 +132,10 @@ int be_visitor_operation_direct_collocated_ss::visit_operation (be_operation *no
return 0;
}
-int be_visitor_operation_direct_collocated_ss::gen_invoke (be_visitor_context &ctx,
- be_operation *node)
+int be_visitor_operation_direct_collocated_ss::gen_invoke (
+ be_visitor_context &ctx,
+ be_operation *node
+ )
{
TAO_OutStream *os = this->ctx_->stream ();
@@ -157,10 +144,10 @@ int be_visitor_operation_direct_collocated_ss::gen_invoke (be_visitor_context &c
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 ocau_visitor (&ctx);
+
+ if (node->accept (&ocau_visitor) == -1)
{
- delete visitor;
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_operation_direct_collocated_ss::"
"gen_invoke - "
@@ -168,21 +155,9 @@ int be_visitor_operation_direct_collocated_ss::gen_invoke (be_visitor_context &c
-1);
}
- // end the upcall
*os << be_uidt_nl
<< ");\n" << be_uidt;
+
return 0;
}
-int
-be_visitor_operation_direct_collocated_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;
-}