summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp285
1 files changed, 144 insertions, 141 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp b/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp
index e879b5675fd..7a60fc6bbbb 100644
--- a/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp
@@ -37,192 +37,195 @@ be_visitor_union_ch::~be_visitor_union_ch (void)
int be_visitor_union_ch::visit_union (be_union *node)
{
+ if (node->cli_hdr_gen () || node->imported ())
+ {
+ return 0;
+ }
+
// 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);
- if (!node->cli_hdr_gen () && !node->imported ())
- {
- TAO_OutStream *os = this->ctx_->stream ();
+ TAO_OutStream *os = this->ctx_->stream ();
- // Generate the ifdefined macro for the union type.
- os->gen_ifdef_macro (node->flat_name ());
+ *os << be_nl << "// TAO_IDL - Generated from" << be_nl
+ << "// " << __FILE__ << ":" << __LINE__ << be_nl;
- *os << "class " << node->local_name () << "_var;" << be_nl << be_nl;
+ // Generate the ifdefined macro for the union type.
+ os->gen_ifdef_macro (node->flat_name ());
- *os << "class " << be_global->stub_export_macro () << " "
- << node->local_name () << be_nl
- << "{" << be_nl
- << "public:" << be_idt_nl
+ *os << "class " << node->local_name () << "_var;" << be_nl << be_nl;
- // Generate default and copy constructors.
- << node->local_name () << " (void);" << be_nl
- << node->local_name () << " (const " << node->local_name ()
- << " &);" << be_nl
- // Generate destructor.
- << "~" << node->local_name () << " (void);" << be_nl;
+ *os << "class " << be_global->stub_export_macro () << " "
+ << node->local_name () << be_nl
+ << "{" << be_nl
+ << "public:" << be_idt_nl
- *os << "static void _tao_any_destructor (void*);"
- << be_nl << be_nl;
+ // Generate default and copy constructors.
+ << node->local_name () << " (void);" << be_nl
+ << node->local_name () << " (const " << node->local_name ()
+ << " &);" << be_nl
+ // Generate destructor.
+ << "~" << node->local_name () << " (void);" << be_nl;
- // Generate assignment operator.
- *os << node->local_name () << " &operator= (const "
- << node->local_name () << " &);" << be_nl << be_nl;
+ *os << "static void _tao_any_destructor (void*);"
+ << be_nl << be_nl;
- // Retrieve the disriminant type.
- be_type *bt = be_type::narrow_from_decl (node->disc_type ());
+ // Generate assignment operator.
+ *os << node->local_name () << " &operator= (const "
+ << node->local_name () << " &);" << be_nl << be_nl;
- if (!bt)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N:%l) be_visitor_union_ch::"
- "visit_union - "
- "bad disciminant type\n"),
- -1);
- }
+ // Retrieve the disriminant type.
+ be_type *bt = be_type::narrow_from_decl (node->disc_type ());
- // The discriminant type may have to be defined here if it was an enum
- // declaration inside of the union statement.
+ if (!bt)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_union_ch::"
+ "visit_union - "
+ "bad disciminant type\n"),
+ -1);
+ }
- ctx.state (TAO_CodeGen::TAO_UNION_DISCTYPEDEFN_CH);
- be_visitor_union_discriminant_ch ud_visitor (&ctx);
+ // The discriminant type may have to be defined here if it was an enum
+ // declaration inside of the union statement.
- if (bt->accept (&ud_visitor) == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N:%l) be_visitor_union_ch::"
- " visit_union - "
- "codegen for discriminant failed\n"),
- -1);
- }
+ ctx.state (TAO_CodeGen::TAO_UNION_DISCTYPEDEFN_CH);
+ be_visitor_union_discriminant_ch ud_visitor (&ctx);
- // Generate the _var_type typedef.
- *os << "typedef " << node->local_name () << "_var _var_type;"
- << be_nl << be_nl;
+ if (bt->accept (&ud_visitor) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_union_ch::"
+ " visit_union - "
+ "codegen for discriminant failed\n"),
+ -1);
+ }
- // Now generate the public defn for the union branch members. For this,
- // set our state to reflect what we are aiming to do.
- this->ctx_->state (TAO_CodeGen::TAO_UNION_PUBLIC_CH);
+ // Generate the _var_type typedef.
+ *os << "typedef " << node->local_name () << "_var _var_type;"
+ << be_nl << be_nl;
- if (this->visit_scope (node) == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N:%l) be_visitor_union_ch::"
- "visit_union - "
- "codegen for public defn of union members\n"),
- -1);
- }
+ // Now generate the public defn for the union branch members. For this,
+ // set our state to reflect what we are aiming to do.
+ this->ctx_->state (TAO_CodeGen::TAO_UNION_PUBLIC_CH);
- // Now check if we need to generate the _default () method.
- be_union::DefaultValue dv;
+ if (this->visit_scope (node) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_union_ch::"
+ "visit_union - "
+ "codegen for public defn of union members\n"),
+ -1);
+ }
- if (node->default_value (dv) == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N:%l) be_visitor_union_ch::"
- "visit_union - "
- "computing default value failed\n"),
- -1);
- }
+ // Now check if we need to generate the _default () method.
+ be_union::DefaultValue dv;
- if ((dv.computed_ != 0) && (node->default_index () == -1))
- {
- // Only if all cases are not covered AND there is no explicit
- // default, we get the _default () method.
- *os << "void _default (void);";
- }
+ if (node->default_value (dv) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_union_ch::"
+ "visit_union - "
+ "computing default value failed\n"),
+ -1);
+ }
+
+ if ((dv.computed_ != 0) && (node->default_index () == -1))
+ {
+ // Only if all cases are not covered AND there is no explicit
+ // default, we get the _default () method.
+ *os << "void _default (void);";
+ }
- *os << be_uidt_nl;
+ *os << be_uidt_nl;
- // Now generate the private data members of the union.
- *os << "private:" << be_idt_nl;
- *os << bt->nested_type_name (node) << " disc_;" << be_nl;
- *os << bt->nested_type_name (node) << " holder_;" << be_nl << be_nl;
- // Emit the ACE_NESTED_CLASS macro.
+ // Now generate the private data members of the union.
+ *os << "private:" << be_idt_nl;
+ *os << bt->nested_type_name (node) << " disc_;" << be_nl;
+ *os << bt->nested_type_name (node) << " holder_;" << be_nl << be_nl;
+ // Emit the ACE_NESTED_CLASS macro.
- // The members are inside of a union.
- *os << "union" << be_nl;
- *os << "{" << be_idt_nl;
+ // The members are inside of a union.
+ *os << "union" << be_nl;
+ *os << "{" << be_idt_nl;
- this->ctx_->state (TAO_CodeGen::TAO_UNION_PRIVATE_CH);
+ this->ctx_->state (TAO_CodeGen::TAO_UNION_PRIVATE_CH);
- if (this->visit_scope (node) == -1)
+ if (this->visit_scope (node) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_union_ch::"
+ "visit_union - "
+ "codegen for private members of union\n"),
+ -1);
+ }
+
+ *os << be_uidt_nl;
+ *os << "} u_;" << be_nl << be_nl;
+
+ // The reset method (TAO extension).
+ *os << "// TAO extension." << be_nl;
+ *os << "void _reset (" << bt->nested_type_name (node)
+ << ", CORBA::Boolean /* finalize */);" << be_nl;
+ *os << "// Frees any allocated storage." << be_uidt_nl;
+ *os << "}; //" << node->name () << be_nl << be_nl;
+
+ if (be_global->tc_support ())
+ {
+ ctx = *this->ctx_;
+ ctx.state (TAO_CodeGen::TAO_TYPECODE_DECL);
+ be_visitor_typecode_decl tc_visitor (&ctx);
+
+ if (node->accept (&tc_visitor) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_union_ch::"
"visit_union - "
- "codegen for private members of union\n"),
+ "TypeCode declaration failed\n"),
-1);
}
+ }
- *os << be_uidt_nl;
- *os << "} u_;" << be_nl << be_nl;
+ os->gen_endif ();
- // The reset method (TAO extension).
- *os << "// TAO extension." << be_nl;
- *os << "void _reset (" << bt->nested_type_name (node)
- << ", CORBA::Boolean /* finalize */);" << be_nl;
- *os << "// Frees any allocated storage." << be_nl << be_nl;
- *os << "}; //" << node->name () << be_nl << be_nl;
+ // Generate the ifdefined macro for the _var type.
+ os->gen_ifdef_macro (node->flat_name (), "_var");
- if (be_global->tc_support ())
- {
- ctx = *this->ctx_;
- ctx.state (TAO_CodeGen::TAO_TYPECODE_DECL);
- be_visitor_typecode_decl tc_visitor (&ctx);
-
- if (node->accept (&tc_visitor) == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N:%l) be_visitor_union_ch::"
- "visit_union - "
- "TypeCode declaration failed\n"),
- -1);
- }
- }
+ // Generate var definition.
+ if (node->gen_var_defn () == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_union_ch::"
+ "visit_union - "
+ "codegen for _var\n"), -1);
+ }
- os->gen_endif ();
+ os->gen_endif ();
- // Generate the ifdefined macro for the _var type.
- os->gen_ifdef_macro (node->flat_name (), "_var");
+ // Generate the ifdefined macro for the array type.
+ os->gen_ifdef_macro (node->flat_name (), "_out");
- // Generate var definition.
- if (node->gen_var_defn () == -1)
+ // A class is generated for an out defn only for a variable
+ // length struct.
+ if (node->size_type () == AST_Type::VARIABLE)
+ {
+ if (node->gen_out_defn () == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_union_ch::"
"visit_union - "
- "codegen for _var\n"), -1);
- }
-
- os->gen_endif ();
-
- // Generate the ifdefined macro for the array type.
- os->gen_ifdef_macro (node->flat_name (), "_out");
-
- // A class is generated for an out defn only for a variable
- // length struct.
- if (node->size_type () == AST_Type::VARIABLE)
- {
- if (node->gen_out_defn () == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N:%l) be_visitor_union_ch::"
- "visit_union - "
- "codegen for _out\n"), -1);
- }
- }
- else
- {
- *os << "typedef " << node->local_name () << " &"
- << node->local_name () << "_out;" << be_nl << be_nl;
+ "codegen for _out\n"), -1);
}
-
- os->gen_endif ();
-
- node->cli_hdr_gen (I_TRUE);
+ }
+ else
+ {
+ *os << "typedef " << node->local_name () << " &"
+ << node->local_name () << "_out;" << be_nl << be_nl;
}
+ os->gen_endif ();
+ node->cli_hdr_gen (I_TRUE);
return 0;
}