summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp47
1 files changed, 28 insertions, 19 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
index 7c2a402838b..c7b6dfc0e45 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
@@ -54,6 +54,9 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
if (idl_global->ami_call_back () == I_TRUE)
{
+ be_interface_type_strategy *old_strategy =
+ node->set_strategy (new be_interface_ami_handler_strategy (node));
+
// Set the context.
be_visitor_context ctx (*this->ctx_);
@@ -82,6 +85,8 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
-1);
}
delete visitor;
+
+ delete node->set_strategy (old_strategy);
}
// Grab the stream.
@@ -90,7 +95,7 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
// == STEP 1: generate the class name and class names we inherit ==
// generate the ifdefined macro for the _ptr type
- os->gen_ifdef_macro (node->flatname (), "_ptr");
+ os->gen_ifdef_macro (node->flat_name (), "_ptr");
// the following two are required to be under the ifdef macro to avoid
@@ -106,7 +111,7 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
os->gen_endif ();
// generate the ifdefined macro for the var type
- os->gen_ifdef_macro (node->flatname (), "_var");
+ os->gen_ifdef_macro (node->flat_name (), "_var");
// generate the _var declaration
if (node->gen_var_defn () == -1)
@@ -119,7 +124,7 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
os->gen_endif ();
// generate the ifdef macro for the _out class
- os->gen_ifdef_macro (node->flatname (), "_out");
+ os->gen_ifdef_macro (node->flat_name (), "_out");
// generate the _out declaration - ORBOS/97-05-15 pg 16-20 spec
if (node->gen_out_defn () == -1)
@@ -133,10 +138,10 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
os->gen_endif ();
// now the interface definition itself
- os->gen_ifdef_macro (node->flatname ());
+ os->gen_ifdef_macro (node->flat_name ());
// now generate the class definition
- *os << "class " << idl_global->stub_export_macro ()
+ *os << "class " << idl_global->export_macro ()
<< " " << node->local_name ();
if (node->n_inherits () > 0) // node interface inherits from other
@@ -181,11 +186,11 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
// generate the _ptr_type and _var_type typedefs
// but we must protect against certain versions of g++
- << "#if !defined(__GNUC__) || !defined (ACE_HAS_GNUG_PRE_2_8)"
+ << "#if !defined(__GNUC__) || __GNUC__ > 2 || __GNUC_MINOR__ >= 8"
<< be_idt_nl
<< "typedef " << node->local_name () << "_ptr _ptr_type;" << be_nl
<< "typedef " << node->local_name () << "_var _var_type;" << be_uidt_nl
- << "#endif /* ! __GNUC__ || g++ >= 2.8 */\n" << be_idt_nl
+ << "#endif /* __GNUC__ */\n" << be_idt_nl
// generate the static _duplicate, _narrow, and _nil operations
<< "// the static operations" << be_nl
@@ -247,14 +252,12 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
// private copy constructor and assignment operator. These are not
// allowed, hence they are private.
- *os << "private:\n";
- os->incr_indent ();
+ *os << "private:" << be_idt_nl;
*os << node->local_name () << " (const " << node->local_name () << " &);"
<< be_nl
- << "void operator= (const " << node->local_name () << " &);\n";
-
- os->decr_indent ();
+ << "void operator= (const " << node->local_name () << " &);" << be_uidt_nl;
*os << "};\n\n";
+
os->gen_endif ();
// by using a visitor to declare and define the TypeCode, we have the
@@ -272,15 +275,19 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
"TypeCode declaration failed\n"
), -1);
}
-
+
// AMI
- // Generate code for the AMI Reply Handler.
+ // Generate code for the AMI Reply Handler.
if (idl_global->ami_call_back () == I_TRUE)
{
// = Generate the default stub code for Handler.
+ be_interface_type_strategy *old_strategy =
+ node->set_strategy (new be_interface_ami_handler_strategy (node));
+
+
// Set the context.
be_visitor_context ctx (*this->ctx_);
@@ -297,7 +304,7 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
"Bad visitor\n"),
-1);
}
-
+
// Call the visitor on this interface.
if (node->accept (visitor) == -1)
{
@@ -309,15 +316,15 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
-1);
}
delete visitor;
-
+
// = Generate the Servant Skeleton code.
// Set the context.
ctx = *this->ctx_;
-
+
// Set the state.
ctx.state (TAO_CodeGen::TAO_AMI_HANDLER_SERVANT_CH);
-
+
// Create the visitor.
visitor = tao_cg->make_visitor (&ctx);
if (!visitor)
@@ -328,7 +335,7 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
"Bad visitor\n"),
-1);
}
-
+
// call the visitor on this interface.
if (node->accept (visitor) == -1)
{
@@ -340,6 +347,8 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
-1);
}
delete visitor;
+
+ delete node->set_strategy (old_strategy);
}
node->cli_hdr_gen (I_TRUE);