diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 20 | ||||
-rw-r--r-- | cpp/src/slice2cs/Gen.cpp | 38 | ||||
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 43 |
3 files changed, 101 insertions, 0 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index ac7058fc64b..f7e0f4b615f 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -2237,6 +2237,10 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p) { C << nl << "::IceInternal::BasicStream* __is = __result->__startReadParams();"; writeUnmarshalCode(C, outParams, p, _useWstring | TypeContextAMIEnd); + if(p->returnsClasses()) + { + C << nl << "__is->readPendingObjects();"; + } C << nl << "__result->__endReadParams();"; } else @@ -2303,6 +2307,10 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p) { C << nl << "::IceInternal::BasicStream* __is = __result->__startReadParams();"; writeUnmarshalCode(C, outParams, p, _useWstring | TypeContextAMIPrivateEnd); + if(p->returnsClasses()) + { + C << nl << "__is->readPendingObjects();"; + } C << nl << "__result->__endReadParams();"; } else @@ -2807,6 +2815,10 @@ Slice::Gen::DelegateMVisitor::visitOperation(const OperationPtr& p) { C << nl << "::IceInternal::BasicStream* __is = __og.startReadParams();"; writeUnmarshalCode(C, outParams, p); + if(p->returnsClasses()) + { + C << nl << "__is->readPendingObjects();"; + } C << nl << "__og.endReadParams();"; } else @@ -4260,6 +4272,10 @@ Slice::Gen::ObjectVisitor::visitOperation(const OperationPtr& p) C << nl << "::IceInternal::BasicStream* __is = __inS.startReadParams();"; writeAllocateCode(C, inParams, 0, _useWstring | TypeContextInParam); writeUnmarshalCode(C, inParams, 0, TypeContextInParam); + if(p->sendsClasses()) + { + C << nl << "__is->readPendingObjects();"; + } C << nl << "__inS.endReadParams();"; } else @@ -4318,6 +4334,10 @@ Slice::Gen::ObjectVisitor::visitOperation(const OperationPtr& p) C << nl << "::IceInternal::BasicStream* __is = __inS.startReadParams();"; writeAllocateCode(C, inParams, 0, _useWstring | TypeContextInParam); writeUnmarshalCode(C, inParams, 0, TypeContextInParam); + if(p->sendsClasses()) + { + C << nl << "__is->readPendingObjects();"; + } C << nl << "__inS.endReadParams();"; } else diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp index b32125284b9..3e6290ad7c8 100644 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -870,6 +870,10 @@ Slice::CsVisitor::writeDispatchAndMarshalling(const ClassDefPtr& p, bool stream) } } writeMarshalUnmarshalParams(inParams, 0, false); + if(op->sendsClasses()) + { + _out << nl << "is__.readPendingObjects();"; + } _out << nl << "inS__.endReadParams();"; } else @@ -940,6 +944,10 @@ Slice::CsVisitor::writeDispatchAndMarshalling(const ClassDefPtr& p, bool stream) _out << nl << "IceInternal.BasicStream os__ = inS__.startWriteParams__(" << opFormatTypeToString(op) << ");"; writeMarshalUnmarshalParams(outParams, op, true); + if(op->returnsClasses()) + { + _out << nl << "os__.writePendingObjects();"; + } _out << nl << "inS__.endWriteParams__(true);"; } else @@ -3600,6 +3608,16 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) _out << eb; } + if((!base || (base && !base->usesClasses())) && p->usesClasses()) + { + _out << sp; + emitGeneratedCodeAttribute(); + _out << nl << "public override bool usesClasses__()"; + _out << sb; + _out << nl << "return true;"; + _out << eb; + } + if(preserved && !basePreserved) { _out << sp << nl << "protected Ice.SlicedData slicedData__;"; @@ -4975,6 +4993,10 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p) } } writeMarshalUnmarshalParams(outParams, op, false); + if(op->returnsClasses()) + { + _out << nl << "is__.readPendingObjects();"; + } _out << nl << "outAsync__.endReadParams__();"; writePostUnmarshalParams(outParams, op); if(ret) @@ -5038,6 +5060,10 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p) _out << nl << "IceInternal.BasicStream os__ = result__.startWriteParams__(" << opFormatTypeToString(op) << ");"; writeMarshalUnmarshalParams(inParams, 0, true); + if(op->sendsClasses()) + { + _out << nl << "os__.writePendingObjects();"; + } _out << nl << "result__.endWriteParams__();"; } else @@ -5921,6 +5947,10 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) _out << sb; _out << nl << "IceInternal.BasicStream os__ = og__.startWriteParams(" << opFormatTypeToString(op) << ");"; writeMarshalUnmarshalParams(inParams, 0, true); + if(op->sendsClasses()) + { + _out << nl << "os__.writePendingObjects();"; + } _out << nl << "og__.endWriteParams();"; _out << eb; _out << nl << "catch(Ice.LocalException ex__)"; @@ -6019,6 +6049,10 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) } } writeMarshalUnmarshalParams(outParams, op, false); + if(op->returnsClasses()) + { + _out << nl << "is__.readPendingObjects();"; + } _out << nl << "og__.endReadParams();"; writePostUnmarshalParams(outParams, op); } @@ -6539,6 +6573,10 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) _out << sb; _out << nl << "IceInternal.BasicStream os__ = startWriteParams__(" << opFormatTypeToString(p) << ");"; writeMarshalUnmarshalParams(outParams, p, true); + if(p->returnsClasses()) + { + _out << nl << "os__.writePendingObjects();"; + } _out << nl << "endWriteParams__(true);"; _out << eb; _out << nl << "catch(Ice.LocalException ex__)"; diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index 521b6cc2a93..e5dc96633cc 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -991,6 +991,10 @@ Slice::JavaVisitor::writeDispatchAndMarshalling(Output& out, const ClassDefPtr& } iter = 0; writeMarshalUnmarshalParams(out, package, inParams, 0, iter, false, true, true); + if(op->sendsClasses()) + { + out << nl << "__is.readPendingObjects();"; + } out << nl << "__inS.endReadParams();"; } else @@ -1052,6 +1056,10 @@ Slice::JavaVisitor::writeDispatchAndMarshalling(Output& out, const ClassDefPtr& out << nl << "IceInternal.BasicStream __os = __inS.__startWriteParams(" << opFormatTypeToString(op) << ");"; writeMarshalUnmarshalParams(out, package, outParams, op, iter, true, optionalMapping, true); + if(op->returnsClasses()) + { + out << nl << "__os.writePendingObjects();"; + } out << nl << "__inS.__endWriteParams(true);"; } else @@ -1126,6 +1134,10 @@ Slice::JavaVisitor::writeDispatchAndMarshalling(Output& out, const ClassDefPtr& } } writeMarshalUnmarshalParams(out, package, inParams, 0, iter, false, true, true); + if(op->sendsClasses()) + { + out << nl << "__is.readPendingObjects();"; + } out << nl << "__inS.endReadParams();"; } else @@ -3354,6 +3366,17 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) out << eb; } + if(p->usesClasses()) + { + if(!base || (base && !base->usesClasses())) + { + out << sp << nl << "public boolean" << nl << "__usesClasses()"; + out << sb; + out << nl << "return true;"; + out << eb; + } + } + if(preserved && !basePreserved) { out << sp << nl << "protected Ice.SlicedData __slicedData;"; @@ -4450,6 +4473,10 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p) } } writeMarshalUnmarshalParams(out, package, pl, 0, iter, true, optionalMapping); + if(op->sendsClasses()) + { + out << nl << "__os.writePendingObjects();"; + } out << nl << "__result.__endWriteParams();"; } else @@ -4525,6 +4552,10 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p) } } writeMarshalUnmarshalParams(out, package, pl, op, iter, false, true); + if(op->returnsClasses()) + { + out << nl << "__is.readPendingObjects();"; + } out << nl << "__result.__endReadParams();"; } else @@ -5454,6 +5485,10 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) out << sb; out << nl << "IceInternal.BasicStream __os = __og.startWriteParams(" << opFormatTypeToString(op) << ");"; writeMarshalUnmarshalParams(out, package, inParams, 0, iter, true, optionalMapping); + if(op->sendsClasses()) + { + out << nl << "__os.writePendingObjects();"; + } out << nl << "__og.endWriteParams();"; out << eb; out << nl << "catch(Ice.LocalException __ex)"; @@ -5497,6 +5532,10 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p) { out << nl << "IceInternal.BasicStream __is = __og.startReadParams();"; writeMarshalUnmarshalParams(out, package, outParams, op, iter, false, true); + if(op->returnsClasses()) + { + out << nl << "__is.readPendingObjects();"; + } out << nl << "__og.endReadParams();"; } else @@ -6563,6 +6602,10 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) out << nl << "IceInternal.BasicStream __os = this.__startWriteParams(" << opFormatTypeToString(p) << ");"; writeMarshalUnmarshalParams(out, classPkg, outParams, p, iter, true, optionalMapping, false); + if(p->returnsClasses()) + { + out << nl << "__os.writePendingObjects();"; + } out << nl << "this.__endWriteParams(true);"; out << eb; out << nl << "catch(Ice.LocalException __ex)"; |