summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-08-10 16:25:44 +0000
committerMarc Laukien <marc@zeroc.com>2001-08-10 16:25:44 +0000
commit5c1be36ed94af2a2ebb3e41ac62f5284ca607ae0 (patch)
tree9376e4f1333f4c00a8b8e27d2fc815c1531e02e8 /cpp/src
parentwin fixes (diff)
downloadice-5c1be36ed94af2a2ebb3e41ac62f5284ca607ae0.tar.bz2
ice-5c1be36ed94af2a2ebb3e41ac62f5284ca607ae0.tar.xz
ice-5c1be36ed94af2a2ebb3e41ac62f5284ca607ae0.zip
more ft and retry stuff
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/slice2cpp/Gen.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index a3785f4ed89..f33a3e97844 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -684,14 +684,34 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p)
C << sp;
C << nl << retS << nl << "IceProxy" << scoped << paramsDecl;
C << sb;
+ C << nl << "int __cnt = 0;";
+ C << nl << "while (true)";
+ C << sb;
C << nl << "::IceInternal::Handle< ::IceDelegate::Ice::Object> __delBase = __getDelegate();";
C << nl << "::IceDelegate" << scope << "* __del = dynamic_cast< ::IceDelegate" << scope << "*>(__delBase.get());";
+ C << nl << "try";
+ C << sb;
C << nl;
if (ret)
{
C << "return ";
}
C << "__del->" << name << args << ";";
+ if (!ret)
+ {
+ C << nl << "return;";
+ }
+ C << eb;
+ C << nl << "catch (const ::IceInternal::NonRepeatable& __ex)";
+ C << sb;
+// C << nl << "__handleException(*__ex.get(), __cnt);";
+ C << nl << "__ex.raise();";
+ C << eb;
+ C << nl << "catch (const ::Ice::LocalException& __ex)";
+ C << sb;
+ C << nl << "__handleException(__ex, __cnt);";
+ C << eb;
+ C << eb;
C << eb;
}