summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2010-01-27 22:23:19 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2010-01-27 22:23:19 +0000
commit22c12f3c15dc6a09ae82200e559a816c2a186ba4 (patch)
treea8a2688df15597a3c1813d0e54f1a17b85a67003
parent85fa97286024c442de6fbcd389ccff671529407f (diff)
downloadATCD-22c12f3c15dc6a09ae82200e559a816c2a186ba4.tar.gz
ChangeLogTag: Wed Jan 27 22:19:17 UTC 2010 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--modules/TAO/ChangeLog17
-rw-r--r--modules/TAO/TAO_IDL/be/be_decl.cpp39
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/facet_exh.cpp12
-rw-r--r--modules/TAO/TAO_IDL/be/be_visitor_component/facet_exs.cpp7
-rw-r--r--modules/TAO/TAO_IDL/be_include/be_decl.h6
-rw-r--r--modules/TAO/TAO_IDL/fe/idl.yy16
-rw-r--r--modules/TAO/TAO_IDL/fe/y.tab.cpp25
7 files changed, 99 insertions, 23 deletions
diff --git a/modules/TAO/ChangeLog b/modules/TAO/ChangeLog
index dcafd132a84..43cde8a7597 100644
--- a/modules/TAO/ChangeLog
+++ b/modules/TAO/ChangeLog
@@ -1,3 +1,20 @@
+Wed Jan 27 22:19:17 UTC 2010 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_decl.cpp:
+ * TAO_IDL/be/be_visitor_component/facet_exs.cpp:
+ * TAO_IDL/be/be_visitor_component/facet_exh.cpp:
+ * TAO_IDL/be_include/be_decl.h:
+
+ Added check to ensure that a facet interface gets generated
+ only once in the executor header and source files. This fix
+ closes [BUGID:3817]. Thanks to Abdul Sowayan <sowayan@gmail.com>
+ for reporting the bug.
+
+ * TAO_IDL/fe/y.tab.cpp:
+ * TAO_IDL/fe/idl.yy:
+
+ Cosmetic changes.
+
Wed Jan 27 20:08:48 UTC 2010 Jeff Parsons <j.parsons@vanderbilt.edu>
* TAO_IDL/include/ast_union.h:
diff --git a/modules/TAO/TAO_IDL/be/be_decl.cpp b/modules/TAO/TAO_IDL/be/be_decl.cpp
index 0d835ab4587..df0ce31d2c7 100644
--- a/modules/TAO/TAO_IDL/be/be_decl.cpp
+++ b/modules/TAO/TAO_IDL/be/be_decl.cpp
@@ -48,10 +48,6 @@
#include "ace/Log_Msg.h"
#include "ace/String_Base.h"
-ACE_RCSID (be,
- be_decl,
- "$Id$")
-
// Default Constructor
be_decl::be_decl (void)
: COMMON_Base (),
@@ -101,7 +97,9 @@ be_decl::be_decl (void)
ccm_pre_proc_gen_ (false),
ex_idl_facet_gen_ (false),
svnt_hdr_facet_gen_ (false),
- svnt_src_facet_gen_ (false)
+ svnt_src_facet_gen_ (false),
+ exec_hdr_facet_gen_ (false),
+ exec_src_facet_gen_ (false)
{
}
@@ -153,7 +151,12 @@ be_decl::be_decl (AST_Decl::NodeType type,
srv_outarg_pragma_inst_gen_ (false),
srv_retarg_tmpl_class_gen_ (false),
srv_retarg_pragma_inst_gen_ (false),
- ccm_pre_proc_gen_ (false)
+ ccm_pre_proc_gen_ (false),
+ ex_idl_facet_gen_ (false),
+ svnt_hdr_facet_gen_ (false),
+ svnt_src_facet_gen_ (false),
+ exec_hdr_facet_gen_ (false),
+ exec_src_facet_gen_ (false)
{
}
@@ -633,6 +636,18 @@ be_decl::svnt_src_facet_gen (void)
return this->svnt_src_facet_gen_;
}
+bool
+be_decl::exec_hdr_facet_gen (void)
+{
+ return this->exec_hdr_facet_gen_;
+}
+
+bool
+be_decl::exec_src_facet_gen (void)
+{
+ return this->exec_src_facet_gen_;
+}
+
// Set the flag indicating that code generation is done.
void
be_decl::cli_hdr_gen (bool val)
@@ -905,6 +920,18 @@ be_decl::svnt_src_facet_gen (bool val)
this->svnt_src_facet_gen_ = val;
}
+void
+be_decl::exec_hdr_facet_gen (bool val)
+{
+ this->exec_hdr_facet_gen_ = val;
+}
+
+void
+be_decl::exec_src_facet_gen (bool val)
+{
+ this->exec_src_facet_gen_ = val;
+}
+
//==========================================
int
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/facet_exh.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/facet_exh.cpp
index 5a38a9c7332..366ea23a8af 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component/facet_exh.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/facet_exh.cpp
@@ -37,6 +37,11 @@ int
be_visitor_facet_exh::visit_provides (be_provides *node)
{
be_type *impl = node->provides_type ();
+
+ if (impl->exec_hdr_facet_gen ())
+ {
+ return 0;
+ }
// We don't want a '_cxx_' prefix here.
const char *lname =
@@ -49,6 +54,11 @@ be_visitor_facet_exh::visit_provides (be_provides *node)
const char *global = (sname_str == "" ? "" : "::");
os_ << be_nl
+ << "// TAO_IDL - Generated from" << be_nl
+ << "// " << __FILE__ << ":" << __LINE__
+ << be_nl;
+
+ os_ << be_nl
<< "class " << export_macro_.c_str () << " "
<< lname << "_exec_i" << be_idt_nl
<< ": public virtual " << global << sname << "::CCM_"
@@ -87,6 +97,8 @@ be_visitor_facet_exh::visit_provides (be_provides *node)
os_ << be_uidt_nl
<< "};" << be_nl;
+
+ impl->exec_hdr_facet_gen (true);
return 0;
}
diff --git a/modules/TAO/TAO_IDL/be/be_visitor_component/facet_exs.cpp b/modules/TAO/TAO_IDL/be/be_visitor_component/facet_exs.cpp
index 7e097ed3302..f17c7bd3654 100644
--- a/modules/TAO/TAO_IDL/be/be_visitor_component/facet_exs.cpp
+++ b/modules/TAO/TAO_IDL/be/be_visitor_component/facet_exs.cpp
@@ -73,6 +73,11 @@ be_visitor_facet_exs::visit_provides (be_provides *node)
{
be_type *impl = node->provides_type ();
+ if (impl->exec_src_facet_gen ())
+ {
+ return 0;
+ }
+
// We don't want any '_cxx_' prefix here.
const char *lname =
impl->original_local_name ()->get_string ();
@@ -130,6 +135,8 @@ be_visitor_facet_exs::visit_provides (be_provides *node)
}
}
+ impl->exec_src_facet_gen (true);
+
return 0;
}
diff --git a/modules/TAO/TAO_IDL/be_include/be_decl.h b/modules/TAO/TAO_IDL/be_include/be_decl.h
index 194fc347963..ddf1063d235 100644
--- a/modules/TAO/TAO_IDL/be_include/be_decl.h
+++ b/modules/TAO/TAO_IDL/be_include/be_decl.h
@@ -122,6 +122,8 @@ public:
bool ex_idl_facet_gen (void);
bool svnt_hdr_facet_gen (void);
bool svnt_src_facet_gen (void);
+ bool exec_hdr_facet_gen (void);
+ bool exec_src_facet_gen (void);
// Set the flag indicating that code generation is done.
void cli_hdr_gen (bool);
@@ -171,6 +173,8 @@ public:
void ex_idl_facet_gen (bool);
void svnt_hdr_facet_gen (bool);
void svnt_src_facet_gen (bool);
+ void exec_hdr_facet_gen (bool);
+ void exec_src_facet_gen (bool);
// Narrowing
@@ -230,6 +234,8 @@ private:
bool ex_idl_facet_gen_;
bool svnt_hdr_facet_gen_;
bool svnt_src_facet_gen_;
+ bool exec_hdr_facet_gen_;
+ bool exec_src_facet_gen_;
};
#endif // if !defined
diff --git a/modules/TAO/TAO_IDL/fe/idl.yy b/modules/TAO/TAO_IDL/fe/idl.yy
index 123843b684c..a979f815d3f 100644
--- a/modules/TAO/TAO_IDL/fe/idl.yy
+++ b/modules/TAO/TAO_IDL/fe/idl.yy
@@ -5871,16 +5871,18 @@ factory_decl :
*/
if (s != 0)
{
- AST_Home *home = AST_Home::narrow_from_scope (s);
+ AST_Home *h = AST_Home::narrow_from_scope (s);
+
o =
idl_global->gen ()->create_operation (
- home->managed_component (),
+ h->managed_component (),
AST_Operation::OP_noflags,
&n,
false,
false
);
- home->factories ().enqueue_tail (o);
+
+ h->factories ().enqueue_tail (o);
}
$2->destroy ();
@@ -5941,16 +5943,18 @@ finder_decl :
*/
if (s != 0)
{
- AST_Home *home = AST_Home::narrow_from_scope (s);
+ AST_Home *h = AST_Home::narrow_from_scope (s);
+
o =
idl_global->gen ()->create_operation (
- home->managed_component (),
+ h->managed_component (),
AST_Operation::OP_noflags,
&n,
false,
false
);
- home->finders ().enqueue_tail (o);
+
+ h->finders ().enqueue_tail (o);
}
$2->destroy ();
diff --git a/modules/TAO/TAO_IDL/fe/y.tab.cpp b/modules/TAO/TAO_IDL/fe/y.tab.cpp
index d9a1bf7b4ea..d5d640abfea 100644
--- a/modules/TAO/TAO_IDL/fe/y.tab.cpp
+++ b/modules/TAO/TAO_IDL/fe/y.tab.cpp
@@ -8702,16 +8702,18 @@ tao_yyreduce:
*/
if (s != 0)
{
- AST_Home *home = AST_Home::narrow_from_scope (s);
+ AST_Home *h = AST_Home::narrow_from_scope (s);
+
o =
idl_global->gen ()->create_operation (
- home->managed_component (),
+ h->managed_component (),
AST_Operation::OP_noflags,
&n,
false,
false
);
- home->factories ().enqueue_tail (o);
+
+ h->factories ().enqueue_tail (o);
}
(tao_yyvsp[(2) - (2)].idval)->destroy ();
@@ -8777,16 +8779,17 @@ tao_yyreduce:
*/
if (s != 0)
{
- AST_Home *home = AST_Home::narrow_from_scope (s);
+ AST_Home *h = AST_Home::narrow_from_scope (s);
+
o =
idl_global->gen ()->create_operation (
- home->managed_component (),
- AST_Operation::OP_noflags,
- &n,
- false,
- false
- );
- home->finders ().enqueue_tail (o);
+ h->managed_component (),
+ AST_Operation::OP_noflags,
+ &n,
+ false,
+ false);
+
+ h->finders ().enqueue_tail (o);
}
(tao_yyvsp[(2) - (2)].idval)->destroy ();