summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-08-19 20:58:38 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-08-19 20:58:38 +0000
commit87cdc5e1046624b52ddbf30727fce5352aaa3dcc (patch)
tree856f49bf90348c9b414c9bba0d1d04705d26b884
parent6b59b7cd03264a9669c84c1076cdb2af1a32e4d4 (diff)
downloadATCD-87cdc5e1046624b52ddbf30727fce5352aaa3dcc.tar.gz
ChangeLogTag: Wed Aug 19 20:54:41 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--modules/TAO/ChangeLog32
-rw-r--r--modules/TAO/TAO_IDL/ast/ast_generator.cpp28
-rw-r--r--modules/TAO/TAO_IDL/ast/ast_porttype.cpp36
-rw-r--r--modules/TAO/TAO_IDL/ast/ast_tmpl_mirror_port.cpp48
-rw-r--r--modules/TAO/TAO_IDL/ast/ast_tmpl_port.cpp58
-rw-r--r--modules/TAO/TAO_IDL/be/be_generator.cpp29
-rw-r--r--modules/TAO/TAO_IDL/be/be_tmpl_mirror_port.cpp47
-rw-r--r--modules/TAO/TAO_IDL/be/be_tmpl_port.cpp46
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor.cpp12
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_generator.h10
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_tmpl_mirror_port.h55
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_tmpl_port.h55
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_visitor.h4
-rw-r--r--modules/TAO/TAO_IDL/include/ast_connector.h2
-rw-r--r--modules/TAO/TAO_IDL/include/ast_generator.h12
-rw-r--r--modules/TAO/TAO_IDL/include/ast_porttype.h3
-rw-r--r--modules/TAO/TAO_IDL/include/ast_tmpl_mirror_port.h28
-rw-r--r--modules/TAO/TAO_IDL/include/ast_tmpl_port.h34
-rw-r--r--modules/TAO/TAO_IDL/include/ast_visitor.h5
-rw-r--r--modules/TAO/TAO_IDL/util/utl_err.cpp2
20 files changed, 542 insertions, 4 deletions
diff --git a/modules/TAO/ChangeLog b/modules/TAO/ChangeLog
index 7d03e5a1d40..f7fd087b588 100644
--- a/modules/TAO/ChangeLog
+++ b/modules/TAO/ChangeLog
@@ -1,7 +1,37 @@
+Wed Aug 19 20:54:41 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/ast/ast_tmpl_mirror_port.cpp:
+ * TAO_IDL/ast/ast_tmpl_port.cpp:
+ * TAO_IDL/include/ast_tmpl_port.h:
+ * TAO_IDL/include/ast_tmpl_mirror_port.h:
+ * TAO_IDL/be/be_tmpl_mirror_port.cpp:
+ * TAO_IDL/be/be_tmpl_port.cpp:
+ * TAO_IDL/be_include/be_tmpl_port.h:
+ * TAO_IDL/be_include/be_tmpl_mirror_port.h:
+
+ New files, containing node types that describe
+ a parameterized port or mirrorport found in the
+ body of a parameterized connector.
+
+ * TAO_IDL/include/ast_generator.h:
+ * TAO_IDL/include/ast_connector.h:
+ * TAO_IDL/include/ast_porttype.h:
+ * TAO_IDL/include/ast_visitor.h:
+ * TAO_IDL/be/be_visitor.cpp:
+ * TAO_IDL/be/be_generator.cpp:
+ * TAO_IDL/ast/ast_generator.cpp:
+ * TAO_IDL/ast/ast_porttype.cpp:
+ * TAO_IDL/be_include/be_visitor.h:
+ * TAO_IDL/be_include/be_generator.h:
+ * TAO_IDL/util/utl_err.cpp:
+
+ Intergration of the new node types above into
+ the IDL compiler.
+
Wed Aug 19 16:38:17 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
* TAO_IDL/fe/idl.yy:
-
+
Fixed some comments.
Tue Jul 28 18:46:17 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
diff --git a/modules/TAO/TAO_IDL/ast/ast_generator.cpp b/modules/TAO/TAO_IDL/ast/ast_generator.cpp
index 8246317dd59..989b520ee6e 100644
--- a/modules/TAO/TAO_IDL/ast/ast_generator.cpp
+++ b/modules/TAO/TAO_IDL/ast/ast_generator.cpp
@@ -81,9 +81,9 @@ trademarks or registered trademarks of Sun Microsystems, Inc.
#include "ast_home.h"
#include "ast_template_interface.h"
#include "ast_instantiated_interface.h"
-#include "ast_porttype.h"
#include "ast_mirror_port.h"
#include "ast_connector.h"
+#include "ast_tmpl_mirror_port.h"
#include "ast_provides.h"
#include "ast_uses.h"
#include "ast_publishes.h"
@@ -1097,3 +1097,29 @@ AST_Generator::create_connector (
return retval;
}
+AST_Tmpl_Port *
+AST_Generator::create_tmpl_port (UTL_ScopedName *n,
+ AST_PortType *porttype_ref)
+{
+ AST_Tmpl_Port *retval = 0;
+ ACE_NEW_RETURN (retval,
+ AST_Tmpl_Port (n,
+ porttype_ref),
+ 0);
+
+ return retval;
+}
+
+AST_Tmpl_Mirror_Port *
+AST_Generator::create_tmpl_mirror_port (UTL_ScopedName *n,
+ AST_PortType *porttype_ref)
+{
+ AST_Tmpl_Mirror_Port *retval = 0;
+ ACE_NEW_RETURN (retval,
+ AST_Tmpl_Mirror_Port (n,
+ porttype_ref),
+ 0);
+
+ return retval;
+}
+
diff --git a/modules/TAO/TAO_IDL/ast/ast_porttype.cpp b/modules/TAO/TAO_IDL/ast/ast_porttype.cpp
index e0d36a77d2e..af894f6ca02 100644
--- a/modules/TAO/TAO_IDL/ast/ast_porttype.cpp
+++ b/modules/TAO/TAO_IDL/ast/ast_porttype.cpp
@@ -11,6 +11,8 @@
#include "utl_identifier.h"
#include "utl_namelist.h"
+#include "utl_strlist.h"
+#include "utl_string.h"
#include "utl_err.h"
#include "utl_indenter.h"
#include "global_extern.h"
@@ -118,6 +120,40 @@ AST_PortType::match_arg_names (UTL_NameList *arg_names)
return retval;
}
+bool
+AST_PortType::match_params (UTL_StrList *param_names)
+{
+ size_t names_len = static_cast<size_t> (param_names->length ());
+
+ if (names_len != this->template_params_->size ())
+ {
+ idl_global->err ()->error1 (UTL_Error::EIDL_T_ARG_LENGTH,
+ this);
+ return false;
+ }
+
+ size_t slot = 0UL;
+
+ for (UTL_StrlistActiveIterator i (param_names);
+ !i.is_done ();
+ i.next (), ++slot)
+ {
+ UTL_String *s = i.item ();
+
+ FE_Utils::T_Param_Info *param = 0;
+ (void) this->template_params_->get (param, slot);
+
+ if (param->name_ != s->get_string ())
+ {
+ idl_global->err ()->mismatched_template_param (this->name ());
+
+ return false;
+ }
+ }
+
+ return true;
+}
+
AST_Provides *
AST_PortType::fe_add_provides (AST_Provides *p)
{
diff --git a/modules/TAO/TAO_IDL/ast/ast_tmpl_mirror_port.cpp b/modules/TAO/TAO_IDL/ast/ast_tmpl_mirror_port.cpp
new file mode 100644
index 00000000000..a20dfddc67a
--- /dev/null
+++ b/modules/TAO/TAO_IDL/ast/ast_tmpl_mirror_port.cpp
@@ -0,0 +1,48 @@
+#include "ast_tmpl_mirror_port.h"
+#include "ast_visitor.h"
+
+#include "utl_identifier.h"
+#include "utl_indenter.h"
+#include "global_extern.h"
+
+ACE_RCSID (ast,
+ ast_tmpl_mirror_port,
+ "$Id$")
+
+AST_Tmpl_Mirror_Port::AST_Tmpl_Mirror_Port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref)
+ : COMMON_Base (false,
+ false),
+ AST_Decl (AST_Decl::NT_field,
+ n),
+ AST_Field (AST_Decl::NT_field,
+ porttype_ref,
+ n),
+ AST_Tmpl_Port (n,
+ porttype_ref)
+{
+}
+
+AST_Tmpl_Mirror_Port::~AST_Tmpl_Mirror_Port (void)
+{
+}
+
+void
+AST_Tmpl_Mirror_Port::dump (ACE_OSTREAM_TYPE &o)
+{
+ this->dump_i (o, "mirrorport ");
+
+ this->local_name ()->dump (o);
+
+ // TODO - template params
+}
+
+int
+AST_Tmpl_Mirror_Port::ast_accept (ast_visitor *visitor)
+{
+ return visitor->visit_tmpl_mirror_port (this);
+}
+
+IMPL_NARROW_FROM_DECL (AST_Tmpl_Mirror_Port)
+
diff --git a/modules/TAO/TAO_IDL/ast/ast_tmpl_port.cpp b/modules/TAO/TAO_IDL/ast/ast_tmpl_port.cpp
new file mode 100644
index 00000000000..75b73e36a3a
--- /dev/null
+++ b/modules/TAO/TAO_IDL/ast/ast_tmpl_port.cpp
@@ -0,0 +1,58 @@
+#include "ast_tmpl_port.h"
+#include "ast_visitor.h"
+
+#include "utl_identifier.h"
+#include "utl_indenter.h"
+#include "global_extern.h"
+
+ACE_RCSID (ast,
+ ast_tmpl_port,
+ "$Id$")
+
+AST_Tmpl_Port::AST_Tmpl_Port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref)
+ : COMMON_Base (false,
+ false),
+ AST_Decl (AST_Decl::NT_field,
+ n),
+ AST_Field (AST_Decl::NT_field,
+ porttype_ref,
+ n)
+{
+}
+
+AST_Tmpl_Port::~AST_Tmpl_Port (void)
+{
+}
+
+AST_PortType *
+AST_Tmpl_Port::port_type (void) const
+{
+ return AST_PortType::narrow_from_decl (this->field_type ());
+}
+
+void
+AST_Tmpl_Port::destroy (void)
+{
+ this->AST_Field::destroy ();
+}
+
+void
+AST_Tmpl_Port::dump (ACE_OSTREAM_TYPE &o)
+{
+ this->dump_i (o, "port ");
+
+ this->local_name ()->dump (o);
+
+ // TODO - template params
+}
+
+int
+AST_Tmpl_Port::ast_accept (ast_visitor *visitor)
+{
+ return visitor->visit_tmpl_port (this);
+}
+
+IMPL_NARROW_FROM_DECL (AST_Tmpl_Port)
+
diff --git a/modules/TAO/TAO_IDL/be/be_generator.cpp b/modules/TAO/TAO_IDL/be/be_generator.cpp
index b26f17d5f00..2e2fa13ed36 100644
--- a/modules/TAO/TAO_IDL/be/be_generator.cpp
+++ b/modules/TAO/TAO_IDL/be/be_generator.cpp
@@ -86,6 +86,8 @@ trademarks or registered trademarks of Sun Microsystems, Inc.
#include "be_porttype.h"
#include "be_mirror_port.h"
#include "be_connector.h"
+#include "be_tmpl_port.h"
+#include "be_tmpl_mirror_port.h"
#include "be_provides.h"
#include "be_uses.h"
#include "be_publishes.h"
@@ -1088,3 +1090,30 @@ be_generator::create_connector (
return retval;
}
+AST_Tmpl_Port *
+be_generator::create_tmpl_port (UTL_ScopedName *n,
+ AST_PortType *porttype_ref)
+{
+ be_tmpl_port *retval = 0;
+ ACE_NEW_RETURN (retval,
+ be_tmpl_port (n,
+ porttype_ref),
+ 0);
+
+ return retval;
+}
+
+AST_Tmpl_Mirror_Port *
+be_generator::create_tmpl_mirror_port (UTL_ScopedName *n,
+ AST_PortType *porttype_ref)
+{
+ be_tmpl_mirror_port *retval = 0;
+ ACE_NEW_RETURN (retval,
+ be_tmpl_mirror_port (n,
+ porttype_ref),
+ 0);
+
+ return retval;
+}
+
+
diff --git a/modules/TAO/TAO_IDL/be/be_tmpl_mirror_port.cpp b/modules/TAO/TAO_IDL/be/be_tmpl_mirror_port.cpp
new file mode 100644
index 00000000000..7c75d6aadb1
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be/be_tmpl_mirror_port.cpp
@@ -0,0 +1,47 @@
+// $Id$
+
+#include "be_tmpl_mirror_port.h"
+#include "be_visitor.h"
+
+ACE_RCSID (be,
+ be_tmpl_mirror_port,
+ "$Id$")
+
+be_tmpl_mirror_port::be_tmpl_mirror_port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref)
+ : COMMON_Base (false,
+ false),
+ AST_Decl (AST_Decl::NT_field,
+ n),
+ AST_Field (AST_Decl::NT_field,
+ porttype_ref,
+ n),
+ AST_Tmpl_Port (n,
+ porttype_ref),
+ AST_Tmpl_Mirror_Port (n,
+ porttype_ref),
+ be_field (porttype_ref,
+ n)
+{
+}
+
+be_tmpl_mirror_port::~be_tmpl_mirror_port (void)
+{
+}
+
+void
+be_tmpl_mirror_port::destroy (void)
+{
+ this->AST_Tmpl_Mirror_Port::destroy ();
+ this->be_field::destroy ();
+}
+
+int
+be_tmpl_mirror_port::accept (be_visitor *visitor)
+{
+ return visitor->visit_tmpl_mirror_port (this);
+}
+
+IMPL_NARROW_FROM_DECL (be_tmpl_mirror_port)
+
diff --git a/modules/TAO/TAO_IDL/be/be_tmpl_port.cpp b/modules/TAO/TAO_IDL/be/be_tmpl_port.cpp
new file mode 100644
index 00000000000..d5cfdb3dba4
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be/be_tmpl_port.cpp
@@ -0,0 +1,46 @@
+// $Id$
+
+#include "be_tmpl_port.h"
+#include "be_visitor.h"
+
+ACE_RCSID (be,
+ be_tmpl_port,
+ "$Id$")
+
+be_tmpl_port::be_tmpl_port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref)
+ : COMMON_Base (false,
+ false),
+ AST_Decl (AST_Decl::NT_field,
+ n),
+ AST_Field (AST_Decl::NT_field,
+ porttype_ref,
+ n),
+ AST_Tmpl_Port (n,
+ porttype_ref),
+ be_field (porttype_ref,
+ n)
+{
+}
+
+be_tmpl_port::~be_tmpl_port (void)
+{
+}
+
+void
+be_tmpl_port::destroy (void)
+{
+ this->AST_Tmpl_Port::destroy ();
+ this->be_field::destroy ();
+}
+
+
+int
+be_tmpl_port::accept (be_visitor *visitor)
+{
+ return visitor->visit_tmpl_port (this);
+}
+
+IMPL_NARROW_FROM_DECL (be_tmpl_port)
+
diff --git a/modules/TAO/TAO_IDL/be/be_visitor.cpp b/modules/TAO/TAO_IDL/be/be_visitor.cpp
index 596cc11278f..a1231a66c3f 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor.cpp
@@ -187,6 +187,18 @@ be_visitor::visit_connector (be_connector *)
}
int
+be_visitor::visit_tmpl_port (be_tmpl_port *)
+{
+ return 0;
+}
+
+int
+be_visitor::visit_tmpl_mirror_port (be_tmpl_mirror_port *)
+{
+ return 0;
+}
+
+int
be_visitor::visit_home (be_home *)
{
return 0;
diff --git a/modules/TAO/TAO_IDL/be_include/be_generator.h b/modules/TAO/TAO_IDL/be_include/be_generator.h
index 39d9cbd95ad..8a651263b3d 100644
--- a/modules/TAO/TAO_IDL/be_include/be_generator.h
+++ b/modules/TAO/TAO_IDL/be_include/be_generator.h
@@ -322,6 +322,16 @@ public:
UTL_ScopedName *n,
AST_Connector *base_connector,
FE_Utils::T_PARAMLIST_INFO *template_params);
+
+ virtual
+ AST_Tmpl_Port *create_tmpl_port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref);
+
+ virtual
+ AST_Tmpl_Mirror_Port *create_tmpl_mirror_port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref);
};
#endif // _BE_GENERATOR_BE_GENERATOR_HH
diff --git a/modules/TAO/TAO_IDL/be_include/be_tmpl_mirror_port.h b/modules/TAO/TAO_IDL/be_include/be_tmpl_mirror_port.h
new file mode 100644
index 00000000000..26deb618d6a
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be_include/be_tmpl_mirror_port.h
@@ -0,0 +1,55 @@
+//
+// $Id$
+//
+
+/* -*- c++ -*- */
+// ============================================================================
+//
+// = LIBRARY
+// TAO_IDL_BE
+//
+// = FILENAME
+// be_tmpl_mirror_port.h
+//
+// = DESCRIPTION
+// Extension of class AST_Tmpl_Mirror_Port for C++ code generation.
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+#ifndef BE_TMPL_MIRROR_PORT_H
+#define BE_TMPL_MIRROR_PORT_H
+
+#include "ast_tmpl_mirror_port.h"
+
+#include "be_field.h"
+
+class be_visitor;
+
+class be_tmpl_mirror_port : public virtual AST_Tmpl_Mirror_Port,
+ public virtual be_field
+{
+ //
+ // = TITLE
+ // be_tmpl_mirror_port
+ //
+ // = DESCRIPTION
+ // Extension of class AST_Tmpl_Mirror_Port for C++ code generation.
+ //
+public:
+ be_tmpl_mirror_port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref);
+
+ virtual ~be_tmpl_mirror_port (void);
+
+ virtual void destroy (void);
+
+ virtual int accept (be_visitor *visitor);
+
+ DEF_NARROW_FROM_DECL (be_tmpl_mirror_port);
+};
+
+#endif // BE_TMPL_MIRROR_PORT_H
diff --git a/modules/TAO/TAO_IDL/be_include/be_tmpl_port.h b/modules/TAO/TAO_IDL/be_include/be_tmpl_port.h
new file mode 100644
index 00000000000..e828b5d076c
--- /dev/null
+++ b/modules/TAO/TAO_IDL/be_include/be_tmpl_port.h
@@ -0,0 +1,55 @@
+//
+// $Id$
+//
+
+/* -*- c++ -*- */
+// ============================================================================
+//
+// = LIBRARY
+// TAO_IDL_BE
+//
+// = FILENAME
+// be_tmpl_port.h
+//
+// = DESCRIPTION
+// Extension of class AST_Tmpl_Port for C++ code generation.
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+#ifndef BE_TMPL_PORT_H
+#define BE_TMPL_PORT_H
+
+#include "ast_tmpl_port.h"
+
+#include "be_field.h"
+
+class be_visitor;
+
+class be_tmpl_port : public virtual AST_Tmpl_Port,
+ public virtual be_field
+{
+ //
+ // = TITLE
+ // be_tmpl_port
+ //
+ // = DESCRIPTION
+ // Extension of class AST_Tmpl_Port for C++ code generation.
+ //
+public:
+ be_tmpl_port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref);
+
+ virtual ~be_tmpl_port (void);
+
+ virtual void destroy (void);
+
+ virtual int accept (be_visitor *visitor);
+
+ DEF_NARROW_FROM_DECL (be_tmpl_port);
+};
+
+#endif // BE_TMPL_PORT_H
diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor.h b/modules/TAO/TAO_IDL/be_include/be_visitor.h
index 8ea975c82f6..8b91ae73373 100644
--- a/modules/TAO/TAO_IDL/be_include/be_visitor.h
+++ b/modules/TAO/TAO_IDL/be_include/be_visitor.h
@@ -50,6 +50,8 @@ class be_consumes;
class be_extended_port;
class be_mirror_port;
class be_connector;
+class be_tmpl_port;
+class be_tmpl_mirror_port;
class be_home;
class be_factory;
class be_structure;
@@ -119,6 +121,8 @@ public:
virtual int visit_extended_port (be_extended_port *node);
virtual int visit_mirror_port (be_mirror_port *node);
virtual int visit_connector (be_connector *node);
+ virtual int visit_tmpl_port (be_tmpl_port *node);
+ virtual int visit_tmpl_mirror_port (be_tmpl_mirror_port *node);
virtual int visit_home (be_home *node);
virtual int visit_factory (be_factory *node);
virtual int visit_structure (be_structure *node);
diff --git a/modules/TAO/TAO_IDL/include/ast_connector.h b/modules/TAO/TAO_IDL/include/ast_connector.h
index 769c4219e48..e16636de46f 100644
--- a/modules/TAO/TAO_IDL/include/ast_connector.h
+++ b/modules/TAO/TAO_IDL/include/ast_connector.h
@@ -23,7 +23,7 @@ public:
// Cleanup function.
virtual void destroy (void);
-
+
// Narrowing.
DEF_NARROW_FROM_DECL (AST_Connector);
diff --git a/modules/TAO/TAO_IDL/include/ast_generator.h b/modules/TAO/TAO_IDL/include/ast_generator.h
index 0ee571d475f..ea3a67436ff 100644
--- a/modules/TAO/TAO_IDL/include/ast_generator.h
+++ b/modules/TAO/TAO_IDL/include/ast_generator.h
@@ -85,6 +85,8 @@ class AST_Instantiated_Interface;
class AST_Extended_Port;
class AST_Mirror_Port;
class AST_Connector;
+class AST_Tmpl_Port;
+class AST_Tmpl_Mirror_Port;
class AST_Provides;
class AST_Uses;
class AST_Publishes;
@@ -409,6 +411,16 @@ public:
UTL_ScopedName *n,
AST_Connector *base_connector,
FE_Utils::T_PARAMLIST_INFO *template_params);
+
+ virtual
+ AST_Tmpl_Port *create_tmpl_port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref);
+
+ virtual
+ AST_Tmpl_Mirror_Port *create_tmpl_mirror_port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref);
};
#endif // _AST_GENERATOR_AST_GENERATOR_HH
diff --git a/modules/TAO/TAO_IDL/include/ast_porttype.h b/modules/TAO/TAO_IDL/include/ast_porttype.h
index e92c16444ad..7f0630e260c 100644
--- a/modules/TAO/TAO_IDL/include/ast_porttype.h
+++ b/modules/TAO/TAO_IDL/include/ast_porttype.h
@@ -45,6 +45,9 @@ public:
// Called by extended port instantiations.
T_ARGLIST *match_arg_names (UTL_NameList *arg_names);
+ // Called by porttype references in connectors.
+ bool match_params (UTL_StrList *param_names);
+
protected:
virtual AST_Provides *fe_add_provides (AST_Provides *p);
diff --git a/modules/TAO/TAO_IDL/include/ast_tmpl_mirror_port.h b/modules/TAO/TAO_IDL/include/ast_tmpl_mirror_port.h
new file mode 100644
index 00000000000..f38b586ae86
--- /dev/null
+++ b/modules/TAO/TAO_IDL/include/ast_tmpl_mirror_port.h
@@ -0,0 +1,28 @@
+#ifndef AST_TMPL_MIRROR_PORT_H
+#define AST_TMPL_MIRROR_PORT_H
+
+#include "ast_tmpl_port.h"
+
+class TAO_IDL_FE_Export AST_Tmpl_Mirror_Port
+ : public virtual AST_Tmpl_Port
+{
+public:
+ AST_Tmpl_Mirror_Port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref);
+
+ virtual ~AST_Tmpl_Mirror_Port (void);
+
+ // Narrowing.
+
+ DEF_NARROW_FROM_DECL (AST_Tmpl_Mirror_Port);
+
+ // AST Dumping.
+ virtual void dump (ACE_OSTREAM_TYPE &o);
+
+ // Visiting.
+ virtual int ast_accept (ast_visitor *visitor);
+};
+
+#endif /* AST_TMPL_MIRROR_PORT_H */
+
diff --git a/modules/TAO/TAO_IDL/include/ast_tmpl_port.h b/modules/TAO/TAO_IDL/include/ast_tmpl_port.h
new file mode 100644
index 00000000000..c899318462c
--- /dev/null
+++ b/modules/TAO/TAO_IDL/include/ast_tmpl_port.h
@@ -0,0 +1,34 @@
+#ifndef AST_TMPL_PORT_H
+#define AST_TMPL_PORT_H
+
+#include "ast_field.h"
+#include "ast_porttype.h"
+
+class TAO_IDL_FE_Export AST_Tmpl_Port
+ : public virtual AST_Field
+{
+public:
+ AST_Tmpl_Port (
+ UTL_ScopedName *n,
+ AST_PortType *porttype_ref);
+
+ virtual ~AST_Tmpl_Port (void);
+
+ AST_PortType *port_type (void) const;
+
+ // Cleanup function.
+ virtual void destroy (void);
+
+ // Narrowing.
+
+ DEF_NARROW_FROM_DECL (AST_Tmpl_Port);
+
+ // AST Dumping.
+ virtual void dump (ACE_OSTREAM_TYPE &o);
+
+ // Visiting.
+ virtual int ast_accept (ast_visitor *visitor);
+};
+
+#endif /* AST_TMPL_PORT_H */
+
diff --git a/modules/TAO/TAO_IDL/include/ast_visitor.h b/modules/TAO/TAO_IDL/include/ast_visitor.h
index d183fb5ba09..8e17cb0f492 100644
--- a/modules/TAO/TAO_IDL/include/ast_visitor.h
+++ b/modules/TAO/TAO_IDL/include/ast_visitor.h
@@ -44,6 +44,8 @@ class AST_Emits;
class AST_Consumes;
class AST_Extended_Port;
class AST_Mirror_Port;
+class AST_Tmpl_Port;
+class AST_Tmpl_Mirror_Port;
class AST_Connector;
class AST_EventType;
class AST_EventTypeFwd;
@@ -113,6 +115,9 @@ public:
virtual int visit_extended_port (AST_Extended_Port *node) = 0;
virtual int visit_mirror_port (AST_Mirror_Port *node) = 0;
virtual int visit_connector (AST_Connector *node) = 0;
+ virtual int visit_tmpl_port (AST_Tmpl_Port *node) = 0;
+ virtual int visit_tmpl_mirror_port (
+ AST_Tmpl_Mirror_Port *node) = 0;
virtual int visit_eventtype (AST_EventType *node) = 0;
virtual int visit_eventtype_fwd (AST_EventTypeFwd *node) = 0;
virtual int visit_factory (AST_Factory *node) = 0;
diff --git a/modules/TAO/TAO_IDL/util/utl_err.cpp b/modules/TAO/TAO_IDL/util/utl_err.cpp
index 6e7afcecf21..f9c284ae022 100644
--- a/modules/TAO/TAO_IDL/util/utl_err.cpp
+++ b/modules/TAO/TAO_IDL/util/utl_err.cpp
@@ -222,7 +222,7 @@ error_string (UTL_Error::ErrorCode c)
case UTL_Error::EIDL_ILLEGAL_PRIMARY_KEY:
return "illegal primary key";
case UTL_Error::EIDL_MISMATCHED_T_PARAM:
- return "mismatched parameter in template instantiation";
+ return "mismatched parameter in template reference or instantiation";
case UTL_Error::EIDL_DUPLICATE_T_PARAM:
return "duplicate template parameter id";
case UTL_Error::EIDL_T_ARG_LENGTH: