diff options
Diffstat (limited to 'TAO/tao/AnyTypeCode/skip.cpp')
-rw-r--r-- | TAO/tao/AnyTypeCode/skip.cpp | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/TAO/tao/AnyTypeCode/skip.cpp b/TAO/tao/AnyTypeCode/skip.cpp index 0741c2e62d5..f724a6fa75a 100644 --- a/TAO/tao/AnyTypeCode/skip.cpp +++ b/TAO/tao/AnyTypeCode/skip.cpp @@ -1,4 +1,3 @@ - //============================================================================= /** * @file skip.cpp @@ -851,7 +850,6 @@ TAO::traverse_status TAO_Marshal_Value::skip (CORBA::TypeCode_ptr tc, TAO_InputCDR *stream) { TAO::traverse_status retval = TAO::TRAVERSE_CONTINUE; - CORBA::TypeCode_var param; // Use the same method to skip over our base valuetype. // To achive this we'll need to distinguish between @@ -932,32 +930,37 @@ TAO_Marshal_Value::skip (CORBA::TypeCode_ptr tc, TAO_InputCDR *stream) } - // Handle our base valuetype if any. - param = tc->concrete_base_type (); - - CORBA::TCKind const k = param->kind (); + CORBA::TypeCode_var param; - if (k != CORBA::tk_null) + if (CORBA::tk_value_box == tc->kind ()) { - retval = this->skip (param.in (), stream); - - if (retval != TAO::TRAVERSE_CONTINUE) + param = tc->content_type (); + retval = TAO_Marshal_Object::perform_skip (param.in (), stream); + } + else // tc->kind () must be tk_value or tk_event + { + // Handle our base valuetype if any. + param = tc->concrete_base_type (); + if (CORBA::tk_null != param->kind ()) { - return retval; + retval = this->skip (param.in (), stream); } - } - // Number of fields in the valuetype. - CORBA::ULong const member_count = - tc->member_count (); - - for (CORBA::ULong i = 0; - i < member_count && retval == TAO::TRAVERSE_CONTINUE; - ++i) - { - param = tc->member_type (i); + if (retval == TAO::TRAVERSE_CONTINUE) + { + // Number of fields in the valuetype. + CORBA::ULong const member_count = + tc->member_count (); - retval = TAO_Marshal_Object::perform_skip (param.in (), stream); + for (CORBA::ULong i = 0; + i < member_count && retval == TAO::TRAVERSE_CONTINUE; + ++i) + { + param = tc->member_type (i); + retval = TAO_Marshal_Object::perform_skip ( + param.in (), stream); + } + } } if (retval == TAO::TRAVERSE_CONTINUE) |