summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarijke Hengstmengel <MHengstmengel@users.noreply.github.com>2011-11-28 15:28:58 +0000
committerMarijke Hengstmengel <MHengstmengel@users.noreply.github.com>2011-11-28 15:28:58 +0000
commita5a7db0889d615a1e11c73607f3b18b07d092f1a (patch)
treea3cdd9c79b91aefc09f6eb88f1a10f23b24f6ebd
parente12e958ea0b9588d1fc4720cf7a73e7b1b0147b8 (diff)
downloadATCD-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.BRANCH11
-rw-r--r--TAO/TAO_IDL/be/be_visitor_connector/executor_ami_exh.cpp2
-rw-r--r--TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exh.cpp93
-rw-r--r--TAO/TAO_IDL/be/be_visitor_connector/facet_ami_exs.cpp66
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exh.h17
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_connector/facet_ami_exs.h2
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);