diff options
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.cpp | 65 |
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); } |