diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-06-29 00:01:47 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-06-29 00:01:47 +0000 |
commit | f896376fbb7bf2769b837ccdfdabc7a2ce38c90b (patch) | |
tree | 96b6b2dd228a3daf65739b31216c2288f41a5ced | |
parent | d1270e033c620410b0b087a817354e3c894d5807 (diff) | |
download | ATCD-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.cpp | 16 | ||||
-rw-r--r-- | TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp | 71 | ||||
-rw-r--r-- | TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.h | 6 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynUnion_i.cpp | 40 |
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 |