summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/BasicStream.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-12-04 20:30:06 +0000
committerMarc Laukien <marc@zeroc.com>2001-12-04 20:30:06 +0000
commit334da51dea36fa4c6b66cb7a1150d98cdfed3139 (patch)
tree42e3bc76f013ca4f1c414b86fd24500f342cc385 /cpp/src/Ice/BasicStream.cpp
parentUpdated slice2freeze & freeze demo. (diff)
downloadice-334da51dea36fa4c6b66cb7a1150d98cdfed3139.tar.bz2
ice-334da51dea36fa4c6b66cb7a1150d98cdfed3139.tar.xz
ice-334da51dea36fa4c6b66cb7a1150d98cdfed3139.zip
fixed marshaling bug for Ice::Object
Diffstat (limited to 'cpp/src/Ice/BasicStream.cpp')
-rw-r--r--cpp/src/Ice/BasicStream.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/cpp/src/Ice/BasicStream.cpp b/cpp/src/Ice/BasicStream.cpp
index e2573e23e0e..67495714ba1 100644
--- a/cpp/src/Ice/BasicStream.cpp
+++ b/cpp/src/Ice/BasicStream.cpp
@@ -904,6 +904,12 @@ IceInternal::BasicStream::read(const char* signatureType, ObjectPtr& v)
v = 0;
return true;
}
+ else if (id == "::Ice::Object")
+ {
+ v = new ::Ice::Object;
+ read(v);
+ return true;
+ }
else
{
ObjectFactoryPtr factory = _instance->servantFactoryManager()->find(id);
@@ -913,15 +919,13 @@ IceInternal::BasicStream::read(const char* signatureType, ObjectPtr& v)
v = factory->create(id);
if (v)
{
- _encapsStack.back().objectsRead.push_back(v);
- v->__read(this);
+ read(v);
return true;
}
}
if (id == signatureType)
{
- _encapsStack.back().objectsRead.push_back(v);
return false;
}
@@ -931,6 +935,14 @@ IceInternal::BasicStream::read(const char* signatureType, ObjectPtr& v)
}
void
+IceInternal::BasicStream::read(const ObjectPtr& v)
+{
+ assert(v);
+ _encapsStack.back().objectsRead.push_back(v);
+ v->__read(this);
+}
+
+void
IceInternal::BasicStream::write(const UserException& v)
{
write(v.__getExceptionIds()[0]);