diff options
Diffstat (limited to 'TAO/TAO_IDL/be/be_sequence.cpp')
-rw-r--r-- | TAO/TAO_IDL/be/be_sequence.cpp | 57 |
1 files changed, 41 insertions, 16 deletions
diff --git a/TAO/TAO_IDL/be/be_sequence.cpp b/TAO/TAO_IDL/be/be_sequence.cpp index b166fc951f7..962ee7d8a9e 100644 --- a/TAO/TAO_IDL/be/be_sequence.cpp +++ b/TAO/TAO_IDL/be/be_sequence.cpp @@ -39,15 +39,15 @@ be_sequence::be_sequence (AST_Expression *v, AST_Type *t, idl_bool local, idl_bool abstract) - : AST_Sequence (v, - t, - t->is_local () || local, + : AST_Sequence (v, + t, + t->is_local () || local, abstract), AST_Decl (AST_Decl::NT_sequence, 0, 0, I_TRUE), - COMMON_Base (t->is_local () || local, + COMMON_Base (t->is_local () || local, abstract), mt_ (be_sequence::MNG_UNKNOWN) { @@ -66,8 +66,8 @@ be_sequence::gen_name (void) be_type *bt = 0; // Base type. // Reset the buffer. - ACE_OS::memset (namebuf, - '\0', + ACE_OS::memset (namebuf, + '\0', NAMEBUFSIZE); // Retrieve the base type. @@ -108,14 +108,14 @@ 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", + ACE_OS::sprintf (namebuf, + "_tao_seq_%s", seq->gen_name ()); } else { - ACE_OS::sprintf (namebuf, - "_tao_seq_%s", + ACE_OS::sprintf (namebuf, + "_tao_seq_%s", bt->local_name ()->get_string ()); } @@ -220,8 +220,18 @@ be_sequence::managed_type (void) { case AST_Decl::NT_interface: case AST_Decl::NT_interface_fwd: - this->mt_ = be_sequence::MNG_OBJREF; - break; + { + be_interface *bf = be_interface::narrow_from_decl (prim_type); + if (bf->is_valuetype ()) + { + this->mt_ = be_sequence::MNG_VALUE; + } + else + { + this->mt_ = be_sequence::MNG_OBJREF; + } + break; + } case AST_Decl::NT_string: this->mt_ = be_sequence::MNG_STRING; break; @@ -230,7 +240,7 @@ be_sequence::managed_type (void) break; case AST_Decl::NT_pre_defined: { - be_predefined_type *bpd = + be_predefined_type *bpd = be_predefined_type::narrow_from_decl (prim_type); if (bpd->pt () == AST_PredefinedType::PT_pseudo) @@ -292,8 +302,8 @@ const char * be_sequence::instance_name () { static char namebuf[NAMEBUFSIZE]; - ACE_OS::memset (namebuf, - '\0', + ACE_OS::memset (namebuf, + '\0', NAMEBUFSIZE); be_type *bt = 0; @@ -340,6 +350,21 @@ be_sequence::instance_name () this->max_size ()->ev ()->u.ulval); } break; + case be_sequence::MNG_VALUE: + if (this->unbounded ()) + { + ACE_OS::sprintf (namebuf, + "_TAO_Unbounded_Valuetype_Sequence_%s", + this->flat_name ()); + } + else + { + ACE_OS::sprintf (namebuf, + "_TAO_Bounded_Valuetype_Sequence_%s_%lu", + this->flat_name (), + this->max_size ()->ev ()->u.ulval); + } + break; case be_sequence::MNG_STRING: if (this->unbounded ()) { @@ -374,7 +399,7 @@ be_sequence::instance_name () be_predefined_type *predef = be_predefined_type::narrow_from_decl (prim_type); - if (predef != 0 + if (predef != 0 && predef->pt() == AST_PredefinedType::PT_octet) { ACE_OS::sprintf (namebuf, |