summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_union/union.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_union/union.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_union/union.cpp126
1 files changed, 75 insertions, 51 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_union/union.cpp b/TAO/TAO_IDL/be/be_visitor_union/union.cpp
index 2b04aff5d46..e06edf10dda 100644
--- a/TAO/TAO_IDL/be/be_visitor_union/union.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_union/union.cpp
@@ -18,16 +18,15 @@
//
// ============================================================================
-#include "idl.h"
-#include "idl_extern.h"
-#include "be.h"
-
+#include "be.h"
#include "be_visitor_union.h"
+#include "be_visitor_union_branch.h"
-ACE_RCSID(be_visitor_union, union, "$Id$")
+ACE_RCSID (be_visitor_union,
+ union,
+ "$Id$")
-// generic struct visitor
be_visitor_union::be_visitor_union (be_visitor_context *ctx)
: be_visitor_scope (ctx)
{
@@ -37,86 +36,111 @@ be_visitor_union::~be_visitor_union (void)
{
}
-// visit the Union node and its scope
int
be_visitor_union::visit_union (be_union *)
{
- return -1; // must be overriden
+ return -1; // Must be overriden.
}
int
be_visitor_union::visit_union_branch (be_union_branch *node)
{
- // instantiate a visitor context with a copy of our context. This info
- // will be modified based on what type of node we are visiting
+ // Instantiate a visitor context with a copy of our context. This info
+ // will be modified based on what type of node we are visiting.
be_visitor_context ctx (*this->ctx_);
- ctx.node (node); // set the node to be the node being visited. The scope is
- // still the same
-
- // this switch is acceptable rather than having derived visitors overriding
- // this method and differing only in what state they set
+ ctx.node (node);
+ int status = 0;
switch (this->ctx_->state ())
{
case TAO_CodeGen::TAO_UNION_PUBLIC_CH:
- ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_CH);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_CH);
+ be_visitor_union_branch_public_ch visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_PRIVATE_CH:
- ctx.state (TAO_CodeGen::TAO_UNION_PRIVATE_CH);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_PRIVATE_CH);
+ be_visitor_union_branch_private_ch visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_PUBLIC_CI:
- ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_CI);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_CI);
+ be_visitor_union_branch_public_ci visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_PUBLIC_CS:
- ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_CS);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_CS);
+ be_visitor_union_branch_public_cs visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_PUBLIC_ASSIGN_CS:
- ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_ASSIGN_CS);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_ASSIGN_CS);
+ be_visitor_union_branch_public_assign_cs visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_PUBLIC_RESET_CS:
- ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_RESET_CS);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_RESET_CS);
+ be_visitor_union_branch_public_reset_cs visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_PUBLIC_ACCESS_CS:
- ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_ACCESS_CS);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_PUBLIC_ACCESS_CS);
+ be_visitor_union_branch_public_access_cs visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_CDR_OP_CH:
- ctx.state (TAO_CodeGen::TAO_UNION_BRANCH_CDR_OP_CH);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_BRANCH_CDR_OP_CH);
+ be_visitor_union_branch_cdr_op_ch visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_CDR_OP_CI:
- ctx.state (TAO_CodeGen::TAO_UNION_BRANCH_CDR_OP_CI);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_BRANCH_CDR_OP_CI);
+ be_visitor_union_branch_cdr_op_ci visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
case TAO_CodeGen::TAO_UNION_CDR_OP_CS:
- ctx.state (TAO_CodeGen::TAO_UNION_BRANCH_CDR_OP_CS);
- break;
+ {
+ ctx.state (TAO_CodeGen::TAO_UNION_BRANCH_CDR_OP_CS);
+ be_visitor_union_branch_cdr_op_cs visitor (&ctx);
+ status = node->accept (&visitor);
+ break;
+ }
default:
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_union::"
"visit_union_branch - "
- "Bad context state\n"
- ), -1);
+ "Bad context state\n"),
+ -1);
}
}
- be_visitor *visitor = tao_cg->make_visitor (&ctx);
- if (!visitor)
+ if (status == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_union::"
"visit_union_branch - "
- "NUL visitor\n"
- ), -1);
+ "failed to accept visitor\n"),
+ -1);
}
- // let the node accept this visitor
- if (node->accept (visitor) == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N:%l) be_visitor_union::"
- "visit_union_branch - "
- "failed to accept visitor\n"
- ), -1);
- }
- delete visitor;
return 0;
}