diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-11-30 18:11:27 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-11-30 18:11:27 +0000 |
commit | 925b4812a6ad31d959c267746f2e7696818676f5 (patch) | |
tree | 48ef0b36d442ee10e3a79281d741378d15405a6b | |
parent | 18097461bcedb50914d5bbed11749f629dc96f5c (diff) | |
download | ATCD-925b4812a6ad31d959c267746f2e7696818676f5.tar.gz |
ChangeLogTag: Thu Nov 30 18:01:43 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r-- | TAO/ChangeLog | 31 | ||||
-rw-r--r-- | TAO/tao/AnyTypeCode/BasicTypeTraits.cpp | 193 | ||||
-rw-r--r-- | TAO/tao/AnyTypeCode/BasicTypeTraits.h | 64 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynAnyUtils_T.h | 8 | ||||
-rw-r--r-- | TAO/tests/DynAny_Test/analyzer.cpp | 52 |
5 files changed, 315 insertions, 33 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index d4804b97d08..2301567ad8b 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,18 +1,41 @@ +Thu Nov 30 18:01:43 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu> + + * tao/AnyTypeCode/BasicTypeTraits.cpp: + * tao/AnyTypeCode/BasicTypeTraits.h: + + Added one-line convert() method to each specialization, + since returning the extraction type in + DynAnyBasicTypeUtils<>::get_value() is not correct for + chars, wchars, octets and booleans. + + * tao/DynamicAny/DynAnyUtils_T.h: + + Replaced an implicit temporary in + DynAnyBasicTypeUtils<>::get_value() with an explicit + constructor call, since the temporary was confused with a + cast by some compilers. + + * tests/DynAny_Test/analyzer.cpp: + + Replace a call to length() on an aliased array typecode + (which returned a BADKIND exception) to a call on the + unaliased typecode. + Thu Nov 30 14:48:57 UTC 2006 Vadym Ridosh <vridosh@prismtech.com> * tao/PortableServer/Var_Size_SArgument_T.cpp * tao/Bounded_Sequence_CDR_T.h * tao/Unbounded_Sequence_CDR_T.h - Fix for bugzilla 1676 (uninitialized "out" param for sequence<string> + Fix for bugzilla 1676 (uninitialized "out" param for sequence<string> can cause server to core). Old attempt to fix this was also removed. Thu Nov 30 14:17:22 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu> - * orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp (visito_union_pos): - + * orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp (visit_union_pos): + Change to use the new DynAnyFactory method similar to the change to Log_Constraint_Visitors.cpp in - + Tue Nov 28 19:32:46 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu> Thu Nov 30 13:28:22 UTC 2006 Chad Elliott <elliott_c@ociweb.com> diff --git a/TAO/tao/AnyTypeCode/BasicTypeTraits.cpp b/TAO/tao/AnyTypeCode/BasicTypeTraits.cpp index 149bee750b9..32f4bdf335c 100644 --- a/TAO/tao/AnyTypeCode/BasicTypeTraits.cpp +++ b/TAO/tao/AnyTypeCode/BasicTypeTraits.cpp @@ -38,6 +38,13 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Boolean>::tckind_value = CORBA::tk_boolean; + BasicTypeTraits<CORBA::Boolean>::return_type + BasicTypeTraits<CORBA::Boolean>::convert ( + BasicTypeTraits<CORBA::Boolean>::extract_type& et) + { + return et.ref_; + } + //================================================================ CORBA::TypeCode_ptr const @@ -46,6 +53,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Octet>::tckind_value = CORBA::tk_octet; + BasicTypeTraits<CORBA::Octet>::return_type + BasicTypeTraits<CORBA::Octet>::convert (extract_type& et) + { + return et.ref_; + } + //================================================================ CORBA::TypeCode_ptr const @@ -54,6 +67,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Char>::tckind_value = CORBA::tk_char; + BasicTypeTraits<CORBA::Char>::return_type + BasicTypeTraits<CORBA::Char>::convert (extract_type& et) + { + return et.ref_; + } + //================================================================ #if (defined (ACE_HAS_WCHAR) || defined (ACE_HAS_XPG4_MULTIBYTE_CHAR)) && !defined (ACE_LACKS_NATIVE_WCHAR_T) @@ -64,6 +83,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::WChar>::tckind_value = CORBA::tk_wchar; + BasicTypeTraits<CORBA::WChar>::return_type + BasicTypeTraits<CORBA::WChar>::convert (extract_type& et) + { + return et.ref_; + } + #endif //================================================================ @@ -74,6 +99,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Short>::tckind_value = CORBA::tk_short; + BasicTypeTraits<CORBA::Short>::return_type + BasicTypeTraits<CORBA::Short>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -82,6 +113,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::UShort>::tckind_value = CORBA::tk_ushort; + BasicTypeTraits<CORBA::UShort>::return_type + BasicTypeTraits<CORBA::UShort>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -90,6 +127,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Long>::tckind_value = CORBA::tk_long; + BasicTypeTraits<CORBA::Long>::return_type + BasicTypeTraits<CORBA::Long>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -98,6 +141,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::ULong>::tckind_value = CORBA::tk_ulong; + BasicTypeTraits<CORBA::ULong>::return_type + BasicTypeTraits<CORBA::ULong>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -106,6 +155,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::LongLong>::tckind_value = CORBA::tk_longlong; + BasicTypeTraits<CORBA::LongLong>::return_type + BasicTypeTraits<CORBA::LongLong>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -114,6 +169,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::ULongLong>::tckind_value = CORBA::tk_ulonglong; + BasicTypeTraits<CORBA::ULongLong>::return_type + BasicTypeTraits<CORBA::ULongLong>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -122,6 +183,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Float>::tckind_value = CORBA::tk_float; + BasicTypeTraits<CORBA::Float>::return_type + BasicTypeTraits<CORBA::Float>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -130,6 +197,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Double>::tckind_value = CORBA::tk_double; + BasicTypeTraits<CORBA::Double>::return_type + BasicTypeTraits<CORBA::Double>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -138,6 +211,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::LongDouble>::tckind_value = CORBA::tk_longdouble; + BasicTypeTraits<CORBA::LongDouble>::return_type + BasicTypeTraits<CORBA::LongDouble>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -146,6 +225,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Char *>::tckind_value = CORBA::tk_string; + BasicTypeTraits<CORBA::Char *>::return_type + BasicTypeTraits<CORBA::Char *>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -154,6 +239,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::WChar *>::tckind_value = CORBA::tk_wstring; + BasicTypeTraits<CORBA::WChar *>::return_type + BasicTypeTraits<CORBA::WChar *>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -162,6 +253,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Any>::tckind_value = CORBA::tk_any; + BasicTypeTraits<CORBA::Any>::return_type + BasicTypeTraits<CORBA::Any>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -170,6 +267,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::Object_ptr>::tckind_value = CORBA::tk_objref; + BasicTypeTraits<CORBA::Object_ptr>::return_type + BasicTypeTraits<CORBA::Object_ptr>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -178,6 +281,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::TypeCode_ptr>::tckind_value = CORBA::tk_TypeCode; + BasicTypeTraits<CORBA::TypeCode_ptr>::return_type + BasicTypeTraits<CORBA::TypeCode_ptr>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -186,6 +295,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::BooleanSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::BooleanSeq>::return_type + BasicTypeTraits<CORBA::BooleanSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -194,6 +309,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::OctetSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::OctetSeq>::return_type + BasicTypeTraits<CORBA::OctetSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -202,6 +323,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::CharSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::CharSeq>::return_type + BasicTypeTraits<CORBA::CharSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -210,6 +337,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::WCharSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::WCharSeq>::return_type + BasicTypeTraits<CORBA::WCharSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -218,6 +351,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::ShortSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::ShortSeq>::return_type + BasicTypeTraits<CORBA::ShortSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -226,6 +365,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::UShortSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::UShortSeq>::return_type + BasicTypeTraits<CORBA::UShortSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -234,6 +379,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::LongSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::LongSeq>::return_type + BasicTypeTraits<CORBA::LongSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -242,6 +393,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::ULongSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::ULongSeq>::return_type + BasicTypeTraits<CORBA::ULongSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -250,6 +407,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::LongLongSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::LongLongSeq>::return_type + BasicTypeTraits<CORBA::LongLongSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -258,6 +421,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::ULongLongSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::ULongLongSeq>::return_type + BasicTypeTraits<CORBA::ULongLongSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -266,6 +435,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::FloatSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::FloatSeq>::return_type + BasicTypeTraits<CORBA::FloatSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -274,6 +449,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::DoubleSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::DoubleSeq>::return_type + BasicTypeTraits<CORBA::DoubleSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -282,6 +463,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::LongDoubleSeq>::tckind_value = CORBA::tk_sequence; + BasicTypeTraits<CORBA::LongDoubleSeq>::return_type + BasicTypeTraits<CORBA::LongDoubleSeq>::convert (extract_type& et) + { + return et; + } + //================================================================ CORBA::TypeCode_ptr const @@ -289,6 +476,12 @@ namespace TAO CORBA::TCKind const BasicTypeTraits<CORBA::AnySeq>::tckind_value = CORBA::tk_sequence; + + BasicTypeTraits<CORBA::AnySeq>::return_type + BasicTypeTraits<CORBA::AnySeq>::convert (extract_type& et) + { + return et; + } } TAO_END_VERSIONED_NAMESPACE_DECL diff --git a/TAO/tao/AnyTypeCode/BasicTypeTraits.h b/TAO/tao/AnyTypeCode/BasicTypeTraits.h index 8a5925837a8..73b3c0b4109 100644 --- a/TAO/tao/AnyTypeCode/BasicTypeTraits.h +++ b/TAO/tao/AnyTypeCode/BasicTypeTraits.h @@ -55,6 +55,8 @@ namespace TAO typedef CORBA::Any::from_boolean insert_type; typedef CORBA::Any::to_boolean extract_type; typedef CORBA::Boolean return_type; + + static return_type convert (extract_type& et); }; template<> @@ -66,6 +68,8 @@ namespace TAO typedef CORBA::Any::from_octet insert_type; typedef CORBA::Any::to_octet extract_type; typedef CORBA::Octet return_type; + + static return_type convert (extract_type& et); }; template<> @@ -77,6 +81,8 @@ namespace TAO typedef CORBA::Any::from_char insert_type; typedef CORBA::Any::to_char extract_type; typedef CORBA::Char return_type; + + static return_type convert (extract_type& et); }; #if (defined (ACE_HAS_WCHAR) || defined (ACE_HAS_XPG4_MULTIBYTE_CHAR)) && !defined (ACE_LACKS_NATIVE_WCHAR_T) @@ -89,6 +95,8 @@ namespace TAO typedef CORBA::Any::from_wchar insert_type; typedef CORBA::Any::to_wchar extract_type; typedef CORBA::WChar return_type; + + static return_type convert (extract_type& et); }; #endif @@ -101,6 +109,8 @@ namespace TAO typedef CORBA::Short insert_type; typedef CORBA::Short extract_type; typedef CORBA::Short return_type; + + static return_type convert (extract_type& et); }; template<> @@ -112,6 +122,8 @@ namespace TAO typedef CORBA::UShort insert_type; typedef CORBA::UShort extract_type; typedef CORBA::UShort return_type; + + static return_type convert (extract_type& et); }; template<> @@ -123,6 +135,8 @@ namespace TAO typedef CORBA::Long insert_type; typedef CORBA::Long extract_type; typedef CORBA::Long return_type; + + static return_type convert (extract_type& et); }; template<> @@ -134,6 +148,8 @@ namespace TAO typedef CORBA::ULong insert_type; typedef CORBA::ULong extract_type; typedef CORBA::ULong return_type; + + static return_type convert (extract_type& et); }; template<> @@ -145,6 +161,8 @@ namespace TAO typedef CORBA::LongLong insert_type; typedef CORBA::LongLong extract_type; typedef CORBA::LongLong return_type; + + static return_type convert (extract_type& et); }; template<> @@ -156,6 +174,8 @@ namespace TAO typedef CORBA::ULongLong insert_type; typedef CORBA::ULongLong extract_type; typedef CORBA::ULongLong return_type; + + static return_type convert (extract_type& et); }; template<> @@ -167,6 +187,8 @@ namespace TAO typedef CORBA::Float insert_type; typedef CORBA::Float extract_type; typedef CORBA::Float return_type; + + static return_type convert (extract_type& et); }; template<> @@ -178,6 +200,8 @@ namespace TAO typedef CORBA::Double insert_type; typedef CORBA::Double extract_type; typedef CORBA::Double return_type; + + static return_type convert (extract_type& et); }; template<> @@ -189,6 +213,8 @@ namespace TAO typedef CORBA::LongDouble insert_type; typedef CORBA::LongDouble extract_type; typedef CORBA::LongDouble return_type; + + static return_type convert (extract_type& et); }; template<> @@ -200,6 +226,8 @@ namespace TAO typedef CORBA::Char * insert_type; typedef CORBA::Char * extract_type; typedef CORBA::Char * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -211,6 +239,8 @@ namespace TAO typedef CORBA::WChar * insert_type; typedef CORBA::WChar * extract_type; typedef CORBA::WChar * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -222,6 +252,8 @@ namespace TAO typedef CORBA::Any insert_type; typedef CORBA::Any * extract_type; typedef CORBA::Any * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -233,6 +265,8 @@ namespace TAO typedef CORBA::Object_ptr insert_type; typedef CORBA::Object_ptr extract_type; typedef CORBA::Object_ptr return_type; + + static return_type convert (extract_type& et); }; template<> @@ -244,6 +278,8 @@ namespace TAO typedef CORBA::TypeCode_ptr insert_type; typedef CORBA::TypeCode_ptr extract_type; typedef CORBA::TypeCode_ptr return_type; + + static return_type convert (extract_type& et); }; template<> @@ -255,6 +291,8 @@ namespace TAO typedef CORBA::BooleanSeq insert_type; typedef CORBA::BooleanSeq * extract_type; typedef CORBA::BooleanSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -266,6 +304,8 @@ namespace TAO typedef CORBA::OctetSeq insert_type; typedef CORBA::OctetSeq * extract_type; typedef CORBA::OctetSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -277,6 +317,8 @@ namespace TAO typedef CORBA::CharSeq insert_type; typedef CORBA::CharSeq * extract_type; typedef CORBA::CharSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -288,6 +330,8 @@ namespace TAO typedef CORBA::WCharSeq insert_type; typedef CORBA::WCharSeq * extract_type; typedef CORBA::WCharSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -299,6 +343,8 @@ namespace TAO typedef CORBA::ShortSeq insert_type; typedef CORBA::ShortSeq * extract_type; typedef CORBA::ShortSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -310,6 +356,8 @@ namespace TAO typedef CORBA::UShortSeq insert_type; typedef CORBA::UShortSeq * extract_type; typedef CORBA::UShortSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -321,6 +369,8 @@ namespace TAO typedef CORBA::LongSeq insert_type; typedef CORBA::LongSeq * extract_type; typedef CORBA::LongSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -332,6 +382,8 @@ namespace TAO typedef CORBA::ULongSeq insert_type; typedef CORBA::ULongSeq * extract_type; typedef CORBA::ULongSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -343,6 +395,8 @@ namespace TAO typedef CORBA::LongLongSeq insert_type; typedef CORBA::LongLongSeq * extract_type; typedef CORBA::LongLongSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -354,6 +408,8 @@ namespace TAO typedef CORBA::ULongLongSeq insert_type; typedef CORBA::ULongLongSeq * extract_type; typedef CORBA::ULongLongSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -365,6 +421,8 @@ namespace TAO typedef CORBA::FloatSeq insert_type; typedef CORBA::FloatSeq * extract_type; typedef CORBA::FloatSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -376,6 +434,8 @@ namespace TAO typedef CORBA::DoubleSeq insert_type; typedef CORBA::DoubleSeq * extract_type; typedef CORBA::DoubleSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -387,6 +447,8 @@ namespace TAO typedef CORBA::LongDoubleSeq insert_type; typedef CORBA::LongDoubleSeq * extract_type; typedef CORBA::LongDoubleSeq * return_type; + + static return_type convert (extract_type& et); }; template<> @@ -398,6 +460,8 @@ namespace TAO typedef CORBA::AnySeq insert_type; typedef CORBA::AnySeq * extract_type; typedef CORBA::AnySeq * return_type; + + static return_type convert (extract_type& et); }; } diff --git a/TAO/tao/DynamicAny/DynAnyUtils_T.h b/TAO/tao/DynamicAny/DynAnyUtils_T.h index 8d421a962d9..08742ad5d00 100644 --- a/TAO/tao/DynamicAny/DynAnyUtils_T.h +++ b/TAO/tao/DynamicAny/DynAnyUtils_T.h @@ -56,7 +56,8 @@ namespace TAO the_dynany->check_type (TAO::BasicTypeTraits<T>::tc_value); CORBA::Any &my_any = the_dynany->the_any (); typedef typename TAO::BasicTypeTraits<T>::insert_type i_type; - my_any <<= i_type (val); + i_type insert_arg (val); + my_any <<= insert_arg; } } @@ -85,15 +86,16 @@ namespace TAO typedef typename TAO::BasicTypeTraits<T>::return_type ret_type; typedef typename TAO::BasicTypeTraits<T>::extract_type ext_type; ret_type retval = ret_type (); + ext_type extval (retval); const CORBA::Any &my_any = the_dynany->the_any (); - if (!(my_any >>= ext_type (retval))) + if (!(my_any >>= extval)) { ACE_THROW_RETURN (DynamicAny::DynAny::TypeMismatch (), TAO::BasicTypeTraits<T>::return_type ()); } - return retval; + return TAO::BasicTypeTraits<T>::convert (extval); } } }; diff --git a/TAO/tests/DynAny_Test/analyzer.cpp b/TAO/tests/DynAny_Test/analyzer.cpp index 43e09879f4d..55bad99ed41 100644 --- a/TAO/tests/DynAny_Test/analyzer.cpp +++ b/TAO/tests/DynAny_Test/analyzer.cpp @@ -24,7 +24,7 @@ if (debug_) \ ACE_DEBUG ((LM_DEBUG, str , b)); \ } break; - + #define CASEBS(type,CT,str) case CORBA::tk_##type: \ {\ CORBA::CT##Seq_var seq = da->get_##type##_seq (); \ @@ -47,7 +47,7 @@ } \ --level_; \ } \ - break; + break; DynAnyAnalyzer::DynAnyAnalyzer (CORBA::ORB_ptr orb, DynamicAny::DynAnyFactory_ptr dynany_factory, @@ -87,7 +87,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) ACE_CHECK; CORBA::TypeCode_var dup = CORBA::TypeCode::_duplicate (tc.in ()); - + // strip aliases while (kind == CORBA::tk_alias) { @@ -117,7 +117,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) if (da->seek (0) ) { level_++; - + do { DynamicAny::DynAny_var cc = @@ -143,7 +143,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) } } while (da->next ()); - + level_--; } } @@ -173,7 +173,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) if (ds->seek (0UL)) { level_++; - + do { tab(level_); @@ -193,7 +193,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) i++; } while (da->next ()); - + level_--; } } @@ -213,7 +213,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) level_++; CORBA::ULong const len = - tc->length (ACE_ENV_SINGLE_ARG_PARAMETER); + dup->length (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK; for (CORBA::ULong i = 0 ; i < len; ++i) @@ -310,7 +310,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) { CORBA::String_var b (da->get_string ()); tab (level_); - + if (debug_) { ACE_DEBUG ((LM_DEBUG, " Value (string) = %s\n", b.in ())); @@ -321,7 +321,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) case CORBA::tk_TypeCode: { tab (level_); - + if (debug_) { CORBA::TCKind const kind = @@ -338,7 +338,7 @@ void DynAnyAnalyzer::analyze (DynamicAny::DynAny_ptr da ACE_ENV_ARG_DECL) default: { tab (level_); - + if (debug_) { CORBA::TCKind const kind = @@ -365,9 +365,9 @@ DynAnyAnalyzer::analyze_basic_seq (CORBA::TypeCode_ptr tc, { CORBA::TypeCode_var ct = tc->content_type (); CORBA::TCKind tk = ct->kind (); - + tab (level_); - + if (debug_) { ACE_DEBUG ((LM_DEBUG, @@ -377,28 +377,28 @@ DynAnyAnalyzer::analyze_basic_seq (CORBA::TypeCode_ptr tc, switch (tk) { CASEBS (boolean, Boolean, " Value (bool) = %d\n"); - CASEBS (octet, Octet, " Value (octet) = %c\n"); - CASEBS (char, Char, " Value (char) = %c\n"); - CASEBS (wchar, WChar, " Value (wchar) = %u\n"); - CASEBS (short, Short, " Value (short) = %d\n"); - CASEBS (ushort, UShort, " Value (ushort) = %u\n"); - CASEBS (long, Long, " Value (long) = %d\n"); - CASEBS (ulong, ULong, " Value (ulong) = %u\n"); - CASEBS (longlong, LongLong, " Value (longlong) = %Ld\n"); - CASEBS (ulonglong, ULongLong, " Value (ulonglong) = %Lu\n"); - CASEBS (float, Float, " Value (float) = %f\n"); - CASEBS (double, Double, " Value (double) = %f\n"); + CASEBS (octet, Octet, " Value (octet) = %c\n"); + CASEBS (char, Char, " Value (char) = %c\n"); + CASEBS (wchar, WChar, " Value (wchar) = %u\n"); + CASEBS (short, Short, " Value (short) = %d\n"); + CASEBS (ushort, UShort, " Value (ushort) = %u\n"); + CASEBS (long, Long, " Value (long) = %d\n"); + CASEBS (ulong, ULong, " Value (ulong) = %u\n"); + CASEBS (longlong, LongLong, " Value (longlong) = %Ld\n"); + CASEBS (ulonglong, ULongLong, " Value (ulonglong) = %Lu\n"); + CASEBS (float, Float, " Value (float) = %f\n"); + CASEBS (double, Double, " Value (double) = %f\n"); case CORBA::tk_longdouble: default: tab (level_); - + if (debug_) { ACE_DEBUG ((LM_DEBUG, " unhandled typecode = %d\n", static_cast<int> (tk))); } - + break; } } |