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.cpp65
1 files changed, 44 insertions, 21 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 16f96517ed7..cb88a9a04ad 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
@@ -54,14 +54,14 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
if (idl_global->ami_call_back () == I_TRUE)
{
- be_interface_type_strategy *old_strategy =
+ 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_);
// Set the state.
- ctx.state (TAO_CodeGen::TAO_AMI_HANDLER_INTERFACE_FWD_CH);
+ ctx.state (TAO_CodeGen::TAO_AMI_HANDLER_FWD_CH);
// Create the visitor.
be_visitor *visitor = tao_cg->make_visitor (&ctx);
@@ -199,21 +199,17 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
<< "static " << node->local_name () << "_ptr "
<< "_narrow (" << be_idt << be_idt_nl
<< "CORBA::Object_ptr obj," << be_nl
- << "CORBA::Environment &env = " << be_idt_nl
- << "TAO_default_environment ()"
- << be_uidt << be_uidt_nl
- << ");" << be_uidt_nl;
-
- // There's no need for an _unchecked_narrow for locality constraint object.
- if (!idl_global->gen_locality_constraint ())
- *os << "static " << node->local_name () << "_ptr "
- << "_unchecked_narrow (" << be_idt << be_idt_nl
- << "CORBA::Object_ptr obj," << be_nl
- << "CORBA::Environment &env = " << be_idt_nl
- << "TAO_default_environment ()"
- << be_uidt << be_uidt_nl
- << ");" << be_uidt_nl;
-
+ << "CORBA::Environment &env = " << be_idt_nl
+ << "TAO_default_environment ()"
+ << be_uidt << be_uidt_nl
+ << ");" << be_uidt_nl
+ << "static " << node->local_name () << "_ptr "
+ << "_unchecked_narrow (" << be_idt << be_idt_nl
+ << "CORBA::Object_ptr obj," << be_nl
+ << "CORBA::Environment &env = " << be_idt_nl
+ << "TAO_default_environment ()"
+ << be_uidt << be_uidt_nl
+ << ");" << be_uidt_nl;
// This method is defined in the header file to workaround old
// g++ problems
*os << "static " << node->local_name () << "_ptr _nil (void)"
@@ -225,7 +221,6 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
// generate code for the interface definition by traversing thru the
// elements of its scope. We depend on the front-end to have made sure
// that only legal syntactic elements appear in our scope.
-
if (this->visit_scope (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
@@ -289,7 +284,7 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
{
// = Generate the default stub code for Handler.
- be_interface_type_strategy *old_strategy =
+ be_interface_type_strategy *old_strategy =
node->set_strategy (new be_interface_ami_handler_strategy (node));
@@ -297,7 +292,7 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
be_visitor_context ctx (*this->ctx_);
// Set the state.
- ctx.state (TAO_CodeGen::TAO_AMI_HANDLER_INTERFACE_CH);
+ ctx.state (TAO_CodeGen::TAO_AMI_HANDLER_STUB_CH);
// Create the visitor.
be_visitor *visitor = tao_cg->make_visitor (&ctx);
@@ -321,9 +316,37 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
-1);
}
delete visitor;
- visitor = 0;
+ // = 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)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_interface_ch::"
+ "visit_interface - "
+ "Bad visitor\n"),
+ -1);
+ }
+ // call the visitor on this interface.
+ if (node->accept (visitor) == -1)
+ {
+ delete visitor;
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_interface_ch::"
+ "visit_interface - "
+ "code gen for ami handler failed\n"),
+ -1);
+ }
+ delete visitor;
delete node->set_strategy (old_strategy);
}