diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-10-13 15:43:55 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-10-13 15:43:55 +0000 |
commit | bbf97afcb91f0cfadd30a49758bbf15df5e54f23 (patch) | |
tree | 84e8ddbdb43c7c936b63a994f74620457e376769 | |
parent | ea731c7981ff4e47c066f17aa0aeb8923d7c06aa (diff) | |
download | ATCD-bbf97afcb91f0cfadd30a49758bbf15df5e54f23.tar.gz |
ChangeLogTag: Tue Oct 13 15:36:48 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r-- | TAO/ChangeLog | 34 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_interface.cpp | 6 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_provides.cpp | 206 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_component/component_svh.cpp | 82 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_component/component_svs.cpp | 142 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_extended_port.cpp | 1 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_extended_port/extended_port.cpp | 2 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svh.cpp | 37 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svs.cpp | 70 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_interface.h | 3 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_provides.h | 20 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_extended_port.h | 6 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port.h | 2 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svh.h | 14 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svs.h | 49 | ||||
-rw-r--r-- | TAO/TAO_IDL/narrow/narrow.cpp | 5 |
16 files changed, 523 insertions, 156 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 182cb94217c..f6d1cdb663c 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,6 +1,38 @@ +Tue Oct 13 15:36:48 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu> + + * TAO_IDL/be/be_visitor_extended_port/extended_port_svs.cpp: + * TAO_IDL/be_include/be_visitor_extended_port/extended_port_svs.h: + + New files, containing new visitor that generates the implementation + of the facet servant class. + + * TAO_IDL/be/be_provides.cpp: + * TAO_IDL/be/be_interface.cpp: + * TAO_IDL/be_include/be_interface.h: + * TAO_IDL/be_include/be_provides.h: + + Factored common code generation into the appropriate nodes. + + * TAO_IDL/narrow/narrow.cpp: + + Added port types to the group of types that can be + transformed from scope to decl and vice versa. + + * TAO_IDL/be/be_visitor_extended_port/extended_port.cpp: + * TAO_IDL/be/be_visitor_extended_port/extended_port_svh.cpp: + * TAO_IDL/be/be_visitor_component/component_svh.cpp: + * TAO_IDL/be/be_visitor_component/component_svs.cpp: + * TAO_IDL/be/be_visitor_extended_port.cpp: + * TAO_IDL/be_include/be_visitor_extended_port.h: + * TAO_IDL/be_include/be_visitor_extended_port/extended_port.h: + * TAO_IDL/be_include/be_visitor_extended_port/extended_port_svh.h: + + Added new files as includes, factored common visitor code into + base class, other minor changes. + Mon Oct 12 14:03:48 CDT 2009 Johnny Willemsen <jwillemsen@remedy.nl> - * TAO version 1.7.4 released. + * TAO version 1.7.4 released. Local Variables: mode: change-log diff --git a/TAO/TAO_IDL/be/be_interface.cpp b/TAO/TAO_IDL/be/be_interface.cpp index 0b2add94e57..c0826001e02 100644 --- a/TAO/TAO_IDL/be/be_interface.cpp +++ b/TAO/TAO_IDL/be/be_interface.cpp @@ -1403,8 +1403,8 @@ be_interface::analyze_parentage (void) // **************************************************************** -be_code_emitter_wrapper:: -be_code_emitter_wrapper (be_interface::tao_code_emitter emitter) +be_code_emitter_wrapper::be_code_emitter_wrapper ( + be_interface::tao_code_emitter emitter) : emitter_ (emitter) { } @@ -1419,6 +1419,8 @@ be_code_emitter_wrapper::emit (be_interface *derived_interface, output_stream); } +// **************************************************************** + // Template method that traverses the inheritance graph in a breadth-first // style. The actual work on each element in the inheritance graph is carried // out by the function passed as argument. diff --git a/TAO/TAO_IDL/be/be_provides.cpp b/TAO/TAO_IDL/be/be_provides.cpp index 9cf23fa27d4..0124c9ddc1c 100644 --- a/TAO/TAO_IDL/be/be_provides.cpp +++ b/TAO/TAO_IDL/be/be_provides.cpp @@ -2,9 +2,15 @@ #include "be_provides.h" #include "be_interface.h" +#include "be_operation.h" +#include "be_attribute.h" #include "be_visitor.h" #include "be_helper.h" +#include "be_visitor_operation.h" +#include "be_visitor_attribute.h" +#include "be_visitor_context.h" + #include "utl_identifier.h" #include "nr_extern.h" @@ -32,7 +38,7 @@ be_provides::~be_provides (void) } int -be_provides::gen_facet (TAO_OutStream &os) +be_provides::gen_facet_svnt_decl (TAO_OutStream &os) { be_type *impl = be_type::narrow_from_decl (this->provides_type ()); @@ -126,6 +132,123 @@ be_provides::gen_facet (TAO_OutStream &os) } int +be_provides::gen_facet_svnt_defn (TAO_OutStream &os) +{ + be_type *impl = + be_type::narrow_from_decl (this->provides_type ()); + + if (impl->svnt_src_facet_gen ()) + { + return 0; + } + + // No '_cxx_' prefix. + const char *lname = + impl->original_local_name ()->get_string (); + + be_decl *scope = + be_scope::narrow_from_scope (impl->defined_in ())->decl (); + + ACE_CString sname_str (scope->full_name ()); + + const char *sname = sname_str.c_str (); + const char *global = (sname_str == "" ? "" : "::"); + + ACE_CString suffix (scope->flat_name ()); + + if (suffix != "") + { + suffix = ACE_CString ("_") + suffix; + } + + os << be_nl << be_nl + << "namespace CIAO_FACET" << suffix.c_str () << be_nl + << "{" << be_idt_nl; + + os << lname << "_Servant::" + << lname << "_Servant (" << be_idt << be_idt_nl + << global << sname << "::CCM_" + << lname << "_ptr executor," << be_nl + << "::Components::CCMContext_ptr ctx)" << be_uidt_nl + << ": executor_ ( " << global << sname + << "::CCM_" << lname + << "::_duplicate (executor))," << be_idt_nl + << "ctx_ ( ::Components::CCMContext::_duplicate (ctx))" + << be_uidt << be_uidt_nl + << "{" << be_nl + << "}"; + + os << be_nl << be_nl + << lname << "_Servant::~" + << lname << "_Servant (void)" << be_nl + << "{" << be_nl + << "}"; + + bool is_intf = impl->node_type () == AST_Decl::NT_interface; + + if (is_intf) + { + be_interface *op_scope = + be_interface::narrow_from_decl (impl); + + os << be_nl << be_nl + << "// All facet operations and attributes."; + + /// The overload of traverse_inheritance_graph() used here + /// doesn't automatically prime the queues. + op_scope->get_insert_queue ().reset (); + op_scope->get_del_queue ().reset (); + op_scope->get_insert_queue ().enqueue_tail (op_scope); + + be_facet_op_attr_defn_helper helper (op_scope); + + int status = + op_scope->traverse_inheritance_graph (helper, + &os, + false, + false); + + if (status == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("be_provides::") + ACE_TEXT ("gen_facet_svnt_defn - ") + ACE_TEXT ("traverse_inheritance_graph() ") + ACE_TEXT ("failed\n")), + -1); + } + } + + os << be_nl << be_nl + << "::CORBA::Object_ptr" << be_nl + << lname << "_Servant::_get_component (void)" + << be_nl + << "{" << be_idt_nl + << "::Components::SessionContext_var sc =" << be_idt_nl + << "::Components::SessionContext::_narrow (this->ctx_.in ());" + << be_uidt_nl << be_nl + << "if (! ::CORBA::is_nil (sc.in ()))" << be_idt_nl + << "{" << be_idt_nl + << "return sc->get_CCM_object ();" << be_uidt_nl + << "}" << be_uidt_nl << be_nl + << "::Components::EntityContext_var ec =" << be_idt_nl + << "::Components::EntityContext::_narrow (this->ctx_.in ());" + << be_uidt_nl << be_nl + << "if (! ::CORBA::is_nil (ec.in ()))" << be_idt_nl + << "{" << be_idt_nl + << "return ec->get_CCM_object ();" << be_uidt_nl + << "}" << be_uidt_nl << be_nl + << "throw ::CORBA::INTERNAL ();" << be_uidt_nl + << "}"; + + os << be_uidt_nl + << "}"; + + impl->svnt_src_facet_gen (true); + return 0; +} + +int be_provides::accept (be_visitor *visitor) { return visitor->visit_provides (this); @@ -139,3 +262,84 @@ be_provides::destroy (void) } IMPL_NARROW_FROM_DECL (be_provides) + +// ******************************************** + +be_facet_op_attr_defn_helper::be_facet_op_attr_defn_helper ( + be_interface *op_scope) + : op_scope_ (op_scope) +{ +} + +int +be_facet_op_attr_defn_helper::emit (be_interface * /* derived_interface */, + TAO_OutStream *os, + be_interface *base_interface) +{ + if (base_interface->node_type () == AST_Decl::NT_component) + { + return 0; + } + + be_visitor_context ctx; + ctx.stream (os); + ctx.state (TAO_CodeGen::TAO_ROOT_SVS); + + for (UTL_ScopeActiveIterator i (op_scope_, UTL_Scope::IK_decls); + !i.is_done (); + i.next ()) + { + AST_Decl *d = i.item (); + AST_Decl::NodeType nt = d->node_type (); + + switch (nt) + { + case AST_Decl::NT_op: + { + be_operation *op = + be_operation::narrow_from_decl (d); + + be_visitor_operation_svs v (&ctx); + v.for_facets (true); + v.scope (op_scope_); + + if (v.visit_operation (op) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("be_facet_op_attr_defn_helper") + ACE_TEXT ("::emit - ") + ACE_TEXT ("visit_operation() failed\n")), + -1); + } + + break; + } + case AST_Decl::NT_attr: + { + be_attribute *attr = + be_attribute::narrow_from_decl (d); + + be_visitor_attribute v (&ctx); + v.op_scope (op_scope_); + + if (v.visit_attribute (attr) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("be_facet_op_attr_defn_helper") + ACE_TEXT ("::emit - ") + ACE_TEXT ("visit_attribute() failed\n")), + -1); + } + + break; + } + default: + continue; + } + } + + return 0; +} + +// ******************************************** + diff --git a/TAO/TAO_IDL/be/be_visitor_component/component_svh.cpp b/TAO/TAO_IDL/be/be_visitor_component/component_svh.cpp index fb65af98930..97257994785 100644 --- a/TAO/TAO_IDL/be/be_visitor_component/component_svh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_component/component_svh.cpp @@ -103,10 +103,9 @@ be_visitor_component_svh::visit_attribute (be_attribute *node) int be_visitor_component_svh::visit_extended_port ( - be_extended_port *node) + be_extended_port *) { - be_visitor_extended_port_svh visitor (this->ctx_); - return visitor.visit_extended_port (node); + return 0; } int @@ -126,44 +125,59 @@ be_visitor_component_svh::gen_facets (void) AST_Decl *d = si.item (); AST_Decl::NodeType nt = d->node_type (); - if (nt == AST_Decl::NT_provides) + switch (nt) { - be_provides *p = - be_provides::narrow_from_decl (d); - - if (p->gen_facet (os_) == -1) + case AST_Decl::NT_provides: { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_component_svh::gen_facets - " - "gen_facet() failed\n"), - -1); + be_provides *p = + be_provides::narrow_from_decl (d); + + if (p->gen_facet_svnt_decl (os_) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("be_visitor_component_svh") + ACE_TEXT ("::gen_facets - ") + ACE_TEXT ("gen_facet_svnt_decl() ") + ACE_TEXT ("failed\n")), + -1); + } + + break; } - } - else if (nt == AST_Decl::NT_ext_port) - { - be_extended_port *ep = - be_extended_port::narrow_from_decl (d); - - if (this->visit_extended_port (ep) == -1) + case AST_Decl::NT_ext_port: { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_component_svh::gen_facets - " - "visit_extended_port() failed\n"), - -1); + be_extended_port *ep = + be_extended_port::narrow_from_decl (d); + + be_visitor_extended_port_facet_svh visitor (this->ctx_); + + if (visitor.visit_extended_port (ep) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "be_visitor_component_svh::gen_facets - " + "visit_extended_port() failed\n"), + -1); + } + + break; } - } - else if (nt == AST_Decl::NT_mirror_port) - { - be_mirror_port *mp = - be_mirror_port::narrow_from_decl (d); - - if (this->visit_mirror_port (mp) == -1) + case AST_Decl::NT_mirror_port: { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_component_svh::gen_facets - " - "visit_mirror_port() failed\n"), - -1); + be_mirror_port *mp = + be_mirror_port::narrow_from_decl (d); + + if (this->visit_mirror_port (mp) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "be_visitor_component_svh::gen_facets - " + "visit_mirror_port() failed\n"), + -1); + } + + break; } + default: + continue; } } diff --git a/TAO/TAO_IDL/be/be_visitor_component/component_svs.cpp b/TAO/TAO_IDL/be/be_visitor_component/component_svs.cpp index 0da5981e58d..da2158211fb 100644 --- a/TAO/TAO_IDL/be/be_visitor_component/component_svs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_component/component_svs.cpp @@ -131,112 +131,48 @@ be_visitor_component_svs::gen_facets (void) si.next ()) { AST_Decl *d = si.item (); - - if (d->node_type () != AST_Decl::NT_provides) - { - continue; - } - - AST_Provides *p = - AST_Provides::narrow_from_decl (d); - - be_type *impl = - be_type::narrow_from_decl (p->provides_type ()); - - if (impl->svnt_src_facet_gen ()) - { - continue; - } - - // No '_cxx_' prefix. - const char *lname = - impl->original_local_name ()->get_string (); - - be_decl *scope = - be_scope::narrow_from_scope (impl->defined_in ())->decl (); - - ACE_CString sname_str (scope->full_name ()); - - const char *sname = sname_str.c_str (); - const char *global = (sname_str == "" ? "" : "::"); - - ACE_CString suffix (scope->flat_name ()); - - if (suffix != "") - { - suffix = ACE_CString ("_") + suffix; - } - - os_ << be_nl << be_nl - << "namespace CIAO_FACET" << suffix.c_str () << be_nl - << "{" << be_idt_nl; - - os_ << lname << "_Servant::" - << lname << "_Servant (" << be_idt << be_idt_nl - << global << sname << "::CCM_" - << lname << "_ptr executor," << be_nl - << "::Components::CCMContext_ptr ctx)" << be_uidt_nl - << ": executor_ ( " << global << sname - << "::CCM_" << lname - << "::_duplicate (executor))," << be_idt_nl - << "ctx_ ( ::Components::CCMContext::_duplicate (ctx))" - << be_uidt << be_uidt_nl - << "{" << be_nl - << "}"; - - os_ << be_nl << be_nl - << lname << "_Servant::~" - << lname << "_Servant (void)" << be_nl - << "{" << be_nl - << "}"; - - be_visitor_component_svs::in_facets_ = true; - bool is_intf = impl->node_type () == AST_Decl::NT_interface; - - if (is_intf) + AST_Decl::NodeType nt = d->node_type (); + + switch (nt) { - be_interface *intf = - be_interface::narrow_from_decl (impl); - - this->op_scope_ = intf; - - if (this->gen_facet_ops_attrs (intf) == -1) + case AST_Decl::NT_provides: + { + be_provides *p = + be_provides::narrow_from_decl (d); + + if (p->gen_facet_svnt_defn (os_) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("be_visitor_component_svs") + ACE_TEXT ("::gen_facets - ") + ACE_TEXT ("gen_facet_svnt_defn() ") + ACE_TEXT ("failed\n")), + -1); + } + + break; + } + case AST_Decl::NT_ext_port: { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_component_svs::gen_facet - " - "gen_facet_ops_attrs() failed\n"), - -1); + be_extended_port *ep = + be_extended_port::narrow_from_decl (d); + + be_visitor_extended_port_facet_svs visitor (this->ctx_); + + if (visitor.visit_extended_port (ep) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "be_visitor_component_svs::gen_facets - " + "visit_extended_port() failed\n"), + -1); + } + + break; } + case AST_Decl::NT_mirror_port: + default: + continue; } - - be_visitor_component_svs::in_facets_ = false; - - os_ << be_nl << be_nl - << "::CORBA::Object_ptr" << be_nl - << lname << "_Servant::_get_component (void)" - << be_nl - << "{" << be_idt_nl - << "::Components::SessionContext_var sc =" << be_idt_nl - << "::Components::SessionContext::_narrow (this->ctx_.in ());" - << be_uidt_nl << be_nl - << "if (! ::CORBA::is_nil (sc.in ()))" << be_idt_nl - << "{" << be_idt_nl - << "return sc->get_CCM_object ();" << be_uidt_nl - << "}" << be_uidt_nl << be_nl - << "::Components::EntityContext_var ec =" << be_idt_nl - << "::Components::EntityContext::_narrow (this->ctx_.in ());" - << be_uidt_nl << be_nl - << "if (! ::CORBA::is_nil (ec.in ()))" << be_idt_nl - << "{" << be_idt_nl - << "return ec->get_CCM_object ();" << be_uidt_nl - << "}" << be_uidt_nl << be_nl - << "throw ::CORBA::INTERNAL ();" << be_uidt_nl - << "}"; - - os_ << be_uidt_nl - << "}"; - - impl->svnt_src_facet_gen (true); } return 0; @@ -2895,7 +2831,7 @@ Component_Op_Attr_Generator::Component_Op_Attr_Generator ( } int -Component_Op_Attr_Generator::emit (be_interface * /*derived_interface */, +Component_Op_Attr_Generator::emit (be_interface * /* derived_interface */, TAO_OutStream * /* os */, be_interface * base_interface) { diff --git a/TAO/TAO_IDL/be/be_visitor_extended_port.cpp b/TAO/TAO_IDL/be/be_visitor_extended_port.cpp index 19309fefc11..be34b780713 100644 --- a/TAO/TAO_IDL/be/be_visitor_extended_port.cpp +++ b/TAO/TAO_IDL/be/be_visitor_extended_port.cpp @@ -22,4 +22,5 @@ #include "be_visitor_extended_port/extended_port.cpp" #include "be_visitor_extended_port/extended_port_svh.cpp" +#include "be_visitor_extended_port/extended_port_svs.cpp" diff --git a/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port.cpp b/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port.cpp index 1e9904a16a9..2504968ab1d 100644 --- a/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port.cpp +++ b/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port.cpp @@ -24,7 +24,7 @@ be_visitor_extended_port::be_visitor_extended_port ( be_visitor_context *ctx) - : be_visitor_decl (ctx), + : be_visitor_scope (ctx), template_args_ (0), port_type_ (0) { diff --git a/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svh.cpp b/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svh.cpp index a1246061eb6..c8038cafbf1 100644 --- a/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svh.cpp @@ -22,20 +22,49 @@ // Extended port visitor for server header // ****************************************************** -be_visitor_extended_port_svh::be_visitor_extended_port_svh ( +be_visitor_extended_port_facet_svh::be_visitor_extended_port_facet_svh ( be_visitor_context *ctx) : be_visitor_extended_port (ctx) { } -be_visitor_extended_port_svh::~be_visitor_extended_port_svh (void) +be_visitor_extended_port_facet_svh::~be_visitor_extended_port_facet_svh ( + void) { } int -be_visitor_extended_port_svh::visit_extended_port ( - be_extended_port *) +be_visitor_extended_port_facet_svh::visit_extended_port ( + be_extended_port *node) { + be_porttype *pt = + be_porttype::narrow_from_decl (node->port_type ()); + + return this->visit_porttype (pt); +} + +int +be_visitor_extended_port_facet_svh::visit_porttype ( + be_porttype *node) +{ + return this->visit_scope (node); +} + +int +be_visitor_extended_port_facet_svh::visit_provides ( + be_provides *node) +{ + TAO_OutStream *os = this->ctx_->stream (); + + if (node->gen_facet_svnt_decl (*os) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("be_visitor_extended_port_facet_svh::") + ACE_TEXT ("visit_provides - ") + ACE_TEXT ("gen_facet_svnt_decl() failed\n")), + -1); + } + return 0; } diff --git a/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svs.cpp b/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svs.cpp new file mode 100644 index 00000000000..7a21808b2d3 --- /dev/null +++ b/TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svs.cpp @@ -0,0 +1,70 @@ +// +// $Id$ +// + +// ============================================================================ +// +// = LIBRARY +// TAO IDL +// +// = FILENAME +// extended_port_svs.cpp +// +// = DESCRIPTION +// Visitor generating code for extended ports in the servant source. +// +// = AUTHOR +// Jeff Parsons +// +// ============================================================================ + +// ****************************************************** +// Extended port visitor for facets in server source. +// ****************************************************** + +be_visitor_extended_port_facet_svs::be_visitor_extended_port_facet_svs ( + be_visitor_context *ctx) + : be_visitor_extended_port (ctx) +{ +} + +be_visitor_extended_port_facet_svs::~be_visitor_extended_port_facet_svs ( + void) +{ +} + +int +be_visitor_extended_port_facet_svs::visit_extended_port ( + be_extended_port *node) +{ + be_porttype *pt = + be_porttype::narrow_from_decl (node->port_type ()); + + return this->visit_porttype (pt); +} + +int +be_visitor_extended_port_facet_svs::visit_porttype ( + be_porttype *node) +{ + return this->visit_scope (node); +} + +int +be_visitor_extended_port_facet_svs::visit_provides ( + be_provides *node) +{ + TAO_OutStream *os = this->ctx_->stream (); + + if (node->gen_facet_svnt_defn (*os) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("be_visitor_extended_port_facet_svh::") + ACE_TEXT ("visit_provides - ") + ACE_TEXT ("gen_facet_svnt_defn() failed\n")), + -1); + } + + return 0; +} + diff --git a/TAO/TAO_IDL/be_include/be_interface.h b/TAO/TAO_IDL/be_include/be_interface.h index 7f7d1e5d539..1453c13461a 100644 --- a/TAO/TAO_IDL/be_include/be_interface.h +++ b/TAO/TAO_IDL/be_include/be_interface.h @@ -475,7 +475,8 @@ public: be_interface *base_interface) = 0; }; -class be_code_emitter_wrapper : public TAO_IDL_Inheritance_Hierarchy_Worker +class be_code_emitter_wrapper + : public TAO_IDL_Inheritance_Hierarchy_Worker { public: be_code_emitter_wrapper (be_interface::tao_code_emitter emitter); diff --git a/TAO/TAO_IDL/be_include/be_provides.h b/TAO/TAO_IDL/be_include/be_provides.h index 312d354dd84..48078440ada 100644 --- a/TAO/TAO_IDL/be_include/be_provides.h +++ b/TAO/TAO_IDL/be_include/be_provides.h @@ -7,6 +7,7 @@ #include "ast_provides.h" #include "be_field.h" +#include "be_interface.h" class be_interface; class be_visitor; @@ -21,7 +22,8 @@ public: virtual ~be_provides (void); // Common code called by visitors. - int gen_facet (TAO_OutStream &os); + int gen_facet_svnt_decl (TAO_OutStream &os); + int gen_facet_svnt_defn (TAO_OutStream &os); // Narrowing. DEF_NARROW_FROM_DECL(be_provides); @@ -33,5 +35,21 @@ public: virtual void destroy (void); }; +// ==================================================== + +class be_facet_op_attr_defn_helper + : public TAO_IDL_Inheritance_Hierarchy_Worker +{ +public: + be_facet_op_attr_defn_helper (be_interface *op_scope); + + virtual int emit (be_interface *derived_interface, + TAO_OutStream *os, + be_interface *base_interface); + +private: + be_interface *op_scope_; +}; + #endif // BE_PROVIDES_H diff --git a/TAO/TAO_IDL/be_include/be_visitor_extended_port.h b/TAO/TAO_IDL/be_include/be_visitor_extended_port.h index 51b77819eee..badcd3d50f5 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_extended_port.h +++ b/TAO/TAO_IDL/be_include/be_visitor_extended_port.h @@ -25,10 +25,14 @@ #include "ast_template_common.h" #include "be_porttype.h" +#include "be_extended_port.h" +#include "be_provides.h" -#include "be_visitor_decl.h" +#include "be_visitor_scope.h" +#include "be_visitor_context.h" #include "be_visitor_extended_port/extended_port.h" #include "be_visitor_extended_port/extended_port_svh.h" +#include "be_visitor_extended_port/extended_port_svs.h" #endif /* TAO_BE_VISITOR_EXTENDED_PORT_H */ diff --git a/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port.h b/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port.h index 01510fae7c1..aa85d4ec558 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port.h +++ b/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port.h @@ -22,7 +22,7 @@ #define _BE_VISITOR_EXTENDED_PORT_EXTENEDED_PORT_H_ class be_visitor_extended_port - : public be_visitor_decl + : public be_visitor_scope { // // = TITLE diff --git a/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svh.h b/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svh.h index b0a44447cfe..e8b23a71c19 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svh.h +++ b/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svh.h @@ -22,24 +22,26 @@ #ifndef _BE_VISITOR_EXTENDED_PORT_EXTENEDED_PORT_SVH_H_ #define _BE_VISITOR_EXTENDED_PORT_EXTENEDED_PORT_SVH_H_ -class be_visitor_extended_port_svh +class be_visitor_extended_port_facet_svh : public be_visitor_extended_port { // // = TITLE - // be_visitor_extended_port_svh + // be_visitor_extended_port_facet_svh // // = DESCRIPTION - // This is a concrete visitor to generate the servant - // header code for an extended port. + // This is a concrete visitor to generate the facet + // classes for an extended port. // // public: - be_visitor_extended_port_svh (be_visitor_context *ctx); + be_visitor_extended_port_facet_svh (be_visitor_context *ctx); - ~be_visitor_extended_port_svh (void); + ~be_visitor_extended_port_facet_svh (void); virtual int visit_extended_port (be_extended_port *node); + virtual int visit_porttype (be_porttype *node); + virtual int visit_provides (be_provides *node); }; #endif /* _BE_VISITOR_EXTENDED_PORT_EXTENEDED_PORT_SVH_H_ */ diff --git a/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svs.h b/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svs.h new file mode 100644 index 00000000000..3699d703551 --- /dev/null +++ b/TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svs.h @@ -0,0 +1,49 @@ +// +// $Id$ +// +/* -*- c++ -*- */ +// ============================================================================ +// +// = LIBRARY +// TAO IDL +// +// = FILENAME +// extended_port_svs.h +// +// = DESCRIPTION +// Concrete visitor for the extended port node. +// This provides for code generation in the servant source +// +// = AUTHOR +// Jeff Parsons +// +// ============================================================================ + +#ifndef _BE_VISITOR_EXTENDED_PORT_EXTENEDED_PORT_SVS_H_ +#define _BE_VISITOR_EXTENDED_PORT_EXTENEDED_PORT_SVS_H_ + +class be_visitor_extended_port_facet_svs + : public be_visitor_extended_port +{ + // + // = TITLE + // be_visitor_extended_port_facet_svs + // + // = DESCRIPTION + // This is a concrete visitor to generate the facet + // class implementations for an extended port. + // + // +public: + be_visitor_extended_port_facet_svs (be_visitor_context *ctx); + + ~be_visitor_extended_port_facet_svs (void); + + virtual int visit_extended_port (be_extended_port *node); + virtual int visit_porttype (be_porttype *node); + virtual int visit_provides (be_provides *node); +}; + +#endif /* _BE_VISITOR_EXTENDED_PORT_EXTENEDED_PORT_SVS_H_ */ + + diff --git a/TAO/TAO_IDL/narrow/narrow.cpp b/TAO/TAO_IDL/narrow/narrow.cpp index 0421c880c58..2a5e3eaa547 100644 --- a/TAO/TAO_IDL/narrow/narrow.cpp +++ b/TAO/TAO_IDL/narrow/narrow.cpp @@ -69,6 +69,7 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #include "ast_valuetype.h" #include "ast_eventtype.h" #include "ast_component.h" +#include "ast_porttype.h" #include "ast_home.h" #include "ast_operation.h" #include "ast_factory.h" @@ -103,6 +104,8 @@ ScopeAsDecl (UTL_Scope *s) return AST_EventType::narrow_from_scope (s); case AST_Decl::NT_component: return AST_Component::narrow_from_scope (s); + case AST_Decl::NT_porttype: + return AST_PortType::narrow_from_scope (s); case AST_Decl::NT_home: return AST_Home::narrow_from_scope (s); case AST_Decl::NT_op: @@ -149,6 +152,8 @@ DeclAsScope (AST_Decl *d) return AST_EventType::narrow_from_decl (d); case AST_Decl::NT_component: return AST_Component::narrow_from_decl (d); + case AST_Decl::NT_porttype: + return AST_PortType::narrow_from_decl (d); case AST_Decl::NT_home: return AST_Home::narrow_from_decl (d); case AST_Decl::NT_module: |