From 22c12f3c15dc6a09ae82200e559a816c2a186ba4 Mon Sep 17 00:00:00 2001 From: parsons Date: Wed, 27 Jan 2010 22:23:19 +0000 Subject: ChangeLogTag: Wed Jan 27 22:19:17 UTC 2010 Jeff Parsons --- modules/TAO/ChangeLog | 17 ++++++++++ modules/TAO/TAO_IDL/be/be_decl.cpp | 39 ++++++++++++++++++---- .../TAO_IDL/be/be_visitor_component/facet_exh.cpp | 12 +++++++ .../TAO_IDL/be/be_visitor_component/facet_exs.cpp | 7 ++++ modules/TAO/TAO_IDL/be_include/be_decl.h | 6 ++++ modules/TAO/TAO_IDL/fe/idl.yy | 16 +++++---- modules/TAO/TAO_IDL/fe/y.tab.cpp | 25 ++++++++------ 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 + + * 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 + 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 * 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 = @@ -48,6 +53,11 @@ be_visitor_facet_exh::visit_provides (be_provides *node) const char *sname = sname_str.c_str (); 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 @@ -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 (); -- cgit v1.2.1