summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-03-25 00:19:56 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-03-25 00:19:56 +0000
commit523c9f504ba65154204c0e18035590ada351b23b (patch)
treef5750295ac06d7cf1d650580d5888b1380b9e044
parent32bcf5e90c05abce08f4de905b33a57b8f1e3374 (diff)
downloadATCD-523c9f504ba65154204c0e18035590ada351b23b.tar.gz
ChangeLogTag: Mon Mar 24 18:15:51 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog12
-rw-r--r--TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp9
-rw-r--r--TAO/tao/PortableServer/PortableServerC.cpp20
3 files changed, 39 insertions, 2 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 2220a931832..eaa01e00ce6 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,15 @@
+Mon Mar 24 18:15:51 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp:
+ * tao/PortableServer/PortableServerC.cpp:
+
+ Fixed code for generating CDR operator for a typedef'd
+ sequence whose element is itself a typedef'd sequence.
+ The IDL compiler source code that handles this case was
+ inadvertently removed in an earlier checkin. Also fixed
+ the CDR operator in PortableServer where the problem
+ was noticed.
+
Mon Mar 24 17:36:44 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
* TAO_IDL/be/be_visitor_interface/any_op_cs.cpp:
diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp
index d560e6484f7..03740875566 100644
--- a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp
@@ -42,6 +42,15 @@ be_visitor_sequence_cdr_op_cs::~be_visitor_sequence_cdr_op_cs (void)
int
be_visitor_sequence_cdr_op_cs::visit_sequence (be_sequence *node)
{
+ if (this->ctx_->alias ())
+ {
+ // We are here because the base type of the sequence node is
+ // itself a typedef'd sequence i.e., this is nested call resulting
+ // from bt->accept(0 below. For the case of sequence of
+ // anonymous sequence, see comment below.
+ return this->visit_node (node);
+ }
+
if (node->cli_stub_cdr_op_gen ()
|| node->imported ()
|| node->is_local ())
diff --git a/TAO/tao/PortableServer/PortableServerC.cpp b/TAO/tao/PortableServer/PortableServerC.cpp
index 0699c0cab2b..dde8679253a 100644
--- a/TAO/tao/PortableServer/PortableServerC.cpp
+++ b/TAO/tao/PortableServer/PortableServerC.cpp
@@ -10298,7 +10298,15 @@ CORBA::Boolean operator<< (
if (strm << _tao_seq_len)
{
// Encode all elements.
- }
+ CORBA::Boolean _tao_marshal_flag = 1;
+
+ for (CORBA::ULong i = 0; i < _tao_seq_len && _tao_marshal_flag; ++i)
+ {
+ _tao_marshal_flag = (strm << _tao_sequence[i]);
+ }
+
+ return _tao_marshal_flag;
+ }
return 0;
}
@@ -10329,7 +10337,15 @@ CORBA::Boolean operator<< (
return 1;
}
- // Retrieve all the elements.
+ // Retrieve all the elements.
+ CORBA::Boolean _tao_marshal_flag = 1;
+
+ for (CORBA::ULong i = 0; i < _tao_seq_len && _tao_marshal_flag; ++i)
+ {
+ _tao_marshal_flag = (strm >> _tao_sequence[i]);
+ }
+
+ return _tao_marshal_flag;
}
return 0;