diff options
Diffstat (limited to 'cpp/src/Ice/BasicStream.cpp')
-rw-r--r-- | cpp/src/Ice/BasicStream.cpp | 18 |
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]); |