summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_sequence.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_sequence.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_sequence.cpp57
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,