diff options
author | Marijke Hengstmengel <MHengstmengel@users.noreply.github.com> | 2011-11-28 15:28:58 +0000 |
---|---|---|
committer | Marijke Hengstmengel <MHengstmengel@users.noreply.github.com> | 2011-11-28 15:28:58 +0000 |
commit | a5a7db0889d615a1e11c73607f3b18b07d092f1a (patch) | |
tree | a3cdd9c79b91aefc09f6eb88f1a10f23b24f6ebd | |
parent | e12e958ea0b9588d1fc4720cf7a73e7b1b0147b8 (diff) | |
download | ATCD-a5a7db0889d615a1e11c73607f3b18b07d092f1a.tar.gz |
Mon Nov 28 15:26:03 UTC 2011 Marijke Hengstmengel <hengstmengel_m@remedy.nl>
* TAO_IDL/be/be_visitor_connector/executor_ami_exh.cpp:
* TAO_IDL/be/be_visitor_connector/facet_ami_exh.cpp:
* TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp:
* TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h:
* TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h:
Add traverse_inheritance_graph, needed for derived interfaces
-rw-r--r-- | TAO/ChangeLog.BRANCH | 11 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_connector/executor_ami_exh.cpp | 2 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exh.cpp | 93 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp | 66 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h | 17 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h | 2 |
6 files changed, 179 insertions, 12 deletions
diff --git a/TAO/ChangeLog.BRANCH b/TAO/ChangeLog.BRANCH index e962528c10b..804277615d8 100644 --- a/TAO/ChangeLog.BRANCH +++ b/TAO/ChangeLog.BRANCH @@ -1,3 +1,12 @@ +Mon Nov 28 15:26:03 UTC 2011 Marijke Hengstmengel <hengstmengel_m@remedy.nl> + + * TAO_IDL/be/be_visitor_connector/executor_ami_exh.cpp: + * TAO_IDL/be/be_visitor_connector/facet_ami_exh.cpp: + * TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp: + * TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h: + * TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h: + Add traverse_inheritance_graph, needed for derived interfaces + Wed Nov 23 14:00:38 UTC 2011 Marijke Hengstmengel <hengstmengel_m@remedy.nl> * TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp: @@ -15,7 +24,7 @@ Mon Nov 21 13:32:38 UTC 2011 Marijke Hengstmengel <hengstmengel_m@remedy.nl> * TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp: * TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h: * TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h: - Changes for sync port on AMI connector + Changes for sync port on AMI connector Mon Nov 7 13:02:55 UTC 2011 Marijke Hengstmengel <hengstmengel_m@remedy.nl> diff --git a/TAO/TAO_IDL/be/be_visitor_connector/executor_ami_exh.cpp b/TAO/TAO_IDL/be/be_visitor_connector/executor_ami_exh.cpp index 2e692c7b31a..8bb17ebc304 100644 --- a/TAO/TAO_IDL/be/be_visitor_connector/executor_ami_exh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_connector/executor_ami_exh.cpp @@ -86,7 +86,7 @@ be_visitor_executor_ami_exh::visit_connector (be_connector *node) ACE_CString half_stripped_name ( connector_name.substr (0, connector_name.find ("_Connector"))); - os_ << half_stripped_name.c_str () << "_exec_i *facet_exec_0_;"; + os_ << half_stripped_name.c_str () << "_exec_i *facet_exec_0_;" << be_nl;; ACE_CString double_stripped_name ( half_stripped_name.substr (ACE_OS::strlen ("AMI4CCM_"))); diff --git a/TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exh.cpp b/TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exh.cpp index e5cad7f956b..07728f108d9 100644 --- a/TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exh.cpp @@ -20,7 +20,7 @@ be_visitor_facet_ami_exh::be_visitor_facet_ami_exh ( callback_iface_ (0), scope_name_ (0), iface_name_ (0), - sync_ (false) + sync_ (false) { // This is initialized in the base class to svnt_export_macro() // or skel_export_macro(), since there are many more visitor @@ -75,7 +75,12 @@ be_visitor_facet_ami_exh::visit_provides (be_provides *node) return 0; } - +int +be_visitor_facet_ami_exh::visit_attribute (be_operation *node) +{ + // do something + return 0; +} int be_visitor_facet_ami_exh::visit_operation (be_operation *node) { @@ -95,6 +100,8 @@ be_visitor_facet_ami_exh::visit_operation (be_operation *node) /// We're generating implementation operation declarations, /// so we can just use this visitor. + if (this->sync_) + this->ctx_->state (TAO_CodeGen::TAO_ROOT_IH); be_visitor_operation_ih v (this->ctx_); if (v.visit_operation (node) == -1) @@ -227,7 +234,7 @@ be_visitor_facet_ami_exh::gen_facet_executor_class (void) << "virtual ~" << iface_name << suffix << " (void);"; - if (this->visit_scope (this->iface_) == -1) + /* if (this->visit_scope (this->iface_) == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("be_visitor_connector_ami_exh") @@ -236,6 +243,71 @@ be_visitor_facet_ami_exh::gen_facet_executor_class (void) ACE_TEXT ("interface failed\n")), -1); } +*/ + + ACE_CString handler_str ( + ScopeAsDecl (this->iface_->defined_in ())->full_name ()); + ACE_CString tmp (this->iface_->local_name ()); + handler_str += "::"; + handler_str += tmp; + + if (ACE_OS::strstr (tmp.c_str(), "AMI4CCM") != 0) + this->sync_ = false; + else + this->sync_ = true; + if (this->sync_) + { + UTL_Scope *ss = this->iface_->defined_in(); + UTL_ScopedName *sn = + FE_Utils::string_to_scoped_name (handler_str.c_str ()); + AST_Decl *d = ss->lookup_by_name (sn, true); + + sn->destroy (); + delete sn; + sn = 0; + + + be_interface *sync_iface = + be_interface::narrow_from_decl (d); + + /// The overload of traverse_inheritance_graph() used here + /// doesn't automatically prime the queues. + sync_iface->get_insert_queue ().reset (); + sync_iface->get_del_queue ().reset (); + sync_iface->get_insert_queue ().enqueue_tail (sync_iface); + + + + Facet_AMI_ExecH_Op_Attr_Generator op_attr_gen (this); + int status = + sync_iface->traverse_inheritance_graph( + op_attr_gen, + &os_, + false, + false); + + if (status == -1) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("be_visitor_facet_ami_exh") + ACE_TEXT ("::gen_facet_executor_class - ") + ACE_TEXT ("traverse_inheritance_graph() on ") + ACE_TEXT ("interface failed\n"))); + + } + } + else + { + if (this->visit_scope (this->iface_) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("be_visitor_connector_ami_exh") + ACE_TEXT ("::gen_facet_executor_class - ") + ACE_TEXT ("visit_scope() on sendc ") + ACE_TEXT ("interface failed\n")), + -1); + } + } const char *container_type = be_global->ciao_container_type (); @@ -272,3 +344,18 @@ be_visitor_facet_ami_exh::gen_facet_executor_class (void) return 0; } +// ================================================== + +Facet_AMI_ExecH_Op_Attr_Generator::Facet_AMI_ExecH_Op_Attr_Generator ( + be_visitor_scope * visitor) + : visitor_ (visitor) +{ +} + +int +Facet_AMI_ExecH_Op_Attr_Generator::emit (be_interface * /*derived_interface */, + TAO_OutStream * /* os */, + be_interface * base_interface) +{ + return visitor_->visit_scope (base_interface); +} diff --git a/TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp b/TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp index c9228c4ef50..5a2617aa7ad 100644 --- a/TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp @@ -68,7 +68,12 @@ be_visitor_facet_ami_exs::visit_provides (be_provides *node) return 0; } - +int +be_visitor_facet_ami_exs::visit_attribute (be_operation *node) +{ + // Do something, do we come here? + return 0; +} int be_visitor_facet_ami_exs::visit_operation (be_operation *node) { @@ -285,7 +290,7 @@ be_visitor_facet_ami_exs::gen_facet_executor_class (void) << "}"; - if (this->visit_scope (this->iface_) == -1) +/* if (this->visit_scope (this->iface_) == -1) { ACE_ERROR ((LM_ERROR, ACE_TEXT ("be_visitor_connector_ami_exs") @@ -293,6 +298,49 @@ be_visitor_facet_ami_exs::gen_facet_executor_class (void) ACE_TEXT ("visit_scope() on sendc ") ACE_TEXT ("interface failed\n"))); } +*/ + + ACE_CString handler_str ( + ScopeAsDecl (this->iface_->defined_in ())->full_name ()); + ACE_CString tmp (this->iface_->local_name ()); + handler_str += "::"; + handler_str += tmp; + + UTL_Scope *ss = this->iface_->defined_in(); + UTL_ScopedName *sn = + FE_Utils::string_to_scoped_name (handler_str.c_str ()); + AST_Decl *d = ss->lookup_by_name (sn, true); + + sn->destroy (); + delete sn; + sn = 0; + + be_interface *sync_iface = + be_interface::narrow_from_decl (d); + + /// The overload of traverse_inheritance_graph() used here + /// doesn't automatically prime the queues. + sync_iface->get_insert_queue ().reset (); + sync_iface->get_del_queue ().reset (); + sync_iface->get_insert_queue ().enqueue_tail (sync_iface); + + Facet_AMI_Exec_Op_Attr_Generator op_attr_gen (this); + int status = + sync_iface->traverse_inheritance_graph( + op_attr_gen, + &os_, + false, + false); + + if (status == -1) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("be_visitor_facet_ami_exh") + ACE_TEXT ("::gen_facet_executor_class - ") + ACE_TEXT ("traverse_inheritance_graph() on ") + ACE_TEXT ("interface failed\n"))); + + } ACE_CString scope_str (scope_name, 0, false); @@ -448,7 +496,11 @@ be_visitor_facet_ami_exs::gen_facet_executor_op (be_operation *node) os_ << be_nl_2 << "// TAO_IDL - Generated from gen_facet_executor_op" << be_nl << "// " << __FILE__ << ":" << __LINE__; - os_ << be_nl_2 + // do not handle not sendc operations. + if (ACE_OS::strstr (node->local_name()->get_string (), "sendc_")== 0) + return 0; + + os_ << be_nl_2 << "void" << be_nl << this->iface_->local_name () << "_exec_i::" << node->local_name (); @@ -555,6 +607,7 @@ be_visitor_facet_ami_exs::gen_facet_executor_sync_op (be_operation *node) { os_ << be_nl_2 << "// TAO_IDL - Generated from" << be_nl << "// " << __FILE__ << ":" << __LINE__ << be_nl_2 ; + if (node->is_sendc_ami()) return 0; @@ -565,7 +618,7 @@ be_visitor_facet_ami_exs::gen_facet_executor_sync_op (be_operation *node) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("be_visitor_operation_ch::") - ACE_TEXT ("visit_operation - ") + ACE_TEXT ("gen_facet_executor_sync_op - ") ACE_TEXT ("Bad return type\n")), -1); } @@ -577,15 +630,14 @@ be_visitor_facet_ami_exs::gen_facet_executor_sync_op (be_operation *node) if (bt->accept (&oro_visitor) == -1) { ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) favet_ami_exs::" - "visit_operation - " + "(%N:%l) facet_ami_exs::" + "gen_facet_executor_sync_op - " "codegen for return type failed\n"), -1); } os_ << be_nl -// << "void" << be_nl << this->iface_->local_name () << "_exec_i::" << node->local_name (); diff --git a/TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h b/TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h index 5a7fdca1a46..abe89f94cf9 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h +++ b/TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h @@ -36,6 +36,7 @@ public: virtual int visit_component (be_component *node); virtual int visit_provides (be_provides *node); virtual int visit_operation (be_operation *node); + virtual int visit_attribute (be_operation *node); protected: /// Common the this class and derived class. @@ -54,6 +55,22 @@ private: int gen_reply_handler_class (void); int gen_facet_executor_class (void); }; + //============================================================== + /// Worker class passed to traverse_inheritance_graph(), + /// collects all operations and attributes. + class Facet_AMI_ExecH_Op_Attr_Generator + : public TAO_IDL_Inheritance_Hierarchy_Worker + { + public: + Facet_AMI_ExecH_Op_Attr_Generator (be_visitor_scope * visitor); + + virtual int emit (be_interface * derived_interface, + TAO_OutStream * os, + be_interface * base_interface); + + private: + be_visitor_scope * visitor_; + }; #endif /* _BE_COMPONENT_FACET_AMI_EXH_H_ */ diff --git a/TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h b/TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h index f70f07c5c87..b07bd3d7893 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h +++ b/TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h @@ -37,6 +37,8 @@ public: virtual int visit_provides (be_provides *node); virtual int visit_operation (be_operation *node); virtual int visit_argument (be_argument *node); + virtual int visit_attribute (be_operation *node); + virtual int post_process (be_decl *node); |