diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-04-14 14:09:42 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-04-14 14:09:42 +0000 |
commit | 55624494f50a923e4e6a94576a3f828ae1d91ded (patch) | |
tree | ab132b226178b92dfb314a652089645d764232a0 | |
parent | 01366c9907544bad718259c9820f65d1b5473ded (diff) | |
download | ATCD-55624494f50a923e4e6a94576a3f828ae1d91ded.tar.gz |
ChangeLogTag: Mon Apr 14 09:06:22 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r-- | TAO/ChangeLog_ref | 10 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_sequence.cpp | 36 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_field/field_ch.cpp | 6 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp | 1 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_sequence.h | 8 |
5 files changed, 53 insertions, 8 deletions
diff --git a/TAO/ChangeLog_ref b/TAO/ChangeLog_ref index ebddf8c0e55..089abefe826 100644 --- a/TAO/ChangeLog_ref +++ b/TAO/ChangeLog_ref @@ -1,3 +1,13 @@ +Mon Apr 14 09:06:22 2003 Jeff Parsons <j.parsons@vanderbilt.edu> + + * TAO_IDL/be/be_sequence.cpp: + * TAO_IDL/be/be_visitor_field/field_ch.cpp: + * TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp: + * TAO_IDL/be_include/be_sequence.h: + + Fixed problem with multiple members of the same anonymous + sequence type. + Sat Apr 12 02:52:03 2003 Jeff Parsons <j.parsons@vanderbilt.edu> * TAO_IDL/be/be_type.cpp: diff --git a/TAO/TAO_IDL/be/be_sequence.cpp b/TAO/TAO_IDL/be/be_sequence.cpp index 744049d7efb..6639f57e6ad 100644 --- a/TAO/TAO_IDL/be/be_sequence.cpp +++ b/TAO/TAO_IDL/be/be_sequence.cpp @@ -24,6 +24,7 @@ #include "be_interface.h" #include "be_interface_fwd.h" #include "be_predefined_type.h" +#include "be_field.h" #include "be_visitor.h" #include "be_helper.h" #include "utl_identifier.h" @@ -36,7 +37,8 @@ ACE_RCSID (be, be_sequence::be_sequence (void) - : mt_ (be_sequence::MNG_UNKNOWN) + : mt_ (be_sequence::MNG_UNKNOWN), + field_node_ (0) { // Always the case. this->has_constructor (I_TRUE); @@ -67,7 +69,8 @@ be_sequence::be_sequence (AST_Expression *v, I_TRUE), COMMON_Base (t->is_local () || local, abstract), - mt_ (be_sequence::MNG_UNKNOWN) + mt_ (be_sequence::MNG_UNKNOWN), + field_node_ (0) { // Always the case. this->has_constructor (I_TRUE); @@ -78,7 +81,7 @@ char * be_sequence::gen_name (void) { char namebuf [NAMEBUFSIZE]; - be_type *bt = 0; // Base type. + be_type *bt = 0; // Reset the buffer. ACE_OS::memset (namebuf, @@ -97,6 +100,10 @@ be_sequence::gen_name (void) 0); } + // If this is non-zero, add its local name to the generated name, + // for uniqueness. + be_field *fn = this->field_node_; + if (bt->node_type () == AST_Decl::NT_sequence) { // Our base type is an anonymous sequence. @@ -122,15 +129,18 @@ be_sequence::gen_name (void) UTL_Scope *parent = this->defined_in (); seq->set_defined_in (parent); parent->add_sequence (seq); + ACE_OS::sprintf (namebuf, - "_tao_seq_%s", - seq->gen_name ()); + "_tao_seq_%s_%s", + seq->gen_name (), + fn ? fn->local_name ()->get_string () : ""); } else { ACE_OS::sprintf (namebuf, - "_tao_seq_%s", - bt->local_name ()->get_string ()); + "_tao_seq_%s_%s", + bt->local_name ()->get_string (), + fn ? fn->local_name ()->get_string () : ""); } // Append the size (if any). @@ -620,6 +630,18 @@ be_sequence::gen_base_class_name (TAO_OutStream *os, return 0; } +be_field * +be_sequence::field_node (void) const +{ + return this->field_node_; +} + +void +be_sequence::field_node (be_field *node) +{ + this->field_node_ = node; +} + void be_sequence::destroy (void) { diff --git a/TAO/TAO_IDL/be/be_visitor_field/field_ch.cpp b/TAO/TAO_IDL/be/be_visitor_field/field_ch.cpp index 0b214f6e2b3..1631fe636ee 100644 --- a/TAO/TAO_IDL/be/be_visitor_field/field_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_field/field_ch.cpp @@ -420,6 +420,12 @@ be_visitor_field_ch::visit_sequence (be_sequence *node) if (!this->ctx_->alias () && node->is_child (this->ctx_->scope ())) { + // Put the field node into the (anonymous) sequence node, to be + // used later for unique name generation. + be_field *member_node = + be_field::narrow_from_decl (this->ctx_->node ()); + node->field_node (member_node); + be_visitor_context ctx (*this->ctx_); ctx.node (node); diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp index 1e61cb91bbc..c3500930c36 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp @@ -174,7 +174,6 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) << "}"; } - // If Any operators are generated, that code will take care of this. if (!bt->seen_in_sequence ()) { // This is a no-op unless our element is a managed type. diff --git a/TAO/TAO_IDL/be_include/be_sequence.h b/TAO/TAO_IDL/be_include/be_sequence.h index 4e0d86898a7..74f89274fbd 100644 --- a/TAO/TAO_IDL/be_include/be_sequence.h +++ b/TAO/TAO_IDL/be_include/be_sequence.h @@ -30,6 +30,7 @@ class AST_Expression; class AST_Type; class be_visitor; class be_typedef; +class be_field; // A sequence in OMG IDL does not define a scoping construct just as a struct // or union or an interface do. However, in the C++ mapping, a sequence becomes @@ -94,6 +95,10 @@ public: // Common code for generating the name and parameters of our // template sequence base class. + be_field *field_node (void) const; + void field_node (be_field *node); + // Accessors for the member. + protected: virtual char *gen_name (void); // Helper to create_name. @@ -101,6 +106,9 @@ protected: private: MANAGED_TYPE mt_; // Our managed type. + + be_field *field_node_; + // Used if we are an anonymous member, to help generate a unique name. }; #endif |