summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-10-21 20:41:25 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-10-21 20:41:25 +0000
commitf4ba83ba457583ef3a469c9e2a7daeffed9f8b22 (patch)
tree30a366e898e83a7b4f49c1e3db6d7893cbf35390
parenta36fd76bcaf2622cad0450467f31153ea5c5934c (diff)
downloadATCD-f4ba83ba457583ef3a469c9e2a7daeffed9f8b22.tar.gz
ChangeLogTag: Wed Oct 21 20:40:45 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--modules/TAO/ChangeLog54
-rw-r--r--modules/TAO/TAO_IDL/be/be_util.cpp76
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component.cpp7
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/component_ex_idl.cpp545
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/component_scope.cpp22
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/context_ex_idl.cpp149
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/context_svh.cpp12
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/context_svs.cpp13
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/executor_ex_idl.cpp243
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/facet_ex_idl.cpp61
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/servant_svh.cpp13
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/servant_svs.cpp31
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_extended_port.cpp26
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_util.h15
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component.h3
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/component_ex_idl.h35
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/component_scope.h4
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/context_ex_idl.h49
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svh.h2
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svs.h2
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/executor_ex_idl.h62
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/facet_ex_idl.h46
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svh.h2
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svs.h8
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor_extended_port.h38
25 files changed, 840 insertions, 678 deletions
diff --git a/modules/TAO/ChangeLog b/modules/TAO/ChangeLog
index db3ef05eec3..7c0b9c8aab2 100644
--- a/modules/TAO/ChangeLog
+++ b/modules/TAO/ChangeLog
@@ -1,3 +1,57 @@
+Wed Oct 21 20:40:45 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_extended_port.cpp:
+ * TAO_IDL/be_include/be_visitor_extended_port.h:
+
+ Removed these files, should have been removed in
+
+ Wed Oct 21 14:10:35 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+
+ * TAO_IDL/be/be_visitor_component/facet_ex_idl.cpp:
+ * TAO_IDL/be/be_visitor_component/context_ex_idl.cpp:
+ * TAO_IDL/be/be_visitor_component/executor_ex_idl.cpp:
+ * TAO_IDL/be_include/be_visitor_component/facet_ex_idl.h:
+ * TAO_IDL/be_include/be_visitor_component/context_ex_idl.h:
+ * TAO_IDL/be_include/be_visitor_component/executor_ex_idl.h:
+
+ New files, split executor IDL code generation into separate
+ visitors for the facet, context and executor classes. Also
+ added support for simple extended ports and porttypes.
+
+ * TAO_IDL/be/be_visitor_component.cpp:
+ * TAO_IDL/be_include/be_visitor_component.h:
+
+ Added new files to the include lists.
+
+ * TAO_IDL/be/be_util.cpp:
+ * TAO_IDL/be_include/be_util.h:
+
+ Moved utility methods to generate nested namespaces
+ to this class, so they can be visible to all visitors.
+
+ * TAO_IDL/be/be_visitor_component/servant_svh.cpp:
+ * TAO_IDL/be/be_visitor_component/context_svh.cpp:
+ * TAO_IDL/be/be_visitor_component/servant_svs.cpp:
+ * TAO_IDL/be/be_visitor_component/context_svs.cpp:
+ * TAO_IDL/be/be_visitor_component/component_ex_idl.cpp:
+ * TAO_IDL/be/be_visitor_component/component_scope.cpp:
+ * TAO_IDL/be_include/be_visitor_component/component_scope.h:
+ * TAO_IDL/be_include/be_visitor_component/servant_svh.h:
+ * TAO_IDL/be_include/be_visitor_component/context_svh.h:
+ * TAO_IDL/be_include/be_visitor_component/servant_svs.h:
+ * TAO_IDL/be_include/be_visitor_component/context_svs.h:
+ * TAO_IDL/be_include/be_visitor_component/component_ex_idl.h:
+
+ Moved visit method overrides for extended port, mirror port
+ and porttype to the base class be_visitor_component_scope.
+ In every case so far, the extended port (and eventually the
+ mirror port) traversal just fetches the porttype reference
+ and visits its scope, calling back the port kind traversal
+ methods that happen to be overridden in the original
+ visitor, so there's no need to reimplement these methods
+ over and over.
+
Wed Oct 21 14:10:35 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
* TAO_IDL/be/be_visitor_extended_port/extended_port_svs.cpp:
diff --git a/modules/TAO/TAO_IDL/be/be_util.cpp b/modules/TAO/TAO_IDL/be/be_util.cpp
index fb257e3353e..9943bdc4c80 100644
--- a/modules/TAO/TAO_IDL/be/be_util.cpp
+++ b/modules/TAO/TAO_IDL/be/be_util.cpp
@@ -12,17 +12,18 @@
// Static helper methods used by multiple visitors.
//
// = AUTHOR
-// Gary Maxey
+// Gary Maxey, Jeff Parsons
//
// ============================================================================
#include "be_util.h"
+#include "be_helper.h"
+#include "be_module.h"
+#include "be_identifier_helper.h"
+
#include "utl_identifier.h"
-#include "ace/OS_NS_string.h"
-ACE_RCSID (be,
- be_util,
- "$Id$")
+#include "ace/OS_NS_string.h"
void
be_util::gen_nested_namespace_begin (TAO_OutStream *os, be_module *node)
@@ -56,3 +57,68 @@ be_util::gen_nested_namespace_end (TAO_OutStream *os, be_module *node)
*os << be_nl << be_nl;
}
+
+void
+be_util::gen_nesting_open (TAO_OutStream &os, AST_Decl *node)
+{
+ os << be_nl;
+
+ for (UTL_IdListActiveIterator i (node->name ()); ! i.is_done () ;)
+ {
+ UTL_ScopedName tmp (i.item (), 0);
+ AST_Decl *scope =
+ node->defined_in ()->lookup_by_name (&tmp, true);
+
+ if (scope == 0)
+ {
+ i.next ();
+ continue;
+ }
+
+ ACE_CString module_name =
+ IdentifierHelper::try_escape (scope->original_local_name ());
+
+ if (module_name == "")
+ {
+ i.next ();
+ continue;
+ }
+
+ i.next ();
+
+ if (i.is_done ())
+ {
+ break;
+ }
+
+ os << be_nl
+ << "module " << module_name.c_str () << be_nl
+ << "{" << be_idt;
+ }
+}
+
+void
+be_util::gen_nesting_close (TAO_OutStream &os, AST_Decl *node)
+{
+ for (UTL_IdListActiveIterator i (node->name ()); ! i.is_done () ;)
+ {
+ ACE_CString module_name (i.item ()->get_string ());
+
+ if (module_name == "")
+ {
+ i.next ();
+ continue;
+ }
+
+ i.next ();
+
+ if (i.is_done ())
+ {
+ break;
+ }
+
+ os << be_uidt_nl
+ << "};";
+ }
+}
+
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component.cpp
index 6ead4189b8c..9bb059e4d6e 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component.cpp
@@ -47,7 +47,6 @@
#include "be_valuetype.h"
#include "be_visitor_component.h"
-#include "be_visitor_extended_port.h"
#include "be_visitor_attribute.h"
#include "be_visitor_operation.h"
#include "be_visitor_interface.h"
@@ -55,8 +54,9 @@
#include "be_visitor_typedef.h"
#include "be_visitor_typecode.h"
#include "be_visitor_context.h"
-#include "be_identifier_helper.h"
+#include "be_util.h"
#include "be_helper.h"
+#include "be_identifier_helper.h"
#include "be_extern.h"
#include "be_visitor_component/component.cpp"
@@ -78,6 +78,9 @@
#include "be_visitor_component/context_svs.cpp"
#include "be_visitor_component/servant_svs.cpp"
#include "be_visitor_component/component_ex_idl.cpp"
+#include "be_visitor_component/facet_ex_idl.cpp"
+#include "be_visitor_component/executor_ex_idl.cpp"
+#include "be_visitor_component/context_ex_idl.cpp"
#include "be_visitor_component/component_exh.cpp"
#include "be_visitor_component/component_exs.cpp"
#include "be_visitor_component/any_op_ch.cpp"
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/component_ex_idl.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/component_ex_idl.cpp
index a97227f3a6f..969292182d8 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component/component_ex_idl.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/component_ex_idl.cpp
@@ -18,18 +18,9 @@
//
// ============================================================================
-ACE_RCSID (be_visitor_component,
- component_ex_idl,
- "$Id$")
-
-// ******************************************************
-// Component visitor for CIAO executor IDL
-// ******************************************************
-
be_visitor_component_ex_idl::be_visitor_component_ex_idl (
be_visitor_context *ctx)
- : be_visitor_scope (ctx),
- node_ (0),
+ : be_visitor_decl (ctx),
os_ (*ctx->stream ())
{
}
@@ -39,537 +30,67 @@ be_visitor_component_ex_idl::~be_visitor_component_ex_idl (void)
}
int
-be_visitor_component_ex_idl::visit_component (be_component *node)
+be_visitor_component_ex_idl::visit_component (
+ be_component *node)
{
if (node->imported ())
{
return 0;
}
- node_ = node;
-
if (be_global->gen_lem_force_all ())
{
- this->gen_facets ();
- }
-
- this->gen_component ();
-
- this->gen_executor_derived ();
-
- return 0;
-}
-
-int
-be_visitor_component_ex_idl::visit_attribute (be_attribute *node)
-{
- bool rd_only = node->readonly ();
-
- // Keep output statements separate because of side effects.
- // No need to check for anonymous array - anonymous types not
- // accepted by parser for attributes.
- os_ << be_nl
- << (rd_only ? "readonly " : "") << "attribute ";
-
- be_type *ft = be_type::narrow_from_decl (node->field_type ());
-
- os_ << IdentifierHelper::type_name (ft, this);
- os_ << " "
- << IdentifierHelper::try_escape (node->original_local_name ()).c_str ();
-
- this->gen_exception_list (node->get_get_exceptions (),
- rd_only ? "" : "get");
-
- this->gen_exception_list (node->get_set_exceptions (),
- "set");
-
- os_ << ";";
-
- return 0;
-}
-
-int
-be_visitor_component_ex_idl::visit_sequence (be_sequence *node)
-{
- // Keep output statements separate because of side effects.
- os_ << "sequence<";
-
- be_type *bt = be_type::narrow_from_decl (node->base_type ());
-
- os_ << IdentifierHelper::type_name (bt, this);
-
- if (!node->unbounded ())
- {
- os_ << ", " << node->max_size ()->ev ()->u.ulval;
- }
-
- os_ << "> ";
-
- return 0;
-}
-
-int
-be_visitor_component_ex_idl::visit_string (be_string *node)
-{
- bool wide = static_cast<size_t> (node->width ()) > sizeof (char);
-
- os_ << (wide ? "w" : "") << "string";
-
- ACE_CDR::ULong const bound = node->max_size ()->ev ()->u.ulval;
-
- if (bound > 0UL)
- {
- os_ << "<" << bound << ">";
- }
-
- return 0;
-}
-
-void
-be_visitor_component_ex_idl::gen_nesting_open (AST_Decl *node)
-{
- os_ << be_nl;
-
- for (UTL_IdListActiveIterator i (node->name ()); ! i.is_done () ;)
- {
- UTL_ScopedName tmp (i.item (), 0);
- AST_Decl *scope =
- node->defined_in ()->lookup_by_name (&tmp, true);
-
- if (scope == 0)
- {
- i.next ();
- continue;
- }
-
- ACE_CString module_name =
- IdentifierHelper::try_escape (scope->original_local_name ());
-
- if (module_name == "")
- {
- i.next ();
- continue;
- }
-
- i.next ();
-
- if (i.is_done ())
- {
- break;
- }
-
- os_ << be_nl
- << "module " << module_name.c_str () << be_nl
- << "{" << be_idt;
- }
-}
-
-void
-be_visitor_component_ex_idl::gen_nesting_close (AST_Decl *node)
-{
- for (UTL_IdListActiveIterator i (node->name ()); ! i.is_done () ;)
- {
- ACE_CString module_name (i.item ()->get_string ());
-
- if (module_name == "")
- {
- i.next ();
- continue;
- }
-
- i.next ();
-
- if (i.is_done ())
- {
- break;
- }
-
- os_ << be_uidt_nl
- << "};";
- }
-}
-
-void
-be_visitor_component_ex_idl::gen_facets (void)
-{
- for (UTL_ScopeActiveIterator si (node_, UTL_Scope::IK_decls);
- !si.is_done ();
- 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->ex_idl_facet_gen ())
- {
- continue;
- }
-
- this->gen_nesting_open (impl);
-
- os_ << be_nl
- << "local interface CCM_"
- << impl->original_local_name ()->get_string ()
- << " : ::"
- << IdentifierHelper::orig_sn (impl->name ()).c_str ()
- << be_nl
- << "{" << be_idt;
-
- os_ << be_uidt_nl
- << "};";
-
- this->gen_nesting_close (impl);
-
- impl->ex_idl_facet_gen (true);
- }
-}
-
-void
-be_visitor_component_ex_idl::gen_component (void)
-{
- this->gen_nesting_open (node_);
-
- this->gen_executor_base ();
-
- this->gen_context ();
-
- this->gen_nesting_close (node_);
-}
-
-void
-be_visitor_component_ex_idl::gen_executor_base (void)
-{
- AST_Component *base = node_->base_component ();
-
- os_ << be_nl
- << "local interface CCM_"
- << node_->original_local_name ()->get_string ()
- << be_idt_nl
- << ": ";
-
- if (base == 0)
- {
- os_ << "::Components::EnterpriseComponent";
-
- this->gen_supported ();
- }
- else
- {
- ACE_CString sname_str =
- IdentifierHelper::orig_sn (
- ScopeAsDecl (base->defined_in ())->name ());
-
- const char *sname = sname_str.c_str ();
- const char *global = (sname_str == "" ? "" : "::");
-
- os_ << global << sname << "::CCM_"
- << base->original_local_name ()->get_string ();
- }
-
- os_ << be_uidt_nl
- << "{" << be_idt;
-
- this->gen_executor_contents ();
-
- os_ << be_uidt_nl
- << "};";
-}
-
-void
-be_visitor_component_ex_idl::gen_supported (void)
-{
- os_ << be_idt;
-
- AST_Interface **supported = node_->supports ();
-
- for (long i = 0; i < node_->n_supports (); ++i)
- {
- os_ << "," << be_nl
- << "::"
- << IdentifierHelper::orig_sn (supported[i]->name ()).c_str ();
- }
-
- os_ << be_uidt;
-}
-
-void
-be_visitor_component_ex_idl::gen_executor_contents (void)
-{
- this->gen_facet_ops ();
- this->gen_consumer_ops ();
-
- /// This picks up the attributes.
- if (this->visit_scope (node_) == -1)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("be_visitor_component_ex_idl::")
- ACE_TEXT ("gen_executor_contents - ")
- ACE_TEXT ("visit_scope() failed\n")));
- }
-}
-
-void
-be_visitor_component_ex_idl::gen_facet_ops (void)
-{
- for (UTL_ScopeActiveIterator si (node_, UTL_Scope::IK_decls);
- !si.is_done ();
- 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 ());
-
- AST_Decl *scope = ScopeAsDecl (impl->defined_in ());
-
- ACE_CString sname_str =
- IdentifierHelper::orig_sn (scope->name ());
- const char *sname = sname_str.c_str ();
-
- const char *lname =
- impl->original_local_name ()->get_string ();
-
- const char *global = (sname_str == "" ? "" : "::");
-
- os_ << be_nl
- << global << sname << "::CCM_" << lname << " get_"
- << p->local_name ()->get_string () << " ();";
- }
-}
-
-void
-be_visitor_component_ex_idl::gen_consumer_ops (void)
-{
- for (UTL_ScopeActiveIterator si (node_, UTL_Scope::IK_decls);
- !si.is_done ();
- si.next ())
- {
- AST_Decl *d = si.item ();
-
- if (d->node_type () != AST_Decl::NT_consumes)
- {
- continue;
- }
-
- AST_Consumes *c =
- AST_Consumes::narrow_from_decl (d);
-
- be_type *impl =
- be_type::narrow_from_decl (c->consumes_type ());
-
- os_ << be_nl
- << "void push_" << c->local_name ()->get_string ()
- << " (in ::"
- << IdentifierHelper::orig_sn (impl->name ()).c_str ()
- << " e);";
- }
-}
-
-void
-be_visitor_component_ex_idl::gen_exception_list (
- UTL_ExceptList *exceptions,
- const char *prefix,
- bool closed)
-{
- if (exceptions != 0 && exceptions->length () > 0)
- {
- os_ << be_idt_nl
- << prefix << "raises ( ";
-
- for (UTL_ExceptlistActiveIterator ei (exceptions);
- !ei.is_done ();)
- {
- os_ << "::"
- << IdentifierHelper::orig_sn (ei.item ()->name ()).c_str ();
-
- ei.next ();
-
- if (!ei.is_done () || !closed)
- {
- os_ << ", ";
- }
- }
-
- if (closed)
+ be_visitor_facet_ex_idl facet_visitor (this->ctx_);
+
+ if (facet_visitor.visit_scope (node) == -1)
{
- os_ << ")" << be_uidt;
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("be_visitor_component_ex_idl::")
+ ACE_TEXT ("visit_component - ")
+ ACE_TEXT ("facet visitor failed\n")),
+ -1);
}
}
-}
-void
-be_visitor_component_ex_idl::gen_context (void)
-{
- os_ << be_nl << be_nl
- << "local interface CCM_"
- << node_->original_local_name ()->get_string ()
- << "_Context" << be_idt_nl
- << ": ";
+ be_util::gen_nesting_open (os_, node);
- AST_Component *base = node_->base_component ();
-
- if (base == 0)
- {
- os_ << "::Components::SessionContext";
- }
- else
+ be_visitor_executor_ex_idl exec_visitor (this->ctx_);
+
+ if (exec_visitor.visit_component (node) == -1)
{
- AST_Decl *scope = ScopeAsDecl (base->defined_in ());
-
- ACE_CString sname_str =
- IdentifierHelper::orig_sn (scope->name ());
- const char *sname = sname_str.c_str ();
-
- const char *lname =
- base->original_local_name ()->get_string ();
-
- const char *global = (sname_str == "" ? "" : "::");
-
- os_ << global << sname << "::CCM_" << lname << "_Context";
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("be_visitor_component_ex_idl::")
+ ACE_TEXT ("visit_component - ")
+ ACE_TEXT ("executor visitor failed\n")),
+ -1);
}
- os_ << be_uidt_nl
- << "{" << be_idt;
-
- this->gen_publisher_ops ();
- this->gen_emitter_ops ();
- this->gen_receptacle_ops ();
-
- os_ << be_uidt_nl
- << "};";
-}
-
-void
-be_visitor_component_ex_idl::gen_publisher_ops (void)
-{
- for (UTL_ScopeActiveIterator si (node_, UTL_Scope::IK_decls);
- !si.is_done ();
- si.next ())
+ be_visitor_context_ex_idl context_visitor (this->ctx_);
+
+ if (context_visitor.visit_component (node) == -1)
{
- AST_Decl *d = si.item ();
-
- if (d->node_type () != AST_Decl::NT_publishes)
- {
- continue;
- }
-
- AST_Publishes *p =
- AST_Publishes::narrow_from_decl (d);
-
- be_type *impl =
- be_type::narrow_from_decl (p->publishes_type ());
-
- os_ << be_nl
- << "void push_" << p->local_name ()->get_string () << " (in ::"
- << IdentifierHelper::orig_sn (impl->name ()).c_str ()
- << " e);";
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("be_visitor_component_ex_idl::")
+ ACE_TEXT ("visit_component - ")
+ ACE_TEXT ("context visitor failed\n")),
+ -1);
}
-}
-void
-be_visitor_component_ex_idl::gen_emitter_ops (void)
-{
- for (UTL_ScopeActiveIterator si (node_, UTL_Scope::IK_decls);
- !si.is_done ();
- si.next ())
- {
- AST_Decl *d = si.item ();
+ be_util::gen_nesting_close (os_, node);
- if (d->node_type () != AST_Decl::NT_emits)
- {
- continue;
- }
-
- AST_Emits *e =
- AST_Emits::narrow_from_decl (d);
-
- be_type *impl =
- be_type::narrow_from_decl (e->emits_type ());
-
- os_ << be_nl
- << "void push_" << e->local_name ()->get_string () << " (in ::"
- << IdentifierHelper::orig_sn (impl->name ()).c_str ()
- << " e);";
- }
-}
-
-void
-be_visitor_component_ex_idl::gen_receptacle_ops (void)
-{
- for (UTL_ScopeActiveIterator si (node_, UTL_Scope::IK_decls);
- !si.is_done ();
- si.next ())
- {
- AST_Decl *d = si.item ();
-
- if (d->node_type () != AST_Decl::NT_uses)
- {
- continue;
- }
-
- AST_Uses *u =
- AST_Uses::narrow_from_decl (d);
-
- be_type *impl =
- be_type::narrow_from_decl (u->uses_type ());
-
- os_ << be_nl
- << "::";
-
- // Note that we don't strip off the possible '_cxx_' when
- // adding the 'Connections' suffix. The front end will
- // create this implied IDL node with the '_cxx_' so lookup
- // will fail (when processing the *E.idl file) if we
- // strip it off here.
- if (u->is_multiple ())
- {
- os_ << IdentifierHelper::orig_sn (node_->name ()).c_str ()
- << "::" << u->local_name ()->get_string ()
- << "Connections get_connections_"
- << u->local_name ()->get_string () << " ();";
- }
- else
- {
- os_ << IdentifierHelper::orig_sn (impl->name ()).c_str ()
- << " get_connection_"
- << u->local_name ()->get_string () << " ();";
- }
- }
-}
-
-void
-be_visitor_component_ex_idl::gen_executor_derived (void)
-{
- AST_Decl *scope = ScopeAsDecl (node_->defined_in ());
+ AST_Decl *scope = ScopeAsDecl (node->defined_in ());
ACE_CString sname_str =
IdentifierHelper::orig_sn (scope->name ());
const char *sname = sname_str.c_str ();
const char *lname =
- node_->original_local_name ()->get_string ();
+ node->original_local_name ()->get_string ();
const char *global = (sname_str == "" ? "" : "::");
os_ << be_nl << be_nl
- << "module CIAO_" << node_->flat_name () << "_Impl" << be_nl
+ << "module CIAO_" << node->flat_name () << "_Impl" << be_nl
<< "{" << be_idt_nl
<< "typedef " << global << sname << "::CCM_" << lname
<< "_Context " << lname << "_Exec_Context;";
@@ -584,5 +105,7 @@ be_visitor_component_ex_idl::gen_executor_derived (void)
os_ << be_uidt_nl
<< "};";
+
+ return 0;
}
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/component_scope.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/component_scope.cpp
index 30e7e96877a..9a95461794d 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component/component_scope.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/component_scope.cpp
@@ -43,6 +43,28 @@ be_visitor_component_scope::~be_visitor_component_scope (
}
int
+be_visitor_component_scope::visit_extended_port (
+ be_extended_port *node)
+{
+ return this->visit_porttype (node->port_type ());
+}
+
+int
+be_visitor_component_scope::visit_mirror_port (
+ be_mirror_port *)
+{
+ // TODO
+ return 0;
+}
+
+int
+be_visitor_component_scope::visit_porttype (
+ be_porttype *node)
+{
+ return this->visit_scope (node);
+}
+
+int
be_visitor_component_scope::visit_component_scope (
be_component *node)
{
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/context_ex_idl.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/context_ex_idl.cpp
new file mode 100644
index 00000000000..9d73f8d46bc
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/context_ex_idl.cpp
@@ -0,0 +1,149 @@
+//
+// $Id$
+//
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// context_ex_idl.cpp
+//
+// = DESCRIPTION
+// Visitor generating code for the contect class
+// in the CIAO executor IDL.
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+be_visitor_context_ex_idl::be_visitor_context_ex_idl (
+ be_visitor_context *ctx)
+ : be_visitor_component_scope (ctx)
+{
+}
+
+be_visitor_context_ex_idl::~be_visitor_context_ex_idl (
+ void)
+{
+}
+
+int
+be_visitor_context_ex_idl::visit_component (
+ be_component *node)
+{
+ node_ = node;
+
+ os_ << be_nl << be_nl
+ << "local interface CCM_"
+ << node->original_local_name ()->get_string ()
+ << "_Context" << be_idt_nl
+ << ": ";
+
+ AST_Component *base = node->base_component ();
+
+ if (base == 0)
+ {
+ os_ << "::Components::SessionContext";
+ }
+ else
+ {
+ AST_Decl *scope =
+ ScopeAsDecl (base->defined_in ());
+
+ ACE_CString sname_str =
+ IdentifierHelper::orig_sn (scope->name ());
+ const char *sname = sname_str.c_str ();
+
+ const char *lname =
+ base->original_local_name ()->get_string ();
+
+ const char *global = (sname_str == "" ? "" : "::");
+
+ os_ << global << sname << "::CCM_"
+ << lname << "_Context";
+ }
+
+ os_ << be_uidt_nl
+ << "{" << be_idt;
+
+ if (this->visit_scope (node) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("be_visitor_context_ex_idl::")
+ ACE_TEXT ("visit_component - ")
+ ACE_TEXT ("visit_scope() failed\n")),
+ -1);
+ }
+
+ os_ << be_uidt_nl
+ << "};";
+
+ return 0;
+}
+
+int
+be_visitor_context_ex_idl::visit_uses (
+ be_uses *node)
+{
+ be_type *impl =
+ be_type::narrow_from_decl (node->uses_type ());
+
+ os_ << be_nl
+ << "::";
+
+ const char *lname = node->local_name ()->get_string ();
+
+ // Note that we don't strip off the possible '_cxx_' when
+ // adding the 'Connections' suffix. The front end will
+ // create this implied IDL node with the '_cxx_' so lookup
+ // will fail (when processing the *E.idl file) if we
+ // strip it off here.
+ if (node->is_multiple ())
+ {
+ os_ << IdentifierHelper::orig_sn (node_->name ()).c_str ()
+ << "::" << lname << "Connections get_connections_"
+ << lname << " ();";
+ }
+ else
+ {
+ os_ << IdentifierHelper::orig_sn (impl->name ()).c_str ()
+ << " get_connection_" << lname << " ();";
+ }
+
+ return 0;
+}
+
+int
+be_visitor_context_ex_idl::visit_publishes (
+ be_publishes *node)
+{
+ be_type *impl =
+ be_type::narrow_from_decl (node->publishes_type ());
+
+ os_ << be_nl
+ << "void push_" << node->local_name ()->get_string ()
+ << " (in ::"
+ << IdentifierHelper::orig_sn (impl->name ()).c_str ()
+ << " e);";
+
+ return 0;
+}
+
+int
+be_visitor_context_ex_idl::visit_emits (
+ be_emits *node)
+{
+ be_type *impl =
+ be_type::narrow_from_decl (node->emits_type ());
+
+ os_ << be_nl
+ << "void push_" << node->local_name ()->get_string ()
+ << " (in ::"
+ << IdentifierHelper::orig_sn (impl->name ()).c_str ()
+ << " e);";
+
+ return 0;
+}
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/context_svh.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/context_svh.cpp
index 05a26e8d124..aac46513ee3 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component/context_svh.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/context_svh.cpp
@@ -279,16 +279,4 @@ be_visitor_context_svh::visit_emits (be_emits *node)
return 0;
}
-int
-be_visitor_context_svh::visit_extended_port (be_extended_port *)
-{
- return 0;
-}
-
-int
-be_visitor_context_svh::visit_mirror_port (be_mirror_port *)
-{
- // TODO
- return 0;
-}
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/context_svs.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/context_svs.cpp
index f0618fb41a5..4e9d832e296 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component/context_svs.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/context_svs.cpp
@@ -472,19 +472,6 @@ be_visitor_context_svs::visit_emits (be_emits *node)
return 0;
}
-int
-be_visitor_context_svs::visit_extended_port (be_extended_port *)
-{
- return 0;
-}
-
-int
-be_visitor_context_svs::visit_mirror_port (be_mirror_port *)
-{
- // TODO
- return 0;
-}
-
void
be_visitor_context_svs::gen_uses_simplex (
AST_Type *obj,
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/executor_ex_idl.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/executor_ex_idl.cpp
new file mode 100644
index 00000000000..9b627ee2fa5
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/executor_ex_idl.cpp
@@ -0,0 +1,243 @@
+//
+// $Id$
+//
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// executor_ex_idl.cpp
+//
+// = DESCRIPTION
+// Visitor generating code for components
+// in the CIAO executor IDL.
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+be_visitor_executor_ex_idl::be_visitor_executor_ex_idl (
+ be_visitor_context *ctx)
+ : be_visitor_component_scope (ctx)
+{
+}
+
+be_visitor_executor_ex_idl::~be_visitor_executor_ex_idl (
+ void)
+{
+}
+
+int
+be_visitor_executor_ex_idl::visit_component (
+ be_component *node)
+{
+ node_ = node;
+
+ AST_Component *base = node->base_component ();
+
+ os_ << be_nl
+ << "local interface CCM_"
+ << node->original_local_name ()->get_string ()
+ << be_idt_nl
+ << ": ";
+
+ if (base == 0)
+ {
+ os_ << "::Components::EnterpriseComponent";
+
+ this->gen_supported ();
+ }
+ else
+ {
+ ACE_CString sname_str =
+ IdentifierHelper::orig_sn (
+ ScopeAsDecl (base->defined_in ())->name ());
+
+ const char *sname = sname_str.c_str ();
+ const char *global = (sname_str == "" ? "" : "::");
+
+ os_ << global << sname << "::CCM_"
+ << base->original_local_name ()->get_string ();
+ }
+
+ os_ << be_uidt_nl
+ << "{" << be_idt;
+
+ if (this->visit_scope (node) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("be_visitor_executor_ex_idl::")
+ ACE_TEXT ("visit_component - ")
+ ACE_TEXT ("visit_scope() failed\n")),
+ -1);
+ }
+
+ os_ << be_uidt_nl
+ << "};";
+
+ return 0;
+}
+
+int
+be_visitor_executor_ex_idl::visit_attribute (
+ be_attribute *node)
+{
+ bool rd_only = node->readonly ();
+
+ // Keep output statements separate because of side effects.
+ // No need to check for anonymous array - anonymous types not
+ // accepted by parser for attributes.
+ os_ << be_nl
+ << (rd_only ? "readonly " : "") << "attribute ";
+
+ be_type *ft = be_type::narrow_from_decl (node->field_type ());
+
+ os_ << IdentifierHelper::type_name (ft, this);
+ os_ << " "
+ << IdentifierHelper::try_escape (node->original_local_name ()).c_str ();
+
+ this->gen_exception_list (node->get_get_exceptions (),
+ rd_only ? "" : "get");
+
+ this->gen_exception_list (node->get_set_exceptions (),
+ "set");
+
+ os_ << ";";
+
+ return 0;
+}
+
+int
+be_visitor_executor_ex_idl::visit_sequence (
+ be_sequence *node)
+{
+ // Keep output statements separate because of side effects.
+ os_ << "sequence<";
+
+ be_type *bt =
+ be_type::narrow_from_decl (node->base_type ());
+
+ os_ << IdentifierHelper::type_name (bt, this);
+
+ if (!node->unbounded ())
+ {
+ os_ << ", " << node->max_size ()->ev ()->u.ulval;
+ }
+
+ os_ << "> ";
+
+ return 0;
+}
+
+int
+be_visitor_executor_ex_idl::visit_string (be_string *node)
+{
+ bool wide =
+ static_cast<size_t> (node->width ()) > sizeof (char);
+
+ os_ << (wide ? "w" : "") << "string";
+
+ ACE_CDR::ULong const bound =
+ node->max_size ()->ev ()->u.ulval;
+
+ if (bound > 0UL)
+ {
+ os_ << "<" << bound << ">";
+ }
+
+ return 0;
+}
+
+int
+be_visitor_executor_ex_idl::visit_provides (
+ be_provides *node)
+{
+ be_type *impl =
+ be_type::narrow_from_decl (node->provides_type ());
+
+ AST_Decl *scope = ScopeAsDecl (impl->defined_in ());
+
+ ACE_CString sname_str =
+ IdentifierHelper::orig_sn (scope->name ());
+ const char *sname = sname_str.c_str ();
+
+ const char *lname =
+ impl->original_local_name ()->get_string ();
+
+ const char *global = (sname_str == "" ? "" : "::");
+
+ os_ << be_nl
+ << global << sname << "::CCM_" << lname << " get_"
+ << node->local_name ()->get_string () << " ();";
+
+ return 0;
+}
+
+int
+be_visitor_executor_ex_idl::visit_consumes (
+ be_consumes *node)
+{
+ be_type *impl =
+ be_type::narrow_from_decl (node->consumes_type ());
+
+ os_ << be_nl
+ << "void push_" << node->local_name ()->get_string ()
+ << " (in ::"
+ << IdentifierHelper::orig_sn (impl->name ()).c_str ()
+ << " e);";
+
+ return 0;
+}
+
+void
+be_visitor_executor_ex_idl::gen_supported (void)
+{
+ os_ << be_idt;
+
+ AST_Interface **supported = node_->supports ();
+
+ for (long i = 0; i < node_->n_supports (); ++i)
+ {
+ os_ << "," << be_nl
+ << "::"
+ << IdentifierHelper::orig_sn (supported[i]->name ()).c_str ();
+ }
+
+ os_ << be_uidt;
+}
+
+void
+be_visitor_executor_ex_idl::gen_exception_list (
+ UTL_ExceptList *exceptions,
+ const char *prefix,
+ bool closed)
+{
+ if (exceptions != 0 && exceptions->length () > 0)
+ {
+ os_ << be_idt_nl
+ << prefix << "raises ( ";
+
+ for (UTL_ExceptlistActiveIterator ei (exceptions);
+ !ei.is_done ();)
+ {
+ os_ << "::"
+ << IdentifierHelper::orig_sn (ei.item ()->name ()).c_str ();
+
+ ei.next ();
+
+ if (!ei.is_done () || !closed)
+ {
+ os_ << ", ";
+ }
+ }
+
+ if (closed)
+ {
+ os_ << ")" << be_uidt;
+ }
+ }
+}
+
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/facet_ex_idl.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/facet_ex_idl.cpp
new file mode 100644
index 00000000000..bfc9143f120
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/facet_ex_idl.cpp
@@ -0,0 +1,61 @@
+//
+// $Id$
+//
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// facet_ex_idl.cpp
+//
+// = DESCRIPTION
+// Visitor generating code for facets in the CIAO executor IDL.
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+be_visitor_facet_ex_idl::be_visitor_facet_ex_idl (
+ be_visitor_context *ctx)
+ : be_visitor_component_scope (ctx)
+{
+}
+
+be_visitor_facet_ex_idl::~be_visitor_facet_ex_idl (void)
+{
+}
+
+int
+be_visitor_facet_ex_idl::visit_provides (be_provides *node)
+{
+ be_type *impl =
+ be_type::narrow_from_decl (node->provides_type ());
+
+ if (impl->ex_idl_facet_gen ())
+ {
+ return 0;
+ }
+
+ be_util::gen_nesting_open (os_, impl);
+
+ os_ << be_nl
+ << "local interface CCM_"
+ << impl->original_local_name ()->get_string ()
+ << " : ::"
+ << IdentifierHelper::orig_sn (impl->name ()).c_str ()
+ << be_nl
+ << "{" << be_idt;
+
+ os_ << be_uidt_nl
+ << "};";
+
+ be_util::gen_nesting_close (os_, impl);
+
+ impl->ex_idl_facet_gen (true);
+
+ return 0;
+}
+
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/servant_svh.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/servant_svh.cpp
index d4aa9c57e88..599c6ab5cde 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component/servant_svh.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/servant_svh.cpp
@@ -346,19 +346,6 @@ be_visitor_servant_svh::visit_consumes (be_consumes *node)
return 0;
}
-int
-be_visitor_servant_svh::visit_extended_port (be_extended_port *)
-{
- return 0;
-}
-
-int
-be_visitor_servant_svh::visit_mirror_port (be_mirror_port *)
-{
- // TODO
- return 0;
-}
-
void
be_visitor_servant_svh::gen_non_type_specific (void)
{
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/servant_svs.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/servant_svs.cpp
index 0539a0d180e..63de03b1fd1 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component/servant_svs.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/servant_svs.cpp
@@ -748,19 +748,6 @@ be_visitor_servant_svs::visit_consumes (be_consumes *node)
return 0;
}
-int
-be_visitor_servant_svs::visit_extended_port (be_extended_port *)
-{
- return 0;
-}
-
-int
-be_visitor_servant_svs::visit_mirror_port (be_mirror_port *)
-{
- // TODO
- return 0;
-}
-
void
be_visitor_servant_svs::compute_slots (AST_Component *node)
{
@@ -1234,6 +1221,24 @@ be_visitor_attr_set::visit_attribute (be_attribute *node)
return 0;
}
+int
+be_visitor_attr_set::visit_extended_port (be_extended_port *)
+{
+ return 0;
+}
+
+int
+be_visitor_attr_set::visit_mirror_port (be_mirror_port *)
+{
+ return 0;
+}
+
+int
+be_visitor_attr_set::visit_porttype (be_porttype *)
+{
+ return 0;
+}
+
// ==========================================================
be_visitor_facet_executor_block::be_visitor_facet_executor_block (
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_extended_port.cpp b/modules/TAO/TAO_IDL/be/be_visitor_extended_port.cpp
deleted file mode 100644
index be34b780713..00000000000
--- a/modules/TAO/TAO_IDL/be/be_visitor_extended_port.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// $Id$
-//
-
-// ============================================================================
-//
-// = LIBRARY
-// TAO IDL
-//
-// = FILENAME
-// be_visitor_extended_port.cpp
-//
-// = DESCRIPTION
-// Visitors for generation of code for extended ports.
-//
-// = AUTHOR
-// Jeff Parsons
-//
-// ============================================================================
-
-#include "be_visitor_extended_port.h"
-
-#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/modules/TAO/TAO_IDL/be_include/be_util.h b/modules/TAO/TAO_IDL/be_include/be_util.h
index 66610d1c0b4..a9d8de6906d 100644
--- a/modules/TAO/TAO_IDL/be_include/be_util.h
+++ b/modules/TAO/TAO_IDL/be_include/be_util.h
@@ -13,16 +13,19 @@
// Static helper methods used by multiple visitors.
//
// = AUTHOR
-// Gary Maxey
+// Gary Maxey, Jeff Parsons
//
// ============================================================================
#ifndef TAO_BE_UTIL_H
#define TAO_BE_UTIL_H
-#include "be_helper.h"
-#include "be_module.h"
+class TAO_OutStream;
+class be_module;
+class AST_Decl;
+// (JP) Someday these should be consolidated, along with several
+// similar methods scattered throughout the backend.
class be_util
{
public:
@@ -31,6 +34,12 @@ public:
static void
gen_nested_namespace_end (TAO_OutStream *os, be_module *node);
+
+ static void
+ gen_nesting_open (TAO_OutStream &os, AST_Decl *node);
+
+ static void
+ gen_nesting_close (TAO_OutStream &os, AST_Decl *node);
};
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component.h
index 5c0046631b2..4a008f7c9fe 100644
--- a/modules/TAO/TAO_IDL/be_include/be_visitor_component.h
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component.h
@@ -43,6 +43,9 @@
#include "be_visitor_component/context_svs.h"
#include "be_visitor_component/servant_svs.h"
#include "be_visitor_component/component_ex_idl.h"
+#include "be_visitor_component/facet_ex_idl.h"
+#include "be_visitor_component/executor_ex_idl.h"
+#include "be_visitor_component/context_ex_idl.h"
#include "be_visitor_component/component_exh.h"
#include "be_visitor_component/component_exs.h"
#include "be_visitor_component/any_op_ch.h"
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/component_ex_idl.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/component_ex_idl.h
index 7abf9394af6..b6283d55ed4 100644
--- a/modules/TAO/TAO_IDL/be_include/be_visitor_component/component_ex_idl.h
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/component_ex_idl.h
@@ -22,7 +22,7 @@
#ifndef _BE_COMPONENT_COMPONENT_EX_IDL_H_
#define _BE_COMPONENT_COMPONENT_EX_IDL_H_
-class be_visitor_component_ex_idl : public be_visitor_scope
+class be_visitor_component_ex_idl : public be_visitor_decl
{
//
// = TITLE
@@ -40,40 +40,7 @@ public:
virtual int visit_component (be_component *node);
- /// To regenerate attribute declarations.
- virtual int visit_attribute (be_attribute *node);
-
- /// To regenerate the name of the attribute's referenced
- /// (anonymous) type. Anonymous arrays are not allowed.
- virtual int visit_string (be_string *node);
- virtual int visit_sequence (be_sequence *node);
-
-private:
- void gen_nesting_open (AST_Decl *node);
- void gen_nesting_close (AST_Decl *node);
-
- void gen_facets (void);
-
- void gen_component (void);
- void gen_executor_base (void);
- void gen_supported (void);
- void gen_executor_contents (void);
- void gen_facet_ops (void);
- void gen_consumer_ops (void);
-
- void gen_exception_list (UTL_ExceptList *exceptions,
- const char *prefix = "",
- bool closed = true);
-
- void gen_context (void);
- void gen_publisher_ops (void);
- void gen_emitter_ops (void);
- void gen_receptacle_ops (void);
-
- void gen_executor_derived (void);
-
private:
- be_component *node_;
TAO_OutStream &os_;
};
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/component_scope.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/component_scope.h
index e7c49fa9fe0..cacccd89bb0 100644
--- a/modules/TAO/TAO_IDL/be_include/be_visitor_component/component_scope.h
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/component_scope.h
@@ -38,6 +38,10 @@ protected:
virtual ~be_visitor_component_scope (void);
public:
+ virtual int visit_extended_port (be_extended_port *node);
+ virtual int visit_mirror_port (be_mirror_port *node);
+ virtual int visit_porttype (be_porttype *node);
+
int visit_component_scope (be_component *node);
protected:
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_ex_idl.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_ex_idl.h
new file mode 100644
index 00000000000..3faaf56c0f3
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_ex_idl.h
@@ -0,0 +1,49 @@
+//
+// $Id$
+//
+/* -*- c++ -*- */
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// context_ex_idl.h
+//
+// = DESCRIPTION
+// Provides code generation for the context class
+// in the CIAO executor IDL.
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+#ifndef _BE_COMPONENT_CONTEXT_EX_IDL_H_
+#define _BE_COMPONENT_CONTEXT_EX_IDL_H_
+
+class be_visitor_context_ex_idl
+ : public be_visitor_component_scope
+{
+ //
+ // = TITLE
+ // be_visitor_context_ex_idl
+ //
+ // = DESCRIPTION
+ // This is a concrete visitor to generate the
+ // CIAO context IDL.
+ //
+ //
+public:
+ be_visitor_context_ex_idl (be_visitor_context *ctx);
+
+ ~be_visitor_context_ex_idl (void);
+
+ virtual int visit_component (be_component *node);
+ virtual int visit_uses (be_uses *node);
+ virtual int visit_publishes (be_publishes *node);
+ virtual int visit_emits (be_emits *node);
+};
+
+#endif /_BE_COMPONENT_CONTEXT_EX_IDL_H_ */
+
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svh.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svh.h
index d1abaabe26b..f8bdf732279 100644
--- a/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svh.h
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svh.h
@@ -43,8 +43,6 @@ public:
virtual int visit_uses (be_uses *node);
virtual int visit_publishes (be_publishes *node);
virtual int visit_emits (be_emits *node);
- virtual int visit_extended_port (be_extended_port *node);
- virtual int visit_mirror_port (be_mirror_port *node);
};
#endif /* _BE_COMPONENT_CONTEXT_SVH_H_ */
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svs.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svs.h
index 4b5e2c7b807..5c540859839 100644
--- a/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svs.h
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/context_svs.h
@@ -43,8 +43,6 @@ public:
virtual int visit_uses (be_uses *node);
virtual int visit_publishes (be_publishes *node);
virtual int visit_emits (be_emits *node);
- virtual int visit_extended_port (be_extended_port *node);
- virtual int visit_mirror_port (be_mirror_port *node);
private:
void gen_uses_simplex (AST_Type *obj,
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/executor_ex_idl.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/executor_ex_idl.h
new file mode 100644
index 00000000000..04dc6a3e8f1
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/executor_ex_idl.h
@@ -0,0 +1,62 @@
+//
+// $Id$
+//
+/* -*- c++ -*- */
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// executor_ex_idl.h
+//
+// = DESCRIPTION
+// Provides code generation for components in the CIAO executor IDL.
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+#ifndef _BE_COMPONENT_EXECUTOR_EX_IDL_H_
+#define _BE_COMPONENT_EXECUTOR_EX_IDL_H_
+
+class be_visitor_executor_ex_idl
+ : public be_visitor_component_scope
+{
+ //
+ // = TITLE
+ // be_visitor_executor_ex_idl
+ //
+ // = DESCRIPTION
+ // This is a concrete visitor to generate the
+ // CIAO executor class IDL.
+ //
+ //
+public:
+ be_visitor_executor_ex_idl (be_visitor_context *ctx);
+
+ ~be_visitor_executor_ex_idl (void);
+
+ virtual int visit_component (be_component *node);
+
+ /// To regenerate attribute declarations.
+ virtual int visit_attribute (be_attribute *node);
+
+ /// To regenerate the name of the attribute's referenced
+ /// (anonymous) type. Anonymous arrays are not allowed.
+ virtual int visit_string (be_string *node);
+ virtual int visit_sequence (be_sequence *node);
+
+ virtual int visit_provides (be_provides *node);
+ virtual int visit_consumes (be_consumes *node);
+
+private:
+ void gen_supported (void);
+ void gen_exception_list (UTL_ExceptList *exceptions,
+ const char *prefix = "",
+ bool closed = true);
+};
+
+#endif /_BE_COMPONENT_EXECUTOR_EX_IDL_H_ */
+
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/facet_ex_idl.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/facet_ex_idl.h
new file mode 100644
index 00000000000..cf2a3fa07ca
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/facet_ex_idl.h
@@ -0,0 +1,46 @@
+//
+// $Id$
+//
+/* -*- c++ -*- */
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// facet_ex_idl.h
+//
+// = DESCRIPTION
+// Concrete visitor for the Component node.
+// Provides code generation for facets in the CIAO executor IDL
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+#ifndef _BE_COMPONENT_FACET_EX_IDL_H_
+#define _BE_COMPONENT_FACET_EX_IDL_H_
+
+class be_visitor_facet_ex_idl
+ : public be_visitor_component_scope
+{
+ //
+ // = TITLE
+ // be_visitor_facet_ex_idl
+ //
+ // = DESCRIPTION
+ // This is a concrete visitor to generate the
+ // CIAO executor IDL for facets.
+ //
+ //
+public:
+ be_visitor_facet_ex_idl (be_visitor_context *ctx);
+
+ ~be_visitor_facet_ex_idl (void);
+
+ virtual int visit_provides (be_provides *node);
+};
+
+#endif /_BE_COMPONENT_FACET_EX_IDL_H_ */
+
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svh.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svh.h
index 38eaef1393d..1eb8267dca2 100644
--- a/modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svh.h
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svh.h
@@ -46,8 +46,6 @@ public:
virtual int visit_publishes (be_publishes *node);
virtual int visit_emits (be_emits *node);
virtual int visit_consumes (be_consumes *node);
- virtual int visit_extended_port (be_extended_port *node);
- virtual int visit_mirror_port (be_mirror_port *node);
private:
/// Base class overrides and CIAO-specific code.
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svs.h b/modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svs.h
index d3ae2a8f24c..86492aaebf2 100644
--- a/modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svs.h
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor_component/servant_svs.h
@@ -48,8 +48,6 @@ public:
virtual int visit_publishes (be_publishes *node);
virtual int visit_emits (be_emits *node);
virtual int visit_consumes (be_consumes *node);
- virtual int visit_extended_port (be_extended_port *node);
- virtual int visit_mirror_port (be_mirror_port *node);
private:
void compute_slots (AST_Component *node);
@@ -99,6 +97,12 @@ public:
~be_visitor_attr_set (void);
virtual int visit_attribute (be_attribute *node);
+
+ // This visitor has nothing to do with ports, so we
+ // can override these base class methods to be no-ops.
+ virtual int visit_extended_port (be_extended_port *node);
+ virtual int visit_mirror_port (be_mirror_port *node);
+ virtual int visit_porttype (be_porttype *node);
};
// ======================================================
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor_extended_port.h b/modules/TAO/TAO_IDL/be_include/be_visitor_extended_port.h
deleted file mode 100644
index badcd3d50f5..00000000000
--- a/modules/TAO/TAO_IDL/be_include/be_visitor_extended_port.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- c++ -*- */
-//
-// $Id$
-//
-
-// ============================================================================
-//
-// = LIBRARY
-// TAO IDL
-//
-// = FILENAME
-// be_visitor_extended_port.h
-//
-// = DESCRIPTION
-// Concrete visitors for the extended port class
-//
-// = AUTHOR
-// Jeff Parsons
-//
-// ============================================================================
-
-#ifndef TAO_BE_VISITOR_EXTENDED_PORT_H
-#define TAO_BE_VISITOR_EXTENDED_PORT_H
-
-#include "ast_template_common.h"
-
-#include "be_porttype.h"
-#include "be_extended_port.h"
-#include "be_provides.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 */