summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/BasicStream.cpp
diff options
context:
space:
mode:
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]);