From fa86a70311b4358cba1db22ae89a9e95c5b2ea92 Mon Sep 17 00:00:00 2001 From: parsons Date: Tue, 28 Jul 2009 16:58:40 +0000 Subject: ChangeLogTag: Tue Jul 28 16:46:35 UTC 2009 Jeff Parsons --- modules/TAO/ChangeLog | 23 +++++ modules/TAO/TAO_IDL/ast/ast_connector.cpp | 6 +- modules/TAO/TAO_IDL/ast/ast_generator.cpp | 17 ++++ modules/TAO/TAO_IDL/ast/ast_module.cpp | 46 ++++++++++ modules/TAO/TAO_IDL/be/be_component.cpp | 3 + modules/TAO/TAO_IDL/be/be_connector.cpp | 77 +++++++++++++++++ modules/TAO/TAO_IDL/be/be_generator.cpp | 17 ++++ modules/TAO/TAO_IDL/be/be_visitor.cpp | 120 ++++++++++++++++++-------- modules/TAO/TAO_IDL/be_include/be_connector.h | 33 +++++++ modules/TAO/TAO_IDL/be_include/be_generator.h | 6 ++ modules/TAO/TAO_IDL/be_include/be_visitor.h | 2 + modules/TAO/TAO_IDL/include/ast_generator.h | 7 ++ modules/TAO/TAO_IDL/include/ast_module.h | 4 +- modules/TAO/TAO_IDL/include/ast_visitor.h | 2 + modules/TAO/TAO_IDL/include/utl_scope.h | 3 + modules/TAO/TAO_IDL/util/utl_scope.cpp | 6 ++ 16 files changed, 328 insertions(+), 44 deletions(-) create mode 100644 modules/TAO/TAO_IDL/be/be_connector.cpp create mode 100644 modules/TAO/TAO_IDL/be_include/be_connector.h diff --git a/modules/TAO/ChangeLog b/modules/TAO/ChangeLog index 9d1db7e20a7..3f37ee46c82 100644 --- a/modules/TAO/ChangeLog +++ b/modules/TAO/ChangeLog @@ -1,3 +1,26 @@ +Tue Jul 28 16:46:35 UTC 2009 Jeff Parsons + + * TAO_IDL/be_include/be_connector.h: + * TAO_IDL/be/be_connector.cpp: + + New files, defining the backend version of connectors. + + * TAO_IDL/ast/ast_connector.cpp: + * TAO_IDL/ast/ast_generator.cpp: + * TAO_IDL/ast/ast_module.cpp: + * TAO_IDL/be/be_generator.cpp: + * TAO_IDL/be/be_component.cpp: + * TAO_IDL/be/be_visitor.cpp: + * TAO_IDL/be_include/be_generator.h: + * TAO_IDL/be_include/be_visitor.h: + * TAO_IDL/include/ast_generator.h: + * TAO_IDL/include/ast_module.h: + * TAO_IDL/include/ast_visitor.h: + * TAO_IDL/include/utl_scope.h: + * TAO_IDL/util/utl_scope.cpp: + + Changes related to the new backend type. + Tue Jul 28 15:29:46 UTC 2009 Jeff Parsons * TAO_IDL/fe/idl.yy: diff --git a/modules/TAO/TAO_IDL/ast/ast_connector.cpp b/modules/TAO/TAO_IDL/ast/ast_connector.cpp index 56907b3cf16..2f09e56b86d 100644 --- a/modules/TAO/TAO_IDL/ast/ast_connector.cpp +++ b/modules/TAO/TAO_IDL/ast/ast_connector.cpp @@ -37,10 +37,6 @@ AST_Connector::AST_Connector ( 0), template_params_ (template_params) { - if (!this->imported ()) - { - idl_global->component_seen_ = true; - } } AST_Connector::~AST_Connector (void) @@ -87,7 +83,7 @@ AST_Connector::dump (ACE_OSTREAM_TYPE &o) int AST_Connector::ast_accept (ast_visitor *visitor) { - return visitor->visit_component (this); + return visitor->visit_connector (this); } IMPL_NARROW_FROM_DECL (AST_Connector) diff --git a/modules/TAO/TAO_IDL/ast/ast_generator.cpp b/modules/TAO/TAO_IDL/ast/ast_generator.cpp index baee7f7c8cc..8246317dd59 100644 --- a/modules/TAO/TAO_IDL/ast/ast_generator.cpp +++ b/modules/TAO/TAO_IDL/ast/ast_generator.cpp @@ -83,6 +83,7 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #include "ast_instantiated_interface.h" #include "ast_porttype.h" #include "ast_mirror_port.h" +#include "ast_connector.h" #include "ast_provides.h" #include "ast_uses.h" #include "ast_publishes.h" @@ -1080,3 +1081,19 @@ AST_Generator::create_mirror_port ( return retval; } +AST_Connector * +AST_Generator::create_connector ( + UTL_ScopedName *n, + AST_Connector *base_connector, + FE_Utils::T_PARAMLIST_INFO *template_params) +{ + AST_Connector *retval = 0; + ACE_NEW_RETURN (retval, + AST_Connector (n, + base_connector, + template_params), + 0); + + return retval; +} + diff --git a/modules/TAO/TAO_IDL/ast/ast_module.cpp b/modules/TAO/TAO_IDL/ast/ast_module.cpp index 73bd9c1af10..7b75e56c5c9 100644 --- a/modules/TAO/TAO_IDL/ast/ast_module.cpp +++ b/modules/TAO/TAO_IDL/ast/ast_module.cpp @@ -78,6 +78,7 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #include "ast_component.h" #include "ast_component_fwd.h" #include "ast_porttype.h" +#include "ast_connector.h" #include "ast_home.h" #include "ast_constant.h" #include "ast_exception.h" @@ -696,6 +697,51 @@ AST_Module::fe_add_component (AST_Component *t) return t; } +AST_Connector * +AST_Module::fe_add_connector (AST_Connector *t) +{ + AST_Decl *d = 0; + + // Already defined and cannot be redefined? Or already used? + if ((d = this->lookup_for_add (t, false)) != 0) + { + if (!can_be_redefined (d)) + { + idl_global->err ()->error3 (UTL_Error::EIDL_REDEF, + t, + this, + d); + return 0; + } + + if (this->referenced (d, t->local_name ())) + { + idl_global->err ()->error3 (UTL_Error::EIDL_DEF_USE, + t, + this, + d); + return 0; + } + + if (t->has_ancestor (d)) + { + idl_global->err ()->redefinition_in_scope (t, + d); + return 0; + } + } + + // Add it to local types. + this->add_to_local_types (t); + + // Add it to set of locally referenced symbols. + this->add_to_referenced (t, + false, + t->local_name ()); + + return t; +} + // Add this AST_Home node (a value type declaration) to this scope. AST_Home * AST_Module::fe_add_home (AST_Home *t) diff --git a/modules/TAO/TAO_IDL/be/be_component.cpp b/modules/TAO/TAO_IDL/be/be_component.cpp index eb1e6fb9414..c8ae543cba3 100644 --- a/modules/TAO/TAO_IDL/be/be_component.cpp +++ b/modules/TAO/TAO_IDL/be/be_component.cpp @@ -35,6 +35,7 @@ be_component::be_component (void) AST_Interface (), AST_Component (), be_scope (), + be_decl (), be_type (), be_interface () { @@ -69,6 +70,8 @@ be_component::be_component (UTL_ScopedName *n, supports_flat, n_supports_flat), be_scope (AST_Decl::NT_component), + be_decl (AST_Decl::NT_component, + n), be_type (AST_Decl::NT_component, n), be_interface (n, diff --git a/modules/TAO/TAO_IDL/be/be_connector.cpp b/modules/TAO/TAO_IDL/be/be_connector.cpp new file mode 100644 index 00000000000..544de0bc68c --- /dev/null +++ b/modules/TAO/TAO_IDL/be/be_connector.cpp @@ -0,0 +1,77 @@ +// $Id$ + +#include "be_connector.h" +#include "be_visitor.h" + +ACE_RCSID (be, + be_connector, + "$Id$") + +be_connector::be_connector ( + UTL_ScopedName *n, + AST_Connector *base_connector, + FE_Utils::T_PARAMLIST_INFO *template_params) + : COMMON_Base (false, + false), + AST_Decl (AST_Decl::NT_connector, + n), + AST_Type (AST_Decl::NT_connector, + n), + UTL_Scope (AST_Decl::NT_connector), + AST_Interface (n, + 0, + 0, + 0, + 0, + false, + false), + AST_Component (n, + base_connector, + 0, + 0, + 0, + 0), + AST_Connector (n, + base_connector, + template_params), + be_scope (AST_Decl::NT_connector), + be_decl (AST_Decl::NT_connector, + n), + be_type (AST_Decl::NT_connector, + n), + be_interface (n, + 0, + 0, + 0, + 0, + false, + false), + be_component (n, + base_connector, + 0, + 0, + 0, + 0) +{ +} + +be_connector::~be_connector (void) +{ +} + +void +be_connector::destroy (void) +{ + this->AST_Connector::destroy (); + this->be_component::destroy (); +} + +int +be_connector::accept (be_visitor *visitor) +{ + return visitor->visit_connector (this); +} + +IMPL_NARROW_FROM_DECL (be_connector) +IMPL_NARROW_FROM_SCOPE (be_connector) + diff --git a/modules/TAO/TAO_IDL/be/be_generator.cpp b/modules/TAO/TAO_IDL/be/be_generator.cpp index 330bcc25671..b26f17d5f00 100644 --- a/modules/TAO/TAO_IDL/be/be_generator.cpp +++ b/modules/TAO/TAO_IDL/be/be_generator.cpp @@ -85,6 +85,7 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #include "be_instantiated_interface.h" #include "be_porttype.h" #include "be_mirror_port.h" +#include "be_connector.h" #include "be_provides.h" #include "be_uses.h" #include "be_publishes.h" @@ -1071,3 +1072,19 @@ be_generator::create_mirror_port ( return retval; } +AST_Connector * +be_generator::create_connector ( + UTL_ScopedName *n, + AST_Connector *base_connector, + FE_Utils::T_PARAMLIST_INFO *template_params) +{ + be_connector *retval = 0; + ACE_NEW_RETURN (retval, + be_connector (n, + base_connector, + template_params), + 0); + + return retval; +} + diff --git a/modules/TAO/TAO_IDL/be/be_visitor.cpp b/modules/TAO/TAO_IDL/be/be_visitor.cpp index 179d584db47..596cc11278f 100644 --- a/modules/TAO/TAO_IDL/be/be_visitor.cpp +++ b/modules/TAO/TAO_IDL/be/be_visitor.cpp @@ -42,22 +42,26 @@ int be_visitor::visit_decl (be_decl *) return 0; } -int be_visitor::visit_scope (be_scope *) +int +be_visitor::visit_scope (be_scope *) { return 0; } -int be_visitor::visit_type (be_type *) +int +be_visitor::visit_type (be_type *) { return 0; } -int be_visitor::visit_predefined_type (be_predefined_type *) +int +be_visitor::visit_predefined_type (be_predefined_type *) { return 0; } -int be_visitor::visit_module (be_module *) +int +be_visitor::visit_module (be_module *) { return 0; } @@ -67,58 +71,69 @@ int be_visitor::visit_interface (be_interface *) return 0; } -int be_visitor::visit_interface_fwd (be_interface_fwd *) +int +be_visitor::visit_interface_fwd (be_interface_fwd *) { return 0; } -int be_visitor::visit_template_interface (be_template_interface *) +int +be_visitor::visit_template_interface (be_template_interface *) { return 0; } -int be_visitor::visit_instantiated_interface ( +int +be_visitor::visit_instantiated_interface ( be_instantiated_interface *) { return 0; } -int be_visitor::visit_valuebox (be_valuebox *) +int +be_visitor::visit_valuebox (be_valuebox *) { return 0; } -int be_visitor::visit_valuetype (be_valuetype *) +int +be_visitor::visit_valuetype (be_valuetype *) { return 0; } -int be_visitor::visit_valuetype_fwd (be_valuetype_fwd *) +int +be_visitor::visit_valuetype_fwd (be_valuetype_fwd *) { return 0; } -int be_visitor::visit_eventtype (be_eventtype *) +int +be_visitor::visit_eventtype (be_eventtype *) { return 0; } -int be_visitor::visit_eventtype_fwd (be_eventtype_fwd *) +int +be_visitor::visit_eventtype_fwd (be_eventtype_fwd *) { return 0; } -int be_visitor::visit_component (be_component *) +int +be_visitor::visit_component (be_component *) { return 0; } -int be_visitor::visit_component_fwd (be_component_fwd *) +int +be_visitor::visit_component_fwd (be_component_fwd *) { return 0; } -int be_visitor::visit_porttype (be_porttype *) +int +be_visitor::visit_porttype (be_porttype *) { return 0; } @@ -165,117 +180,146 @@ be_visitor::visit_mirror_port (be_mirror_port *) return 0; } -int be_visitor::visit_home (be_home *) +int +be_visitor::visit_connector (be_connector *) { return 0; } -int be_visitor::visit_factory (be_factory *) +int +be_visitor::visit_home (be_home *) { return 0; } -int be_visitor::visit_structure (be_structure *) +int +be_visitor::visit_factory (be_factory *) { return 0; } -int be_visitor::visit_structure_fwd (be_structure_fwd *) +int +be_visitor::visit_structure (be_structure *) { return 0; } -int be_visitor::visit_exception (be_exception *) +int +be_visitor::visit_structure_fwd (be_structure_fwd *) { return 0; } -int be_visitor::visit_expression (be_expression *) +int +be_visitor::visit_exception (be_exception *) { return 0; } -int be_visitor::visit_enum (be_enum *) +int +be_visitor::visit_expression (be_expression *) { return 0; } -int be_visitor::visit_operation (be_operation *) +int +be_visitor::visit_enum (be_enum *) { return 0; } -int be_visitor::visit_field (be_field *) +int +be_visitor::visit_operation (be_operation *) { return 0; } -int be_visitor::visit_argument (be_argument *) +int +be_visitor::visit_field (be_field *) { return 0; } -int be_visitor::visit_attribute (be_attribute *) +int +be_visitor::visit_argument (be_argument *) { return 0; } -int be_visitor::visit_union (be_union *) +int +be_visitor::visit_attribute (be_attribute *) { return 0; } -int be_visitor::visit_union_fwd (be_union_fwd *) +int +be_visitor::visit_union (be_union *) { return 0; } -int be_visitor::visit_union_branch (be_union_branch *) +int +be_visitor::visit_union_fwd (be_union_fwd *) { return 0; } -int be_visitor::visit_union_label (be_union_label *) +int +be_visitor::visit_union_branch (be_union_branch *) { return 0; } -int be_visitor::visit_constant (be_constant *) +int +be_visitor::visit_union_label (be_union_label *) { return 0; } -int be_visitor::visit_enum_val (be_enum_val *) +int +be_visitor::visit_constant (be_constant *) { return 0; } -int be_visitor::visit_array (be_array *) +int +be_visitor::visit_enum_val (be_enum_val *) { return 0; } -int be_visitor::visit_sequence (be_sequence *) +int +be_visitor::visit_array (be_array *) +{ + return 0; +} + +int +be_visitor::visit_sequence (be_sequence *) { return 0; } -int be_visitor::visit_string (be_string *) +int +be_visitor::visit_string (be_string *) { return 0; } -int be_visitor::visit_typedef (be_typedef *) +int +be_visitor::visit_typedef (be_typedef *) { return 0; } -int be_visitor::visit_root (be_root *) +int +be_visitor::visit_root (be_root *) { return 0; } -int be_visitor::visit_native (be_native *) +int +be_visitor::visit_native (be_native *) { return 0; } diff --git a/modules/TAO/TAO_IDL/be_include/be_connector.h b/modules/TAO/TAO_IDL/be_include/be_connector.h new file mode 100644 index 00000000000..7b9bfbe5adc --- /dev/null +++ b/modules/TAO/TAO_IDL/be_include/be_connector.h @@ -0,0 +1,33 @@ +// -*- C++ -*- +// $Id$ + +#ifndef BE_CONNECTOR_H +#define BE_CONNECTOR_H + +#include "ast_connector.h" +#include "be_component.h" + +class be_connector + : public virtual AST_Connector, + public virtual be_component +{ +public: + be_connector (UTL_ScopedName *n, + AST_Connector *base_connector, + FE_Utils::T_PARAMLIST_INFO *template_params); + + virtual ~be_connector (void); + + // Cleanup function. + virtual void destroy (void); + + // Narrowing. + + DEF_NARROW_FROM_DECL (be_connector); + DEF_NARROW_FROM_SCOPE (be_connector); + + // Visiting. + virtual int accept (be_visitor *visitor); +}; + +#endif // BE_CONNECTOR_H diff --git a/modules/TAO/TAO_IDL/be_include/be_generator.h b/modules/TAO/TAO_IDL/be_include/be_generator.h index b7c5e518f12..39d9cbd95ad 100644 --- a/modules/TAO/TAO_IDL/be_include/be_generator.h +++ b/modules/TAO/TAO_IDL/be_include/be_generator.h @@ -316,6 +316,12 @@ public: UTL_ScopedName *n, AST_PortType *porttype_ref, AST_PortType::T_ARGLIST *template_args); + + virtual + AST_Connector *create_connector ( + UTL_ScopedName *n, + AST_Connector *base_connector, + FE_Utils::T_PARAMLIST_INFO *template_params); }; #endif // _BE_GENERATOR_BE_GENERATOR_HH diff --git a/modules/TAO/TAO_IDL/be_include/be_visitor.h b/modules/TAO/TAO_IDL/be_include/be_visitor.h index c7bc1b962ed..8ea975c82f6 100644 --- a/modules/TAO/TAO_IDL/be_include/be_visitor.h +++ b/modules/TAO/TAO_IDL/be_include/be_visitor.h @@ -49,6 +49,7 @@ class be_emits; class be_consumes; class be_extended_port; class be_mirror_port; +class be_connector; class be_home; class be_factory; class be_structure; @@ -117,6 +118,7 @@ public: 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); + virtual int visit_connector (be_connector *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_generator.h b/modules/TAO/TAO_IDL/include/ast_generator.h index 534344e4ba1..0ee571d475f 100644 --- a/modules/TAO/TAO_IDL/include/ast_generator.h +++ b/modules/TAO/TAO_IDL/include/ast_generator.h @@ -84,6 +84,7 @@ class AST_Template_Interface; class AST_Instantiated_Interface; class AST_Extended_Port; class AST_Mirror_Port; +class AST_Connector; class AST_Provides; class AST_Uses; class AST_Publishes; @@ -402,6 +403,12 @@ public: UTL_ScopedName *n, AST_PortType *porttype_ref, AST_PortType::T_ARGLIST *template_args); + + virtual + AST_Connector *create_connector ( + UTL_ScopedName *n, + AST_Connector *base_connector, + FE_Utils::T_PARAMLIST_INFO *template_params); }; #endif // _AST_GENERATOR_AST_GENERATOR_HH diff --git a/modules/TAO/TAO_IDL/include/ast_module.h b/modules/TAO/TAO_IDL/include/ast_module.h index 98ba73090cb..b24ec214818 100644 --- a/modules/TAO/TAO_IDL/include/ast_module.h +++ b/modules/TAO/TAO_IDL/include/ast_module.h @@ -154,9 +154,11 @@ private: virtual AST_EventTypeFwd *fe_add_eventtype_fwd (AST_EventTypeFwd *i); virtual AST_Component *fe_add_component (AST_Component *i); - + virtual AST_ComponentFwd *fe_add_component_fwd (AST_ComponentFwd *i); + virtual AST_Connector *fe_add_connector (AST_Connector *i); + virtual AST_Home *fe_add_home (AST_Home *i); virtual AST_Constant *fe_add_constant (AST_Constant *c); diff --git a/modules/TAO/TAO_IDL/include/ast_visitor.h b/modules/TAO/TAO_IDL/include/ast_visitor.h index 6115fe4b515..d183fb5ba09 100644 --- a/modules/TAO/TAO_IDL/include/ast_visitor.h +++ b/modules/TAO/TAO_IDL/include/ast_visitor.h @@ -44,6 +44,7 @@ class AST_Emits; class AST_Consumes; class AST_Extended_Port; class AST_Mirror_Port; +class AST_Connector; class AST_EventType; class AST_EventTypeFwd; class AST_Home; @@ -111,6 +112,7 @@ public: virtual int visit_consumes (AST_Consumes *node) = 0; 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_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/include/utl_scope.h b/modules/TAO/TAO_IDL/include/utl_scope.h index a606c65fe8d..13e53081649 100644 --- a/modules/TAO/TAO_IDL/include/utl_scope.h +++ b/modules/TAO/TAO_IDL/include/utl_scope.h @@ -127,6 +127,7 @@ class AST_Emits; class AST_Consumes; class AST_Extended_Port; class AST_Mirror_Port; +class AST_Connector; class UTL_StrList; class UTL_NameList; @@ -400,6 +401,8 @@ private: virtual AST_Home *fe_add_home (AST_Home *i); + virtual AST_Connector *fe_add_connector (AST_Connector *i); + virtual AST_Constant *fe_add_constant (AST_Constant *i); virtual AST_Exception *fe_add_exception (AST_Exception *e); diff --git a/modules/TAO/TAO_IDL/util/utl_scope.cpp b/modules/TAO/TAO_IDL/util/utl_scope.cpp index f6dc776430b..dc3f57b4125 100644 --- a/modules/TAO/TAO_IDL/util/utl_scope.cpp +++ b/modules/TAO/TAO_IDL/util/utl_scope.cpp @@ -1281,6 +1281,12 @@ UTL_Scope::fe_add_mirror_port (AST_Mirror_Port *) return 0; } +AST_Connector * +UTL_Scope::fe_add_connector (AST_Connector *) +{ + return 0; +} + // This is the second pass of the front end // It calls the public add protocol on everything in scope. // It calls the add_xx functions of the most derived AST_Node. -- cgit v1.2.1