diff options
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_union/cdr_op_ci.cpp')
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_union/cdr_op_ci.cpp | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_union/cdr_op_ci.cpp b/TAO/TAO_IDL/be/be_visitor_union/cdr_op_ci.cpp index 4f336f069fa..a8a2fbe44b7 100644 --- a/TAO/TAO_IDL/be/be_visitor_union/cdr_op_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union/cdr_op_ci.cpp @@ -68,9 +68,33 @@ be_visitor_union_cdr_op_ci::visit_union (be_union *node) << "TAO_OutputCDR &strm," << be_nl << "const " << node->name () << " &_tao_union" << be_uidt_nl << ")" << be_uidt_nl - << "{" << be_idt_nl - << "if (!(strm << _tao_union._d ()))" << be_idt_nl + << "{" << be_idt_nl; + + switch (node->udisc_type ()) + { + case AST_Expression::EV_bool: + *os << "CORBA_Any::from_boolean tmp (_tao_union._d ());" << be_nl + << "if ( !(strm << tmp) )" << be_idt_nl; + break; + + case AST_Expression::EV_char: + *os << "CORBA_Any::from_char tmp (_tao_union._d ());" << be_nl + << "if ( !(strm << tmp) )" << be_idt_nl; + break; + + case AST_Expression::EV_wchar: + *os << "CORBA_Any::from_wchar tmp (_tao_union._d ());" << be_nl + << "if ( !(strm << tmp) )" << be_idt_nl; + break; + + default: + *os << "if ( !(strm << _tao_union._d ()) )" << be_idt_nl; + break; + } + + *os << "{" << be_idt_nl << "return 0;" << be_uidt_nl + << "}" << be_uidt_nl << "CORBA::Boolean result = 0;" << be_nl << "switch (_tao_union._d ())" << be_nl << "{" << be_idt_nl; @@ -105,37 +129,28 @@ be_visitor_union_cdr_op_ci::visit_union (be_union *node) { case AST_Expression::EV_bool: *os << "CORBA_Any::to_boolean tmp (_tao_discriminant);" << be_nl - << "if ( !(strm >> tmp) )" << be_idt_nl - << "{" << be_idt_nl - << "return 0;" << be_uidt_nl - << "}" << be_uidt_nl; + << "if ( !(strm >> tmp) )" << be_idt_nl; break; case AST_Expression::EV_char: *os << "CORBA_Any::to_char tmp (_tao_discriminant);" << be_nl - << "if ( !(strm >> tmp) )" << be_idt_nl - << "{" << be_idt_nl - << "return 0;" << be_uidt_nl - << "}" << be_uidt_nl; + << "if ( !(strm >> tmp) )" << be_idt_nl; break; case AST_Expression::EV_wchar: *os << "CORBA_Any::to_wchar tmp (_tao_discriminant);" << be_nl - << "if ( !(strm >> tmp) )" << be_idt_nl - << "{" << be_idt_nl - << "return 0;" << be_uidt_nl - << "}" << be_uidt_nl; + << "if ( !(strm >> tmp) )" << be_idt_nl; break; default: - *os << "if ( !(strm >> _tao_discriminant) )" << be_idt_nl - << "{" << be_idt_nl - << "return 0;" << be_uidt_nl - << "}" << be_uidt_nl; + *os << "if ( !(strm >> _tao_discriminant) )" << be_idt_nl; break; } - *os << "CORBA::Boolean result = 0;" << be_nl + *os << "{" << be_idt_nl + << "return 0;" << be_uidt_nl + << "}" << be_uidt_nl + << "CORBA::Boolean result = 0;" << be_nl << "switch (_tao_discriminant)" << be_nl << "{" << be_idt_nl; |