summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-06-29 00:01:47 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-06-29 00:01:47 +0000
commitf896376fbb7bf2769b837ccdfdabc7a2ce38c90b (patch)
tree96b6b2dd228a3daf65739b31216c2288f41a5ced
parentd1270e033c620410b0b087a817354e3c894d5807 (diff)
downloadATCD-f896376fbb7bf2769b837ccdfdabc7a2ce38c90b.tar.gz
ChangeLogTag: Thu Jun 28 18:56:17 2001 Jeff Parsons <parsons@cs.wustl.edu>
-rw-r--r--TAO/orbsvcs/IFR_Service/Container_i.cpp16
-rw-r--r--TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp71
-rw-r--r--TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.h6
-rw-r--r--TAO/tao/DynamicAny/DynUnion_i.cpp40
4 files changed, 28 insertions, 105 deletions
diff --git a/TAO/orbsvcs/IFR_Service/Container_i.cpp b/TAO/orbsvcs/IFR_Service/Container_i.cpp
index cd321311bad..9e7c6fd25e2 100644
--- a/TAO/orbsvcs/IFR_Service/Container_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/Container_i.cpp
@@ -2677,13 +2677,17 @@ TAO_Container_i::store_label (ACE_Configuration_Section_Key key,
}
if (default_label == 1)
- this->repo_->config ()->set_string_value (key,
- "label",
- "default");
+ {
+ this->repo_->config ()->set_string_value (key,
+ "label",
+ "default");
+ }
else
- this->repo_->config ()->set_integer_value (key,
- "label",
- result);
+ {
+ this->repo_->config ()->set_integer_value (key,
+ "label",
+ result);
+ }
}
void
diff --git a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp
index 9b186725902..647e861c4fb 100644
--- a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp
+++ b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp
@@ -64,7 +64,7 @@ ifr_adding_visitor_union::visit_scope (UTL_Scope *node)
idl_bool defined_here = ft->is_child (this->scope_);
- // If the struct member is defined in the struct, we have to
+ // If the union member is defined in the union, we have to
// do some visiting - otherwise we can just look up the entry.
if (defined_here)
{
@@ -72,7 +72,7 @@ ifr_adding_visitor_union::visit_scope (UTL_Scope *node)
{
// Since the enclosing scope hasn't been created yet,
// we make a special visitor to create this member
- // at global scope and move it into the struct later.
+ // at global scope and move it into the union later.
ifr_adding_visitor_union visitor (ft,
1);
@@ -169,23 +169,7 @@ ifr_adding_visitor_union::visit_scope (UTL_Scope *node)
}
else // Default case label.
{
- AST_Union::DefaultValue dv;
-
- if (u->default_value (dv) == -1)
- {
- ACE_ERROR_RETURN ((
- LM_ERROR,
- ACE_TEXT ("(%N:%l) ifr_adding_visitor_union::")
- ACE_TEXT ("visit_scope - ")
- ACE_TEXT ("computing default value failed\n")
- ),
- -1
- );
- }
-
- this->load_any_with_default (dv,
- u,
- this->members_[index].label);
+ this->members_[index].label <<= CORBA::Any::from_octet (0);
}
this->members_[index].name =
@@ -564,52 +548,3 @@ ifr_adding_visitor_union::ir_current (void) const
return this->ir_current_.in ();
}
-void
-ifr_adding_visitor_union::load_any_with_default (AST_Union::DefaultValue &dv,
- AST_Union *u,
- CORBA::Any &any)
-{
- switch (u->udisc_type ())
- {
- case AST_Expression::EV_char:
- any <<= CORBA::Any::from_char (dv.u.char_val);
- break;
- case AST_Expression::EV_bool:
- any <<= CORBA::Any::from_boolean (ACE_static_cast (CORBA::Boolean,
- dv.u.bool_val));
- break;
- case AST_Expression::EV_wchar:
- any <<= CORBA::Any::from_wchar (dv.u.wchar_val);
- break;
- case AST_Expression::EV_short:
- any <<= dv.u.short_val;
- break;
- case AST_Expression::EV_ushort:
- any <<= dv.u.ushort_val;
- break;
- case AST_Expression::EV_long:
- any <<= dv.u.long_val;
- break;
- case AST_Expression::EV_ulong:
- any <<= dv.u.ulong_val;
- break;
- case AST_Expression::EV_any:
- {
- TAO_OutputCDR cdr;
- cdr.write_ulong (dv.u.enum_val);
- any._tao_replace (this->disc_tc_.in (),
- TAO_ENCAP_BYTE_ORDER,
- cdr.begin ());
- break;
- }
- case AST_Expression::EV_ulonglong:
- case AST_Expression::EV_longlong:
- // As yet unimplemented.
- default:
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%N:%l) ifr_adding_visitor_union::")
- ACE_TEXT ("load_any_with_default - ")
- ACE_TEXT ("type (%d) is invalid\n"),
- u->udisc_type ()));
- }
-}
diff --git a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.h b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.h
index 1d546bfdddb..b49bb715398 100644
--- a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.h
+++ b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.h
@@ -76,12 +76,6 @@ private:
ACE_Unbounded_Queue<CORBA_Contained_ptr> move_queue_;
// IR objects that must be moved into the scope (struct or
// exception) where they were declared in the IDL file.
-
- void load_any_with_default (AST_Union::DefaultValue &dv,
- AST_Union *u,
- CORBA::Any &any);
- // Insert the default case label into an Any, used to initialize
- // a UnionMember struct.
};
#endif /* TAO_IFR_ADDING_VISITOR_UNION_H */
diff --git a/TAO/tao/DynamicAny/DynUnion_i.cpp b/TAO/tao/DynamicAny/DynUnion_i.cpp
index 456bf91ac84..99aa1de70d7 100644
--- a/TAO/tao/DynamicAny/DynUnion_i.cpp
+++ b/TAO/tao/DynamicAny/DynUnion_i.cpp
@@ -328,24 +328,9 @@ TAO_DynUnion_i::set_discriminator (DynamicAny::DynAny_ptr value,
ACE_THROW (DynamicAny::DynAny::TypeMismatch ());
}
- // Does the value match the current discriminator value?
- // If so, we do nothing.
- CORBA_Any_var disc_any = this->discriminator_->to_any (ACE_TRY_ENV);
- ACE_CHECK;
-
CORBA_Any_var value_any = value->to_any (ACE_TRY_ENV);
ACE_CHECK;
- CORBA::Boolean match = this->label_match (disc_any.in (),
- value_any.in (),
- ACE_TRY_ENV);
- ACE_CHECK;
-
- if (match)
- {
- return;
- }
-
CORBA::ULong length = this->type_->member_count (ACE_TRY_ENV);
ACE_CHECK;
@@ -353,15 +338,17 @@ TAO_DynUnion_i::set_discriminator (DynamicAny::DynAny_ptr value,
CORBA::ULong i;
// member_label() does not work with aliased type codes.
- CORBA::TypeCode_var ulaliased_tc =
+ CORBA::TypeCode_var unaliased_tc =
TAO_DynAnyFactory::strip_alias (this->type_.in (),
ACE_TRY_ENV);
ACE_CHECK;
+ CORBA::Boolean match;
+
for (i = 0; i < length; ++i)
{
- label_any = this->type_->member_label (i,
- ACE_TRY_ENV);
+ label_any = unaliased_tc->member_label (i,
+ ACE_TRY_ENV);
ACE_CHECK;
match = this->label_match (*label_any,
@@ -377,17 +364,19 @@ TAO_DynUnion_i::set_discriminator (DynamicAny::DynAny_ptr value,
if (match)
{
+ // If the incoming label value matches the one we already
+ // have, we do nothing.
+ if (i == this->member_slot_)
+ {
+ return;
+ }
+
// If we got a match, a named member will be active.
this->discriminator_->from_any (*label_any,
ACE_TRY_ENV);
ACE_CHECK;
// member_type() does not work with aliased type codes.
- CORBA::TypeCode_var unaliased_tc =
- TAO_DynAnyFactory::strip_alias (this->type_.in (),
- ACE_TRY_ENV);
- ACE_CHECK;
-
CORBA::TypeCode_var member_tc =
unaliased_tc->member_type (i,
ACE_TRY_ENV);
@@ -432,7 +421,7 @@ TAO_DynUnion_i::set_discriminator (DynamicAny::DynAny_ptr value,
ACE_CHECK;
this->member_slot_ = ACE_static_cast (CORBA::ULong,
- default_index);
+ default_index);
}
}
@@ -924,7 +913,8 @@ TAO_DynUnion_i::label_match (const CORBA_Any &my_any,
// member_label() calls.
CORBA::TypeCode_var tc = my_any.type ();
- CORBA::TCKind kind = tc->kind (ACE_TRY_ENV);
+ CORBA::TCKind kind = TAO_DynAnyFactory::unalias (tc,
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
// No need to do any type checking - it was done before this