diff options
author | Marc Laukien <marc@zeroc.com> | 2001-12-04 20:30:06 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2001-12-04 20:30:06 +0000 |
commit | 334da51dea36fa4c6b66cb7a1150d98cdfed3139 (patch) | |
tree | 42e3bc76f013ca4f1c414b86fd24500f342cc385 /cpp/src/Ice/BasicStream.cpp | |
parent | Updated slice2freeze & freeze demo. (diff) | |
download | ice-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.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]); |