summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-10-13 15:43:55 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-10-13 15:43:55 +0000
commitbbf97afcb91f0cfadd30a49758bbf15df5e54f23 (patch)
tree84e8ddbdb43c7c936b63a994f74620457e376769
parentea731c7981ff4e47c066f17aa0aeb8923d7c06aa (diff)
downloadATCD-bbf97afcb91f0cfadd30a49758bbf15df5e54f23.tar.gz
ChangeLogTag: Tue Oct 13 15:36:48 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog34
-rw-r--r--TAO/TAO_IDL/be/be_interface.cpp6
-rw-r--r--TAO/TAO_IDL/be/be_provides.cpp206
-rw-r--r--TAO/TAO_IDL/be/be_visitor_component/component_svh.cpp82
-rw-r--r--TAO/TAO_IDL/be/be_visitor_component/component_svs.cpp142
-rw-r--r--TAO/TAO_IDL/be/be_visitor_extended_port.cpp1
-rw-r--r--TAO/TAO_IDL/be/be_visitor_extended_port/extended_port.cpp2
-rw-r--r--TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svh.cpp37
-rw-r--r--TAO/TAO_IDL/be/be_visitor_extended_port/extended_port_svs.cpp70
-rw-r--r--TAO/TAO_IDL/be_include/be_interface.h3
-rw-r--r--TAO/TAO_IDL/be_include/be_provides.h20
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_extended_port.h6
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port.h2
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svh.h14
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_extended_port/extended_port_svs.h49
-rw-r--r--TAO/TAO_IDL/narrow/narrow.cpp5
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: