[34044] trunk/dports/devel/ice-cpp
blair at macports.org
blair at macports.org
Sun Feb 10 19:49:48 PST 2008
Revision: 34044
http://trac.macosforge.org/projects/macports/changeset/34044
Author: blair at macports.org
Date: 2008-02-10 19:49:47 -0800 (Sun, 10 Feb 2008)
Log Message:
-----------
ice-cpp: fix patch filenames to match policy.
Modified Paths:
--------------
trunk/dports/devel/ice-cpp/Portfile
Added Paths:
-----------
trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions.diff
trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin.diff
trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.diff
Removed Paths:
-------------
trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions
trunk/dports/devel/ice-cpp/files/patch-config.Make.rules
trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin
Modified: trunk/dports/devel/ice-cpp/Portfile
===================================================================
--- trunk/dports/devel/ice-cpp/Portfile 2008-02-11 03:34:36 UTC (rev 34043)
+++ trunk/dports/devel/ice-cpp/Portfile 2008-02-11 03:49:47 UTC (rev 34044)
@@ -41,9 +41,9 @@
port:openssl \
port:readline
-patchfiles patch-config.Make.rules \
- patch-config.Make.rules.Darwin \
- patch-ServantLocator.locate-can-throw-user-exceptions
+patchfiles patch-config.Make.rules.diff \
+ patch-config.Make.rules.Darwin.diff \
+ patch-ServantLocator.locate-can-throw-user-exceptions.diff
use_configure no
Deleted: trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions
===================================================================
--- trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions 2008-02-11 03:34:36 UTC (rev 34043)
+++ trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions 2008-02-11 03:49:47 UTC (rev 34044)
@@ -1,1984 +0,0 @@
-diff -ru ../Ice-3.2.1.orig/include/Ice/Outgoing.h ./include/Ice/Outgoing.h
---- ../Ice-3.2.1.orig/include/Ice/Outgoing.h 2007-08-08 12:00:54.000000000 -0700
-+++ ./include/Ice/Outgoing.h 2007-12-20 12:16:29.000000000 -0800
-@@ -49,6 +49,8 @@
- //
- bool retry() const;
-
-+ static void throwUnknownWrapper(const ::std::exception&);
-+
- private:
-
- const LocalExceptionWrapper& operator=(const LocalExceptionWrapper&);
-diff -ru ../Ice-3.2.1.orig/include/Slice/CsUtil.h ./include/Slice/CsUtil.h
---- ../Ice-3.2.1.orig/include/Slice/CsUtil.h 2007-08-08 12:00:54.000000000 -0700
-+++ ./include/Slice/CsUtil.h 2007-12-20 12:16:29.000000000 -0800
-@@ -34,6 +34,7 @@
-
- protected:
- static std::string fixId(const std::string&, int = 0, bool = false);
-+ static std::string fixId(const ContainedPtr&, int = 0, bool = false);
- static std::string typeToString(const TypePtr&);
- static bool isValueType(const TypePtr&);
-
-diff -ru ../Ice-3.2.1.orig/slice/Ice/ServantLocator.ice ./slice/Ice/ServantLocator.ice
---- ../Ice-3.2.1.orig/slice/Ice/ServantLocator.ice 2007-08-08 12:00:54.000000000 -0700
-+++ ./slice/Ice/ServantLocator.ice 2007-12-20 12:16:29.000000000 -0800
-@@ -36,6 +36,15 @@
- * the returned servant into its active servant map. This must be
- * done by the servant locator implementation, if this is desired.
- *
-+ * [locate] can throw any user exception. If it does, that exception
-+ * is marshaled back to the client. If the Slice definition for the
-+ * corresponding operation includes that user exception, the client
-+ * receives that user exception; otherwise, the client receives
-+ * [UnknownUserException].
-+ *
-+ * If [locate] throws any exception, the Ice run time does <EM>not</EM>
-+ * call [finished].
-+ *
- * <p class="Note">If you call [locate] from your own code, you
- * must also call [finished] when you have finished using the
- * servant, provided that [locate] returned a non-null servant;
-@@ -55,7 +64,7 @@
- * @see finished
- *
- **/
-- Object locate(Current curr, out LocalObject cookie);
-+ ["UserException"] Object locate(Current curr, out LocalObject cookie);
-
- /**
- *
-@@ -64,6 +73,15 @@
- * prior to the request and returned a non-null servant. This
- * operation can be used for cleanup purposes after a request.
- *
-+ * [finished] can throw any user exception. If it does, that exception
-+ * is marshaled back to the client. If the Slice definition for the
-+ * corresponding operation includes that user exception, the client
-+ * receives that user exception; otherwise, the client receives
-+ * [UnknownUserException].
-+ *
-+ * If both the operation and [finished] throw an exception, the
-+ * exception thrown by [finished] is marshaled back to the client.
-+ *
- * @param curr Information about the current operation call for
- * which a servant was located by [locate].
- *
-@@ -76,7 +94,7 @@
- * @see locate
- *
- **/
-- void finished(Current curr, Object servant, LocalObject cookie);
-+ ["UserException"] void finished(Current curr, Object servant, LocalObject cookie);
-
- /**
- *
-diff -ru ../Ice-3.2.1.orig/src/Freeze/MapI.cpp ./src/Freeze/MapI.cpp
---- ../Ice-3.2.1.orig/src/Freeze/MapI.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/Freeze/MapI.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1317,13 +1317,10 @@
- }
- _db = 0;
-
-- for(IndexMap::iterator p = _indices.begin(); p != _indices.end(); ++p)
-- {
-- MapIndexBasePtr& indexBase = p->second;
--
-- indexBase->_impl = 0;
-- indexBase->_map = 0;
-- }
-+ //
-+ // We can't clear the indexBase as MapIndexI is using
-+ // the first map's indexBase objects
-+ //
- _indices.clear();
- }
-
-diff -ru ../Ice-3.2.1.orig/src/Ice/Incoming.cpp ./src/Ice/Incoming.cpp
---- ../Ice-3.2.1.orig/src/Ice/Incoming.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/Ice/Incoming.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -387,6 +387,7 @@
-
- try
- {
-+ bool finishedException = false;
- try
- {
- if(servantManager)
-@@ -401,39 +402,83 @@
- }
- if(_locator)
- {
-- _servant = _locator->locate(_current, _cookie);
-+ try
-+ {
-+ _servant = _locator->locate(_current, _cookie);
-+ }
-+ catch(const UserException& ex)
-+ {
-+ _os.write(ex);
-+ status = DispatchUserException;
-+ }
- }
- }
- }
-- if(!_servant)
-+ if(status == DispatchOK)
- {
-- if(servantManager && servantManager->hasServant(_current.id))
-+ if(!_servant)
- {
-- status = DispatchFacetNotExist;
-+ if(servantManager && servantManager->hasServant(_current.id))
-+ {
-+ status = DispatchFacetNotExist;
-+ }
-+ else
-+ {
-+ status = DispatchObjectNotExist;
-+ }
- }
- else
- {
-- status = DispatchObjectNotExist;
-+ status = _servant->__dispatch(*this, _current);
- }
- }
-- else
-- {
-- status = _servant->__dispatch(*this, _current);
-- }
- }
- catch(...)
- {
- if(_locator && _servant && status != DispatchAsync)
- {
-- _locator->finished(_current, _servant, _cookie);
-+ try
-+ {
-+ _locator->finished(_current, _servant, _cookie);
-+ }
-+ catch(const UserException& ex)
-+ {
-+ //
-+ // The operation may ahve already marshaled a reply; we must overwrite that reply.
-+ //
-+ _os.endWriteEncaps();
-+ _os.b.resize(headerSize + 5); // Byte following reply status.
-+ _os.startWriteEncaps();
-+ _os.write(ex);
-+ status = DispatchUserException; // Code below inserts the reply status.
-+ finishedException = true;
-+ }
-+ catch(...)
-+ {
-+ throw;
-+ }
- }
-
- throw;
- }
-
-- if(_locator && _servant && status != DispatchAsync)
-+ if(!finishedException && _locator && _servant && status != DispatchAsync)
- {
-- _locator->finished(_current, _servant, _cookie);
-+ try
-+ {
-+ _locator->finished(_current, _servant, _cookie);
-+ }
-+ catch(const UserException& ex)
-+ {
-+ //
-+ // The operation may ahve already marshaled a reply; we must overwrite that reply.
-+ //
-+ _os.endWriteEncaps();
-+ _os.b.resize(headerSize + 5); // Byte following reply status.
-+ _os.startWriteEncaps();
-+ _os.write(ex);
-+ status = DispatchUserException; // Code below inserts the reply status.
-+ }
- }
- }
- catch(const Exception& ex)
-diff -ru ../Ice-3.2.1.orig/src/Ice/IncomingAsync.cpp ./src/Ice/IncomingAsync.cpp
---- ../Ice-3.2.1.orig/src/Ice/IncomingAsync.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/Ice/IncomingAsync.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -133,7 +133,31 @@
- {
- if(_locator && _servant)
- {
-- _locator->finished(_current, _servant, _cookie);
-+ try
-+ {
-+ _locator->finished(_current, _servant, _cookie);
-+ }
-+ catch(const UserException& ex)
-+ {
-+ //
-+ // The operation may have already marshaled a reply; we must overwrite that reply.
-+ //
-+ if(_response)
-+ {
-+ _os.endWriteEncaps();
-+ _os.b.resize(headerSize + 4); // Reply status position.
-+ _os.write(static_cast<Byte>(DispatchUserException));
-+ _os.startWriteEncaps();
-+ _os.write(ex);
-+ _os.endWriteEncaps();
-+ _connection->sendResponse(&_os, _compress);
-+ }
-+ else
-+ {
-+ _connection->sendNoResponse();
-+ }
-+ return false;
-+ }
- }
- return true;
- }
-diff -ru ../Ice-3.2.1.orig/src/Ice/Outgoing.cpp ./src/Ice/Outgoing.cpp
---- ../Ice-3.2.1.orig/src/Ice/Outgoing.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/Ice/Outgoing.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -32,6 +32,44 @@
- _ex.reset(dynamic_cast<LocalException*>(ex.get()->ice_clone()));
- }
-
-+void
-+IceInternal::LocalExceptionWrapper::throwUnknownWrapper(const std::exception& ex)
-+{
-+
-+ const UserException* ue = dynamic_cast<const UserException*>(&ex);
-+ if(ue)
-+ {
-+ stringstream s;
-+ s << *ue;
-+ throw LocalExceptionWrapper(UnknownUserException(__FILE__, __LINE__, s.str()), false);
-+ }
-+
-+ const LocalException* le = dynamic_cast<const LocalException*>(&ex);
-+ if(le)
-+ {
-+#if 0
-+ //
-+ // Commented-out code makes local exceptions fully location transparent,
-+ // but the Freeze evictor relies on them not being transparent.
-+ //
-+ if(dynamic_cast<const UnknownException*>(le) ||
-+ dynamic_cast<const ObjectNotExistException*>(le) ||
-+ dynamic_cast<const OperationNotExistException*>(le) ||
-+ dynamic_cast<const FacetNotExistException*>(le))
-+ {
-+ throw LocalExceptionWrapper(*le, false);
-+ }
-+ stringstream s;
-+ s << *le;
-+ throw LocalExceptionWrapper(UnknownLocalException(__FILE__, __LINE__, s.str()), false);
-+#else
-+ throw LocalExceptionWrapper(*le, false);
-+#endif
-+ }
-+ string msg = "std::exception: ";
-+ throw LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, msg + ex.what()), false);
-+}
-+
- const LocalException*
- IceInternal::LocalExceptionWrapper::get() const
- {
-diff -ru ../Ice-3.2.1.orig/src/Ice/Proxy.cpp ./src/Ice/Proxy.cpp
---- ../Ice-3.2.1.orig/src/Ice/Proxy.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/Ice/Proxy.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1329,21 +1329,40 @@
- __initCurrent(__current, "ice_isA", ::Ice::Nonmutating, context);
- while(true)
- {
-- Direct __direct(__current);
- bool __ret;
- try
- {
-- __ret = __direct.servant()->ice_isA(__id, __current);
-+ Direct __direct(__current);
-+ try
-+ {
-+ __ret = __direct.servant()->ice_isA(__id, __current);
-+ }
-+ catch(const ::std::exception& __ex)
-+ {
-+ __direct.destroy();
-+ LocalExceptionWrapper::throwUnknownWrapper(__ex);
-+ }
-+ catch(...)
-+ {
-+ __direct.destroy();
-+ throw;
-+ }
-+ __direct.destroy();
- }
-- catch(...)
-+ catch(const LocalExceptionWrapper&)
- {
-- __direct.destroy();
- throw;
- }
-- __direct.destroy();
-+ catch(const ::std::exception& __ex)
-+ {
-+ LocalExceptionWrapper::throwUnknownWrapper(__ex);
-+ }
-+ catch(...)
-+ {
-+ LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, "unknown c++ exception"), false);
-+ }
- return __ret;
- }
-- return false; // To keep the Visual C++ compiler happy.
- }
-
- void
-@@ -1353,18 +1372,38 @@
- __initCurrent(__current, "ice_ping", ::Ice::Nonmutating, context);
- while(true)
- {
-- Direct __direct(__current);
- try
- {
-- __direct.servant()->ice_ping(__current);
-+ Direct __direct(__current);
-+ try
-+ {
-+ __direct.servant()->ice_ping(__current);
-+ }
-+ catch(const ::std::exception& __ex)
-+ {
-+ __direct.destroy();
-+ LocalExceptionWrapper::throwUnknownWrapper(__ex);
-+ }
-+ catch(...)
-+ {
-+ __direct.destroy();
-+ throw;
-+ }
-+ __direct.destroy();
- }
-- catch(...)
-+ catch(const LocalExceptionWrapper&)
- {
-- __direct.destroy();
- throw;
- }
-- __direct.destroy();
-- return;
-+ catch(const ::std::exception& __ex)
-+ {
-+ LocalExceptionWrapper::throwUnknownWrapper(__ex);
-+ }
-+ catch(...)
-+ {
-+ LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, "unknown c++ exception"), false);
-+ }
-+ return;
- }
- }
-
-@@ -1373,23 +1412,42 @@
- {
- Current __current;
- __initCurrent(__current, "ice_ids", ::Ice::Nonmutating, context);
-+ vector<string> __ret;
- while(true)
- {
-- Direct __direct(__current);
-- vector<string> __ret;
- try
- {
-- __ret = __direct.servant()->ice_ids(__current);
-+ Direct __direct(__current);
-+ try
-+ {
-+ __ret = __direct.servant()->ice_ids(__current);
-+ }
-+ catch(const ::std::exception& __ex)
-+ {
-+ __direct.destroy();
-+ LocalExceptionWrapper::throwUnknownWrapper(__ex);
-+ }
-+ catch(...)
-+ {
-+ __direct.destroy();
-+ throw;
-+ }
-+ __direct.destroy();
- }
-- catch(...)
-+ catch(const LocalExceptionWrapper&)
- {
-- __direct.destroy();
- throw;
- }
-- __direct.destroy();
-+ catch(const ::std::exception& __ex)
-+ {
-+ LocalExceptionWrapper::throwUnknownWrapper(__ex);
-+ }
-+ catch(...)
-+ {
-+ LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, "unknown c++ exception"), false);
-+ }
- return __ret;
- }
-- return vector<string>(); // To keep the Visual C++ compiler happy.
- }
-
- string
-@@ -1399,21 +1457,40 @@
- __initCurrent(__current, "ice_id", ::Ice::Nonmutating, context);
- while(true)
- {
-- Direct __direct(__current);
- string __ret;
- try
- {
-- __ret = __direct.servant()->ice_id(__current);
-+ Direct __direct(__current);
-+ try
-+ {
-+ __ret = __direct.servant()->ice_id(__current);
-+ }
-+ catch(const ::std::exception& __ex)
-+ {
-+ __direct.destroy();
-+ LocalExceptionWrapper::throwUnknownWrapper(__ex);
-+ }
-+ catch(...)
-+ {
-+ __direct.destroy();
-+ throw;
-+ }
-+ __direct.destroy();
- }
-- catch(...)
-+ catch(const LocalExceptionWrapper&)
- {
-- __direct.destroy();
- throw;
- }
-- __direct.destroy();
-+ catch(const ::std::exception& __ex)
-+ {
-+ LocalExceptionWrapper::throwUnknownWrapper(__ex);
-+ }
-+ catch(...)
-+ {
-+ LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, "unknown c++ exception"), false);
-+ }
- return __ret;
- }
-- return string(); // To keep the Visual C++ compiler happy.
- }
-
- bool
-diff -ru ../Ice-3.2.1.orig/src/Slice/CsUtil.cpp ./src/Slice/CsUtil.cpp
---- ../Ice-3.2.1.orig/src/Slice/CsUtil.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/Slice/CsUtil.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -130,6 +130,21 @@
- }
-
- string
-+Slice::CsGenerator::fixId(const ContainedPtr& cont, int baseTypes, bool mangleCasts)
-+{
-+ ContainerPtr container = cont->container();
-+ ContainedPtr contained = ContainedPtr::dynamicCast(container);
-+ if(contained && contained->hasMetaData("clr:property"))
-+ {
-+ return cont->name() + "_prop";
-+ }
-+ else
-+ {
-+ return fixId(cont->name(), baseTypes, mangleCasts);
-+ }
-+}
-+
-+string
- Slice::CsGenerator::typeToString(const TypePtr& type)
- {
- if(!type)
-@@ -464,19 +479,41 @@
- {
- if(marshal)
- {
-- if(streamingAPI)
-+ if(!isValueType(st))
- {
-- out << nl << param << ".ice_write(" << stream << ");";
-+ out << nl << "if(" << param << " == null)";
-+ out << sb;
-+ string typeS = typeToString(st);
-+ out << nl << typeS << " " << "tmp__ = new " << typeS << "();";
-+ out << nl << "tmp__.";
-+ out << (streamingAPI ? "ice_write" : "write__") << "(" << stream << ");";
-+ out << eb;
-+ out << nl << "else";
-+ out << sb;
-+ out << nl << param << "." << (streamingAPI ? "ice_write" : "write__") << "(" << stream << ");";
-+ out << eb;
- }
- else
- {
-- out << nl << param << ".write__(" << stream << ");";
-+ if(streamingAPI)
-+ {
-+ out << nl << param << ".ice_write(" << stream << ");";
-+ }
-+ else
-+ {
-+ out << nl << param << ".write__(" << stream << ");";
-+ }
- }
- }
- else
- {
-- string typeS = typeToString(type);
-- out << nl << param << " = new " << typeS << "();";
-+ if(!isValueType(st))
-+ {
-+ out << nl << "if(" << param << " == null)";
-+ out << sb;
-+ out << nl << param << " = new " << typeToString(type) << "();";
-+ out << eb;
-+ }
- if(streamingAPI)
- {
- out << nl << param << ".ice_read(" << stream << ");";
-diff -ru ../Ice-3.2.1.orig/src/Slice/JavaUtil.cpp ./src/Slice/JavaUtil.cpp
---- ../Ice-3.2.1.orig/src/Slice/JavaUtil.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/Slice/JavaUtil.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -3442,6 +3442,17 @@
- void
- Slice::JavaGenerator::MetaDataVisitor::visitOperation(const OperationPtr& p)
- {
-+ if(p->hasMetaData("UserException"))
-+ {
-+ ClassDefPtr cl = ClassDefPtr::dynamicCast(p->container());
-+ if(!cl->isLocal())
-+ {
-+ cout << p->definitionContext()->filename() << ":" << p->line()
-+ << ": warning: metadata directive `UserException' applies only to local operations "
-+ << "but enclosing " << (cl->isInterface() ? "interface" : "class") << "`" << cl->name()
-+ << "' is not local" << endl;
-+ }
-+ }
- StringList metaData = getMetaData(p);
- TypePtr returnType = p->returnType();
- if(!metaData.empty())
-diff -ru ../Ice-3.2.1.orig/src/slice2cpp/Gen.cpp ./src/slice2cpp/Gen.cpp
---- ../Ice-3.2.1.orig/src/slice2cpp/Gen.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/slice2cpp/Gen.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -2527,6 +2527,15 @@
- vector<string> paramsDecl;
- vector<string> args;
-
-+ ExceptionList throws = p->throws();
-+ throws.sort();
-+ throws.unique();
-+#if defined(__SUNPRO_CC)
-+ throws.sort(derivedToBaseCompare);
-+#else
-+ throws.sort(Slice::DerivedToBaseCompare());
-+#endif
-+
- ParamDeclList paramList = p->parameters();
- for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
- {
-@@ -2586,23 +2595,18 @@
- C << nl << "::Ice::Current __current;";
- C << nl << "__initCurrent(__current, " << p->flattenedScope() + p->name() + "_name, "
- << operationModeToString(p->sendMode()) << ", __context);";
-- C << nl << "while(true)";
-- C << sb;
-- C << nl << "::IceInternal::Direct __direct(__current);";
- if(ret)
- {
- C << nl << retS << " __ret;";
- }
- C << nl << "try";
- C << sb;
-+ C << nl << "::IceInternal::Direct __direct(__current);";
- C << nl << thisPointer << " __servant = dynamic_cast< " << thisPointer << ">(__direct.servant().get());";
- C << nl << "if(!__servant)";
- C << sb;
-- C << nl << "::Ice::OperationNotExistException __opEx(__FILE__, __LINE__);";
-- C << nl << "__opEx.id = __current.id;";
-- C << nl << "__opEx.facet = __current.facet;";
-- C << nl << "__opEx.operation = __current.operation;";
-- C << nl << "throw __opEx;";
-+ C << nl << "__direct.destroy();";
-+ C << nl << "throw ::Ice::OperationNotExistException(__FILE__, __LINE__, __current.id, __current.facet, __current.operation);";
- C << eb;
- C << nl << "try";
- C << sb;
-@@ -2611,28 +2615,51 @@
- {
- C << "__ret = ";
- }
-- C << "__servant->" << name << spar << args << epar << ';';
-+ C << "__servant->" << name << spar << args << epar << ";";
- C << eb;
-- C << nl << "catch(const ::Ice::LocalException& __ex)";
-+ C << nl << "catch(const ::Ice::UserException&)";
- C << sb;
-- C << nl << "throw ::IceInternal::LocalExceptionWrapper(__ex, false);";
-+ C << nl << "__direct.destroy();";
-+ C << nl << "throw;";
- C << eb;
-+ C << nl << "catch(const ::std::exception& __ex)";
-+ C << sb;
-+ C << nl << "__direct.destroy();";
-+ C << nl << "::IceInternal::LocalExceptionWrapper::throwUnknownWrapper(__ex);";
- C << eb;
- C << nl << "catch(...)";
- C << sb;
- C << nl << "__direct.destroy();";
-- C << nl << "throw;";
-+ C << nl << "throw ::Ice::UnknownException(__FILE__, __LINE__, \"unknown c++ exception\");";
- C << eb;
- C << nl << "__direct.destroy();";
-- if(ret)
-+ C << eb;
-+ for(ExceptionList::const_iterator i = throws.begin(); i != throws.end(); ++i)
- {
-- C << nl << "return __ret;";
-+ C << nl << "catch(const " << fixKwd((*i)->scoped()) << "&)";
-+ C << sb;
-+ C << nl << "throw;";
-+ C << eb;
- }
-- else
-+ C << nl << "catch(const ::IceInternal::LocalExceptionWrapper&)";
-+ C << sb;
-+ C << nl << "throw;";
-+ C << eb;
-+ C << nl << "catch(const ::std::exception& __ex)";
-+ C << sb;
-+ C << nl << "::IceInternal::LocalExceptionWrapper::throwUnknownWrapper(__ex);";
-+ C << eb;
-+ C << nl << "catch(...)";
-+ C << sb;
-+ C << nl << "throw ::IceInternal::LocalExceptionWrapper("
-+ << "::Ice::UnknownException(__FILE__, __LINE__, \"unknown c++ exception\"), false);";
-+ C << eb;
-+ C << nl << "return";
-+ if(ret)
- {
-- C << nl << "return;";
-+ C << " __ret";
- }
-- C << eb;
-+ C << ";";
- C << eb;
- }
- }
-@@ -5286,6 +5313,18 @@
- {
- ami = true;
- }
-+
-+ if(p->hasMetaData("UserException"))
-+ {
-+ if(!cl->isLocal())
-+ {
-+ cout << p->definitionContext()->filename() << ":" << p->line()
-+ << ": warning: metadata directive `UserException' applies only to local operations "
-+ << "but enclosing " << (cl->isInterface() ? "interface" : "class") << "`" << cl->name()
-+ << "' is not local" << endl;
-+ }
-+ }
-+
- StringList metaData = p->getMetaData();
- metaData.remove("cpp:const");
-
-diff -ru ../Ice-3.2.1.orig/src/slice2cs/Gen.cpp ./src/slice2cs/Gen.cpp
---- ../Ice-3.2.1.orig/src/slice2cs/Gen.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/slice2cs/Gen.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -386,6 +386,18 @@
- if(!isClass)
- {
- _out << nl << typeS << ' ' << param << ';';
-+ StructPtr st = StructPtr::dynamicCast(q->first);
-+ if(st)
-+ {
-+ if(isValueType(q->first))
-+ {
-+ _out << nl << param << " = new " << typeS << "();";
-+ }
-+ else
-+ {
-+ _out << nl << param << " = null;";
-+ }
-+ }
- }
- writeMarshalUnmarshalCode(_out, q->first, param, false, false, true);
- }
-@@ -501,12 +513,26 @@
- //
- for(q = inParams.begin(); q != inParams.end(); ++q)
- {
-+ string param = fixId(q->second);
-+ string typeS = typeToString(q->first);
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->first);
- bool isClass = (builtin && builtin->kind() == Builtin::KindObject)
- || ClassDeclPtr::dynamicCast(q->first);
- if(!isClass)
- {
-- _out << nl << typeToString(q->first) << ' ' << fixId(q->second) << ';';
-+ _out << nl << typeS << ' ' << param << ';';
-+ StructPtr st = StructPtr::dynamicCast(q->first);
-+ if(st)
-+ {
-+ if(isValueType(q->first))
-+ {
-+ _out << nl << param << " = new " << typeS << "();";
-+ }
-+ else
-+ {
-+ _out << nl << param << " = null;";
-+ }
-+ }
- }
- writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), false, false, true);
- }
-@@ -728,8 +754,7 @@
- _out << nl << "os__.startWriteSlice();";
- for(d = members.begin(); d != members.end(); ++d)
- {
-- writeMarshalUnmarshalCode(_out, (*d)->type(),
-- fixId((*d)->name(), DotNet::ICloneable, true),
-+ writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
- true, false, false);
- }
- _out << nl << "os__.endWriteSlice();";
-@@ -831,8 +856,7 @@
- patchParams << ", " << classMemberCount++;
- }
- }
-- writeMarshalUnmarshalCode(_out, (*d)->type(),
-- fixId((*d)->name(), DotNet::ICloneable, true),
-+ writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
- false, false, false, patchParams.str());
- }
- _out << nl << "is__.endReadSlice();";
-@@ -850,8 +874,7 @@
- _out << nl << "outS__.startSlice();";
- for(d = members.begin(); d != members.end(); ++d)
- {
-- writeMarshalUnmarshalCode(_out, (*d)->type(),
-- fixId((*d)->name(), DotNet::ICloneable, true),
-+ writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
- true, true, false);
- }
- _out << nl << "outS__.endSlice();";
-@@ -877,8 +900,7 @@
- patchParams << ", " << classMemberCount++;
- }
- }
-- writeMarshalUnmarshalCode(_out, (*d)->type(),
-- fixId((*d)->name(), DotNet::ICloneable, true),
-+ writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
- false, true, false, patchParams.str());
- }
- _out << nl << "inS__.endSlice();";
-@@ -2054,7 +2076,8 @@
- _out << sb;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
-- _out << nl << "this." << fixId((*q)->name()) << " = " << fixId((*q)->name()) << ';';
-+ string name = fixId((*q)->name(), DotNet::ApplicationException, false);
-+ _out << nl << "this." << name << " = " << fixId((*q)->name()) << ';';
- }
- _out << eb;
- }
-@@ -2186,8 +2209,7 @@
- _out << nl << "os__.startWriteSlice();";
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
-- writeMarshalUnmarshalCode(_out, (*q)->type(),
-- fixId((*q)->name(), DotNet::ApplicationException),
-+ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, DotNet::ApplicationException),
- true, false, false);
- }
- _out << nl << "os__.endWriteSlice();";
-@@ -2294,8 +2316,7 @@
- patchParams << ", " << classMemberCount++;
- }
- }
-- writeMarshalUnmarshalCode(_out, (*q)->type(),
-- fixId((*q)->name(), DotNet::ApplicationException),
-+ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId((*q)->name(), DotNet::ApplicationException),
- false, false, false, patchParams.str());
- }
- _out << nl << "is__.endReadSlice();";
-@@ -2313,8 +2334,7 @@
- _out << nl << "outS__.startSlice();";
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
-- writeMarshalUnmarshalCode(_out, (*q)->type(),
-- fixId((*q)->name(), DotNet::ApplicationException),
-+ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId((*q)->name(), DotNet::ApplicationException),
- true, true, false);
- }
- _out << nl << "outS__.endSlice();";
-@@ -2344,8 +2364,7 @@
- patchParams << ", " << classMemberCount++;
- }
- }
-- writeMarshalUnmarshalCode(_out, (*q)->type(),
-- fixId((*q)->name(), DotNet::ApplicationException),
-+ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId((*q)->name(), DotNet::ApplicationException),
- false, true, false, patchParams.str());
- }
- _out << nl << "inS__.endSlice();";
-@@ -2443,6 +2462,8 @@
- DataMemberList dataMembers = p->dataMembers();
- DataMemberList::const_iterator q;
-
-+ bool propertyMapping = p->hasMetaData("clr:property");
-+
- _out << sp << nl << "#endregion"; // Slice data members
-
- bool isClass = !isValueType(p);
-@@ -2453,6 +2474,25 @@
- _out << "s";
- _out << sp << nl << "public " << name << "()";
- _out << sb;
-+ /*
-+ if(!p->isLocal())
-+ {
-+ for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
-+ {
-+ if(!isValueType((*q)->type()))
-+ {
-+ string memberName = fixId((*q)->name(), isClass ? DotNet::ICloneable : 0);
-+ string memberType = typeToString((*q)->type());
-+ _out << nl << "this." << memberName;
-+ if(propertyMapping)
-+ {
-+ _out << "_prop";
-+ }
-+ _out << " = new " << memberType << "();";
-+ }
-+ }
-+ }
-+ */
- _out << eb;
- }
-
-@@ -2461,7 +2501,7 @@
- vector<string> paramNames;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
-- string memberName = fixId((*q)->name());
-+ string memberName = fixId((*q)->name(), isClass ? DotNet::ICloneable : 0);
- string memberType = typeToString((*q)->type());
- paramDecl.push_back(memberType + " " + memberName);
- paramNames.push_back(memberName);
-@@ -2470,7 +2510,12 @@
- _out << sb;
- for(vector<string>::const_iterator i = paramNames.begin(); i != paramNames.end(); ++i)
- {
-- _out << nl << "this." << *i << " = " << *i << ';';
-+ _out << nl << "this." << *i;
-+ if(propertyMapping)
-+ {
-+ _out << "_prop";
-+ }
-+ _out << " = " << *i << ';';
- }
- _out << eb;
-
-@@ -2594,8 +2639,7 @@
- _out << sb;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
-- writeMarshalUnmarshalCode(_out, (*q)->type(),
-- fixId((*q)->name(), isClass ? DotNet::ICloneable : 0),
-+ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0),
- true, false, false);
- }
- _out << eb;
-@@ -2687,8 +2731,7 @@
- patchParams << ", " << classMemberCount++;
- }
- }
-- writeMarshalUnmarshalCode(_out, (*q)->type(),
-- fixId((*q)->name(), isClass ? DotNet::ICloneable : 0 ),
-+ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0 ),
- false, false, false, patchParams.str());
- }
- _out << eb;
-@@ -2699,8 +2742,7 @@
- _out << sb;
- for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
- {
-- writeMarshalUnmarshalCode(_out, (*q)->type(),
-- fixId((*q)->name(), isClass ? DotNet::ICloneable : 0),
-+ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0),
- true, true, false);
- }
- _out << eb;
-@@ -2720,8 +2762,7 @@
- patchParams << ", " << classMemberCount++;
- }
- }
-- writeMarshalUnmarshalCode(_out, (*q)->type(),
-- fixId((*q)->name(), isClass ? DotNet::ICloneable : 0 ),
-+ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0 ),
- false, true, false, patchParams.str());
- }
- _out << eb;
-@@ -3920,10 +3961,35 @@
- _out << nl << "for(int i__ = 0; i__ < sz__; ++i__)";
- _out << sb;
- _out << nl << keyS << " k__;";
-+ StructPtr st = StructPtr::dynamicCast(key);
-+ if(st)
-+ {
-+ if(isValueType(key))
-+ {
-+ _out << nl << "v__ = new " << typeToString(key) << "();";
-+ }
-+ else
-+ {
-+ _out << nl << "k__ = null;";
-+ }
-+ }
- writeMarshalUnmarshalCode(_out, key, "k__", false, false, false);
- if(!hasClassValue)
- {
- _out << nl << valueS << " v__;";
-+
-+ StructPtr st = StructPtr::dynamicCast(value);
-+ if(st)
-+ {
-+ if(isValueType(value))
-+ {
-+ _out << nl << "v__ = new " << typeToString(value) << "();";
-+ }
-+ else
-+ {
-+ _out << nl << "v__ = null;";
-+ }
-+ }
- }
- writeMarshalUnmarshalCode(_out, value, "v__", false, false, false, "r__, k__");
- if(!hasClassValue)
-@@ -3960,10 +4026,34 @@
- _out << nl << "for(int i__ = 0; i__ < sz__; ++i__)";
- _out << sb;
- _out << nl << keyS << " k__;";
-+ StructPtr st = StructPtr::dynamicCast(key);
-+ if(st)
-+ {
-+ if(isValueType(key))
-+ {
-+ _out << nl << "v__ = new " << typeToString(key) << "();";
-+ }
-+ else
-+ {
-+ _out << nl << "k__ = null;";
-+ }
-+ }
- writeMarshalUnmarshalCode(_out, key, "k__", false, true, false);
- if(!hasClassValue)
- {
- _out << nl << valueS << " v__;";
-+ StructPtr st = StructPtr::dynamicCast(value);
-+ if(st)
-+ {
-+ if(isValueType(value))
-+ {
-+ _out << nl << "v__ = new " << typeToString(value) << "();";
-+ }
-+ else
-+ {
-+ _out << nl << "v__ = null;";
-+ }
-+ }
- }
- writeMarshalUnmarshalCode(_out, value, "v__", false, true, false, "r__, k__");
- if(!hasClassValue)
-@@ -4196,7 +4286,20 @@
- _out << eb;
- for(q = outParams.begin(); q != outParams.end(); ++q)
- {
-- writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), false, false, true, "");
-+ string param = fixId(q->second);
-+ StructPtr st = StructPtr::dynamicCast(q->first);
-+ if(st)
-+ {
-+ if(isValueType(q->first))
-+ {
-+ _out << nl << param << " = new " << typeToString(q->first) << "();";
-+ }
-+ else
-+ {
-+ _out << nl << param << " = null;";
-+ }
-+ }
-+ writeMarshalUnmarshalCode(_out, q->first, param, false, false, true, "");
- }
- if(ret)
- {
-@@ -4212,6 +4315,18 @@
- else
- {
- _out << nl << retS << " ret__;";
-+ StructPtr st = StructPtr::dynamicCast(ret);
-+ if(st)
-+ {
-+ if(isValueType(st))
-+ {
-+ _out << nl << "ret__ = new " << retS << "();";
-+ }
-+ else
-+ {
-+ _out << nl << "ret__ = null;";
-+ }
-+ }
- writeMarshalUnmarshalCode(_out, ret, "ret__", false, false, true, "");
- }
- }
-@@ -4622,7 +4737,9 @@
- _out << sb;
- for(q = outParams.begin(); q != outParams.end(); ++q)
- {
-- _out << nl << typeToString(q->first) << ' ' << fixId(q->second) << ';';
-+ string param = fixId(q->second);
-+ string typeS = typeToString(q->first);
-+ _out << nl << typeS << ' ' << param << ';';
- }
- if(ret)
- {
-@@ -4650,10 +4767,33 @@
- _out << eb;
- for(q = outParams.begin(); q != outParams.end(); ++q)
- {
-+ string param = fixId(q->second);
-+ StructPtr st = StructPtr::dynamicCast(q->first);
-+ if(st)
-+ if(isValueType(st))
-+ {
-+ _out << nl << param << " = new " << typeToString(q->first) << "();";
-+ }
-+ else
-+ {
-+ _out << nl << param << " = null;";
-+ }
- writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), false, false, true);
- }
- if(ret)
- {
-+ StructPtr st = StructPtr::dynamicCast(ret);
-+ if(st)
-+ {
-+ if(isValueType(ret))
-+ {
-+ _out << nl << "ret__ = new " << retS << "();";
-+ }
-+ else
-+ {
-+ _out << nl << "ret__ = null;";
-+ }
-+ }
- writeMarshalUnmarshalCode(_out, ret, "ret__", false, false, true);
- }
- if(p->returnsClasses())
-diff -ru ../Ice-3.2.1.orig/src/slice2java/Gen.cpp ./src/slice2java/Gen.cpp
---- ../Ice-3.2.1.orig/src/slice2java/Gen.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./src/slice2java/Gen.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -368,7 +368,10 @@
-
- ConstructedPtr constructed = ConstructedPtr::dynamicCast(type);
- assert(constructed);
-+ out << nl << "if(" << name << " != null)";
-+ out << sb;
- out << nl << "__h = 5 * __h + " << name << ".hashCode();";
-+ out << eb;
- }
-
- void
-@@ -533,7 +536,16 @@
- {
- out << sp << nl << "public final " << typeToString(ret, TypeModeReturn, package, op->getMetaData())
- << nl << opName << spar << params << epar;
-- writeThrowsClause(package, throws);
-+ if(op->hasMetaData("UserException"))
-+ {
-+ out.inc();
-+ out << nl << "throws Ice.UserException";
-+ out.dec();
-+ }
-+ else
-+ {
-+ writeThrowsClause(package, throws);
-+ }
- out << sb << nl;
- if(ret)
- {
-@@ -1418,7 +1430,16 @@
- out << "Ice.Current __current";
- }
- out << epar;
-- writeThrowsClause(package, throws);
-+ if(op->hasMetaData("UserException"))
-+ {
-+ out.inc();
-+ out << nl << "throws Ice.UserException";
-+ out.dec();
-+ }
-+ else
-+ {
-+ writeThrowsClause(package, throws);
-+ }
- out << ';';
- }
-
-@@ -1583,10 +1604,19 @@
- }
- out << epar;
-
-- ExceptionList throws = (*r)->throws();
-- throws.sort();
-- throws.unique();
-- writeThrowsClause(package, throws);
-+ if((*r)->hasMetaData("UserException"))
-+ {
-+ out.inc();
-+ out << nl << "throws Ice.UserException";
-+ out.dec();
-+ }
-+ else
-+ {
-+ ExceptionList throws = (*r)->throws();
-+ throws.sort();
-+ throws.unique();
-+ writeThrowsClause(package, throws);
-+ }
- out << sb;
- out << nl;
- if(ret && !hasAMD)
-@@ -4284,6 +4314,11 @@
- ExceptionList throws = op->throws();
- throws.sort();
- throws.unique();
-+#if defined(__SUNPRO_CC)
-+ throws.sort(derivedToBaseCompare);
-+#else
-+ throws.sort(Slice::DerivedToBaseCompare());
-+#endif
-
- vector<string> params = getParams(op, package);
- vector<string> args = getArgs(op);
-@@ -4303,15 +4338,26 @@
- out << nl << "__initCurrent(__current, \"" << op->name() << "\", "
- << sliceModeToIceMode(op->sendMode())
- << ", __ctx);";
-+ if(ret)
-+ {
-+ string resultTypeHolder = typeToString(ret, TypeModeOut, package, op->getMetaData());
-+ out << nl << "final " << resultTypeHolder << " __ret = new " << resultTypeHolder << "();";
-+ }
- out << nl << "while(true)";
- out << sb;
-- out << nl << "IceInternal.Direct __direct = new IceInternal.Direct(__current);";
- out << nl << "try";
- out << sb;
-- out << nl << fixKwd(name) << " __servant = null;";
-+ out << nl << "IceInternal.Direct __direct = new IceInternal.Direct(__current);";
- out << nl << "try";
- out << sb;
-+ out << nl << fixKwd(name) << " __servant = null;";
- out << nl << "__servant = (" << fixKwd(name) << ")__direct.servant();";
-+ out << nl;
-+ if(ret)
-+ {
-+ out << "__ret.value = ";
-+ }
-+ out << "__servant." << opName << spar << args << "__current" << epar << ';';
- out << eb;
- out << nl << "catch(ClassCastException __ex)";
- out << sb;
-@@ -4321,28 +4367,57 @@
- out << nl << "__opEx.operation = __current.operation;";
- out << nl << "throw __opEx;";
- out << eb;
-+ for(ExceptionList::const_iterator i = throws.begin(); i != throws.end(); ++i)
-+ {
-+ out << nl << "catch(" << getAbsolute(*i, package) << " __ex)";
-+ out << sb;
-+ out << nl << "throw __ex;";
-+ out << eb;
-+ }
-+ out << nl << "catch(Throwable __ex)";
-+ out << sb;
-+ out << nl << "throw __ex;";
-+ out << eb;
-+ out << nl << "finally";
-+ out << sb;
- out << nl << "try";
- out << sb;
-- out << nl;
-- if(ret)
-+ out << nl << "__direct.destroy();";
-+ out << eb;
-+ for(ExceptionList::const_iterator i = throws.begin(); i != throws.end(); ++i)
- {
-- out << "return ";
-+ out << nl << "catch(" << getAbsolute(*i, package) << " __ex)";
-+ out << sb;
-+ out << nl << "throw __ex;";
-+ out << eb;
- }
-- out << "__servant." << opName << spar << args << "__current" << epar << ';';
-- if(!ret)
-+ out << nl << "catch(Throwable __ex)";
-+ out << sb;
-+ out << nl << "throw __ex;";
-+ out << eb;
-+ out << eb;
-+ out << eb;
-+ for(ExceptionList::const_iterator i = throws.begin(); i != throws.end(); ++i)
- {
-- out << nl << "return;";
-+ out << nl << "catch(" << getAbsolute(*i, package) << " __ex)";
-+ out << sb;
-+ out << nl << "throw __ex;";
-+ out << eb;
- }
-- out << eb;
-- out << nl << "catch(Ice.LocalException __ex)";
-+ out << nl << "catch(IceInternal.LocalExceptionWrapper __ex)";
- out << sb;
-- out << nl << "throw new IceInternal.LocalExceptionWrapper(__ex, false);";
-- out << eb;
-+ out << nl << "throw __ex;";
- out << eb;
-- out << nl << "finally";
-+ out << nl << "catch(Throwable __ex)";
- out << sb;
-- out << nl << "__direct.destroy();";
-+ out << nl << "IceInternal.LocalExceptionWrapper.throwUnknownWrapper(__ex);";
- out << eb;
-+ out << nl << "return";
-+ if(ret)
-+ {
-+ out << " __ret.value";
-+ }
-+ out << ";";
- out << eb;
- }
- out << eb;
-@@ -4620,11 +4695,19 @@
- }
- out << epar;
-
-- ExceptionList throws = op->throws();
-- throws.sort();
-- throws.unique();
--
-- writeThrowsClause(package, throws);
-+ if(op->hasMetaData("UserException"))
-+ {
-+ out.inc();
-+ out << nl << "throws Ice.UserException";
-+ out.dec();
-+ }
-+ else
-+ {
-+ ExceptionList throws = op->throws();
-+ throws.sort();
-+ throws.unique();
-+ writeThrowsClause(package, throws);
-+ }
-
- out << sb;
-
-diff -ru ../Ice-3.2.1.orig/test/Ice/exceptions/AllTests.cpp ./test/Ice/exceptions/AllTests.cpp
---- ../Ice-3.2.1.orig/test/Ice/exceptions/AllTests.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/exceptions/AllTests.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -914,22 +914,8 @@
- thrower->throwUndeclaredA(1);
- test(false);
- }
-- catch(const A& ex)
-- {
-- //
-- // We get the original exception with collocation
-- // optimization.
-- //
-- test(collocated);
-- test(ex.aMem == 1);
-- }
- catch(const Ice::UnknownUserException&)
- {
-- //
-- // We get an unknown user exception without collocation
-- // optimization.
-- //
-- test(!collocated);
- }
- catch(...)
- {
-@@ -941,23 +927,8 @@
- thrower->throwUndeclaredB(1, 2);
- test(false);
- }
-- catch(const B& ex)
-- {
-- //
-- // We get the original exception with collocation
-- // optimization.
-- //
-- test(collocated);
-- test(ex.aMem == 1);
-- test(ex.bMem == 2);
-- }
- catch(const Ice::UnknownUserException&)
- {
-- //
-- // We get an unknown user exception without collocation
-- // optimization.
-- //
-- test(!collocated);
- }
- catch(...)
- {
-@@ -969,24 +940,8 @@
- thrower->throwUndeclaredC(1, 2, 3);
- test(false);
- }
-- catch(const C& ex)
-- {
-- //
-- // We get the original exception with collocation
-- // optimization.
-- //
-- test(collocated);
-- test(ex.aMem == 1);
-- test(ex.bMem == 2);
-- test(ex.cMem == 3);
-- }
- catch(const Ice::UnknownUserException&)
- {
-- //
-- // We get an unknown user exception without
-- // collocation optimization.
-- //
-- test(!collocated);
- }
- catch(...)
- {
-@@ -1065,22 +1020,14 @@
- thrower->throwLocalException();
- test(false);
- }
-- catch(const Ice::TimeoutException&)
-- {
-- //
-- // We get the original exception with collocation
-- // optimization.
-- //
-- test(collocated);
-- }
- catch(const Ice::UnknownLocalException&)
- {
-- //
-- // We get an unknown local exception without collocation
-- // optimization.
-- //
- test(!collocated);
- }
-+ catch(const Ice::TimeoutException&)
-+ {
-+ test(collocated);
-+ }
- catch(...)
- {
- test(false);
-@@ -1097,19 +1044,10 @@
- }
- catch(const Ice::UnknownException&)
- {
-- //
-- // We get an unknown exception without collocation
-- // optimization.
-- //
-- assert(!collocated);
- }
- catch(...)
- {
-- //
-- // We get the original exception with collocation
-- // optimization.
-- //
-- assert(collocated);
-+ test(false);
- }
-
- cout << "ok" << endl;
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/AllTests.cpp ./test/Ice/servantLocator/AllTests.cpp
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/AllTests.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/AllTests.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-@@ -33,6 +33,10 @@
- test(ex.operation == "requestFailedException");
- }
- }
-+ catch(...)
-+ {
-+ test(false);
-+ }
-
- try
- {
-@@ -43,6 +47,10 @@
- {
- test(ex.unknown == "reason");
- }
-+ catch(...)
-+ {
-+ test(false);
-+ }
-
- try
- {
-@@ -71,13 +79,11 @@
- }
- catch(const UnknownUserException& ex)
- {
-- //cerr << ex.unknown << endl;
-- test(!collocated);
- test(ex.unknown == "Test::TestIntfUserException");
- }
-- catch(const TestIntfUserException&)
-+ catch(...)
- {
-- test(collocated);
-+ test(false);
- }
-
- try
-@@ -87,7 +93,6 @@
- }
- catch(const UnknownLocalException& ex)
- {
-- //cerr << ex.unknown << endl;
- test(!collocated);
- test(ex.unknown.find("Ice::SocketException:\nsocket exception: unknown error") != string::npos);
- }
-@@ -95,6 +100,10 @@
- {
- test(collocated);
- }
-+ catch(...)
-+ {
-+ test(false);
-+ }
-
- try
- {
-@@ -103,13 +112,11 @@
- }
- catch(const UnknownException& ex)
- {
-- //cerr << ex.unknown << endl;
-- test(!collocated);
- test(ex.unknown == "std::exception: Hello");
- }
-- catch(const std::runtime_error&)
-+ catch(...)
- {
-- test(collocated);
-+ test(false);
- }
-
- try
-@@ -119,13 +126,11 @@
- }
- catch(const UnknownException& ex)
- {
-- //cerr << ex.unknown << endl;
-- test(!collocated);
- test(ex.unknown == "unknown c++ exception");
- }
-- catch(const int&)
-+ catch(...)
- {
-- test(collocated);
-+ test(false);
- }
-
- try
-@@ -137,6 +142,66 @@
- {
- test(ex.unknown == "reason");
- }
-+ catch(...)
-+ {
-+ test(false);
-+ }
-+
-+ try
-+ {
-+ obj->impossibleException(false);
-+ test(false);
-+ }
-+ catch(const UnknownUserException&)
-+ {
-+ // Operation doesn't throw, but locate() and finshed() throw TestIntfUserException.
-+ }
-+ catch(...)
-+ {
-+ test(false);
-+ }
-+
-+ try
-+ {
-+ obj->impossibleException(true);
-+ test(false);
-+ }
-+ catch(const UnknownUserException&)
-+ {
-+ // Operation doesn't throw, but locate() and finshed() throw TestIntfUserException.
-+ }
-+ catch(...)
-+ {
-+ test(false);
-+ }
-+
-+ try
-+ {
-+ obj->intfUserException(false);
-+ test(false);
-+ }
-+ catch(const TestImpossibleException&)
-+ {
-+ // Operation doesn't throw, but locate() and finished() throw TestImpossibleException.
-+ }
-+ catch(...)
-+ {
-+ test(false);
-+ }
-+
-+ try
-+ {
-+ obj->intfUserException(true);
-+ test(false);
-+ }
-+ catch(const TestImpossibleException&)
-+ {
-+ // Operation throws TestIntfUserException, but locate() and finished() throw TestImpossibleException.
-+ }
-+ catch(...)
-+ {
-+ test(false);
-+ }
- }
-
- TestIntfPrx
-@@ -151,6 +216,39 @@
- TestIntfPrx obj = TestIntfPrx::checkedCast(base);
- test(obj);
- test(obj == base);
-+
-+ cout << "ok" << endl;
-+
-+ cout << "testing ice_ids... " << flush;
-+ try
-+ {
-+ ObjectPrx obj = communicator->stringToProxy("category/locate:default -p 12010 -t 10000");
-+ obj->ice_ids();
-+ test(false);
-+ }
-+ catch(const UnknownUserException& ex)
-+ {
-+ test(ex.unknown == "Test::TestIntfUserException");
-+ }
-+ catch(...)
-+ {
-+ test(false);
-+ }
-+
-+ try
-+ {
-+ ObjectPrx obj = communicator->stringToProxy("category/finished:default -p 12010 -t 10000");
-+ obj->ice_ids();
-+ test(false);
-+ }
-+ catch(const UnknownUserException& ex)
-+ {
-+ test(ex.unknown == "Test::TestIntfUserException");
-+ }
-+ catch(...)
-+ {
-+ test(false);
-+ }
- cout << "ok" << endl;
-
- cout << "testing servant locator..." << flush;
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Client.cpp ./test/Ice/servantLocator/Client.cpp
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/Client.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/Client.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Collocated.cpp ./test/Ice/servantLocator/Collocated.cpp
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/Collocated.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/Collocated.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Makefile ./test/Ice/servantLocator/Makefile
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/Makefile 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/Makefile 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- # **********************************************************************
- #
--# Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- #
- # This copy of Ice is licensed to you under the terms described in the
- # ICE_LICENSE file included in this distribution.
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/ServantLocatorI.cpp ./test/Ice/servantLocator/ServantLocatorI.cpp
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/ServantLocatorI.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/ServantLocatorI.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-@@ -8,6 +8,7 @@
- // **********************************************************************
-
- #include <ServantLocatorI.h>
-+#include <Test.h>
- #include <TestCommon.h>
-
- #include <stdexcept>
-@@ -74,7 +75,11 @@
- void
- ServantLocatorI::exception(const Ice::Current& current)
- {
-- if(current.operation == "requestFailedException")
-+ if(current.operation == "ice_ids")
-+ {
-+ throw TestIntfUserException();
-+ }
-+ else if(current.operation == "requestFailedException")
- {
- throw Ice::ObjectNotExistException(__FILE__, __LINE__);
- }
-@@ -110,4 +115,12 @@
- {
- throw UnknownException(__FILE__, __LINE__, "reason");
- }
-+ else if(current.operation == "impossibleException")
-+ {
-+ throw TestIntfUserException(); // Yes, it really is meant to be TestIntfUserException.
-+ }
-+ else if(current.operation == "intfUserException")
-+ {
-+ throw TestImpossibleException(); // Yes, it really is meant to be TestImpossibleException.
-+ }
- }
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/ServantLocatorI.h ./test/Ice/servantLocator/ServantLocatorI.h
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/ServantLocatorI.h 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/ServantLocatorI.h 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Server.cpp ./test/Ice/servantLocator/Server.cpp
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/Server.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/Server.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/ServerAMD.cpp ./test/Ice/servantLocator/ServerAMD.cpp
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/ServerAMD.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/ServerAMD.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Test.ice ./test/Ice/servantLocator/Test.ice
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/Test.ice 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/Test.ice 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-@@ -17,6 +17,10 @@
- {
- };
-
-+exception TestImpossibleException
-+{
-+};
-+
- interface TestIntf
- {
- void requestFailedException();
-@@ -29,6 +33,9 @@
- void cppException();
-
- void unknownExceptionWithServantException();
-+
-+ string impossibleException(bool throw) throws TestImpossibleException;
-+ string intfUserException(bool throw) throws TestIntfUserException, TestImpossibleException;
-
- void shutdown();
- };
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMD.ice ./test/Ice/servantLocator/TestAMD.ice
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMD.ice 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/TestAMD.ice 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-@@ -17,6 +17,10 @@
- {
- };
-
-+exception TestImpossibleException
-+{
-+};
-+
- ["amd"] interface TestIntf
- {
- void requestFailedException();
-@@ -27,9 +31,12 @@
- void userException();
- void stdException();
- void cppException();
--
-+
- void unknownExceptionWithServantException();
-
-+ string impossibleException(bool throw) throws TestImpossibleException;
-+ string intfUserException(bool throw) throws TestIntfUserException, TestImpossibleException;
-+
- void shutdown();
- };
-
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMDI.cpp ./test/Ice/servantLocator/TestAMDI.cpp
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMDI.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/TestAMDI.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-@@ -69,6 +69,41 @@
- }
-
- void
-+TestAMDI::impossibleException_async(const Test::AMD_TestIntf_impossibleExceptionPtr& cb, bool _cpp_throw,
-+ const Current&)
-+{
-+ if(_cpp_throw)
-+ {
-+ cb->ice_exception(Test::TestImpossibleException());
-+ }
-+ else
-+ {
-+ //
-+ // Return a value so we can be sure that the stream position
-+ // is reset correctly if finished() throws.
-+ //
-+ cb->ice_response("Hello");
-+ }
-+}
-+
-+void
-+TestAMDI::intfUserException_async(const Test::AMD_TestIntf_intfUserExceptionPtr& cb, bool _cpp_throw, const Current&)
-+{
-+ if(_cpp_throw)
-+ {
-+ cb->ice_exception(Test::TestIntfUserException());
-+ }
-+ else
-+ {
-+ //
-+ // Return a value so we can be sure that the stream position
-+ // is reset correctly if finished() throws.
-+ //
-+ cb->ice_response("Hello");
-+ }
-+}
-+
-+void
- TestAMDI::shutdown_async(const Test::AMD_TestIntf_shutdownPtr& cb, const Current& current)
- {
- current.adapter->deactivate();
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMDI.h ./test/Ice/servantLocator/TestAMDI.h
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMDI.h 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/TestAMDI.h 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-@@ -25,7 +25,11 @@
- virtual void stdException_async(const Test::AMD_TestIntf_stdExceptionPtr&, const Ice::Current&);
- virtual void cppException_async(const Test::AMD_TestIntf_cppExceptionPtr&, const Ice::Current&);
-
-- virtual void unknownExceptionWithServantException_async(const Test::AMD_TestIntf_unknownExceptionWithServantExceptionPtr&, const Ice::Current&);
-+ virtual void unknownExceptionWithServantException_async(
-+ const Test::AMD_TestIntf_unknownExceptionWithServantExceptionPtr&, const Ice::Current&);
-+
-+ virtual void impossibleException_async(const Test::AMD_TestIntf_impossibleExceptionPtr&, bool, const Ice::Current&);
-+ virtual void intfUserException_async(const Test::AMD_TestIntf_intfUserExceptionPtr&, bool, const Ice::Current&);
-
- virtual void shutdown_async(const Test::AMD_TestIntf_shutdownPtr&, const Ice::Current&);
- };
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestI.cpp ./test/Ice/servantLocator/TestI.cpp
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestI.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/TestI.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-@@ -60,6 +60,34 @@
- throw Ice::ObjectNotExistException(__FILE__, __LINE__);
- }
-
-+string
-+TestI::impossibleException(bool _cpp_throw, const Current&)
-+{
-+ if(_cpp_throw)
-+ {
-+ throw Test::TestImpossibleException();
-+ }
-+ //
-+ // Return a value so we can be sure that the stream position
-+ // is reset correctly if finished() throws.
-+ //
-+ return "Hello";
-+}
-+
-+string
-+TestI::intfUserException(bool _cpp_throw, const Current&)
-+{
-+ if(_cpp_throw)
-+ {
-+ throw Test::TestIntfUserException();
-+ }
-+ //
-+ // Return a value so we can be sure that the stream position
-+ // is reset correctly if finished() throws.
-+ //
-+ return "Hello";
-+}
-+
- void
- TestI::shutdown(const Current& current)
- {
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestI.h ./test/Ice/servantLocator/TestI.h
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestI.h 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/TestI.h 2007-12-20 12:16:29.000000000 -0800
-@@ -1,6 +1,6 @@
- // **********************************************************************
- //
--// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- //
- // This copy of Ice is licensed to you under the terms described in the
- // ICE_LICENSE file included in this distribution.
-@@ -27,6 +27,9 @@
-
- virtual void unknownExceptionWithServantException(const Ice::Current&);
-
-+ virtual ::std::string impossibleException(bool, const Ice::Current&);
-+ virtual ::std::string intfUserException(bool, const Ice::Current&);
-+
- virtual void shutdown(const Ice::Current&);
- };
-
-diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/run.py ./test/Ice/servantLocator/run.py
---- ../Ice-3.2.1.orig/test/Ice/servantLocator/run.py 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/servantLocator/run.py 2007-12-20 12:16:29.000000000 -0800
-@@ -1,7 +1,7 @@
- #!/usr/bin/env python
- # **********************************************************************
- #
--# Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
-+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
- #
- # This copy of Ice is licensed to you under the terms described in the
- # ICE_LICENSE file included in this distribution.
-diff -ru ../Ice-3.2.1.orig/test/Ice/threads/TestI.cpp ./test/Ice/threads/TestI.cpp
---- ../Ice-3.2.1.orig/test/Ice/threads/TestI.cpp 2007-08-08 12:00:54.000000000 -0700
-+++ ./test/Ice/threads/TestI.cpp 2007-12-20 12:16:29.000000000 -0800
-@@ -167,6 +167,11 @@
- {
- // Expected.
- }
-+ catch(const Ice::Exception& ex)
-+ {
-+ cerr << ex << endl;
-+ test(false);
-+ }
-
- Test::AdapterPrx proxy2 =
- Test::AdapterPrx::uncheckedCast(proxy->ice_threadPerConnection(!proxy->ice_isThreadPerConnection()));
Copied: trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions.diff (from rev 34039, trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions)
===================================================================
--- trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions.diff (rev 0)
+++ trunk/dports/devel/ice-cpp/files/patch-ServantLocator.locate-can-throw-user-exceptions.diff 2008-02-11 03:49:47 UTC (rev 34044)
@@ -0,0 +1,1984 @@
+diff -ru ../Ice-3.2.1.orig/include/Ice/Outgoing.h ./include/Ice/Outgoing.h
+--- ../Ice-3.2.1.orig/include/Ice/Outgoing.h 2007-08-08 12:00:54.000000000 -0700
++++ ./include/Ice/Outgoing.h 2007-12-20 12:16:29.000000000 -0800
+@@ -49,6 +49,8 @@
+ //
+ bool retry() const;
+
++ static void throwUnknownWrapper(const ::std::exception&);
++
+ private:
+
+ const LocalExceptionWrapper& operator=(const LocalExceptionWrapper&);
+diff -ru ../Ice-3.2.1.orig/include/Slice/CsUtil.h ./include/Slice/CsUtil.h
+--- ../Ice-3.2.1.orig/include/Slice/CsUtil.h 2007-08-08 12:00:54.000000000 -0700
++++ ./include/Slice/CsUtil.h 2007-12-20 12:16:29.000000000 -0800
+@@ -34,6 +34,7 @@
+
+ protected:
+ static std::string fixId(const std::string&, int = 0, bool = false);
++ static std::string fixId(const ContainedPtr&, int = 0, bool = false);
+ static std::string typeToString(const TypePtr&);
+ static bool isValueType(const TypePtr&);
+
+diff -ru ../Ice-3.2.1.orig/slice/Ice/ServantLocator.ice ./slice/Ice/ServantLocator.ice
+--- ../Ice-3.2.1.orig/slice/Ice/ServantLocator.ice 2007-08-08 12:00:54.000000000 -0700
++++ ./slice/Ice/ServantLocator.ice 2007-12-20 12:16:29.000000000 -0800
+@@ -36,6 +36,15 @@
+ * the returned servant into its active servant map. This must be
+ * done by the servant locator implementation, if this is desired.
+ *
++ * [locate] can throw any user exception. If it does, that exception
++ * is marshaled back to the client. If the Slice definition for the
++ * corresponding operation includes that user exception, the client
++ * receives that user exception; otherwise, the client receives
++ * [UnknownUserException].
++ *
++ * If [locate] throws any exception, the Ice run time does <EM>not</EM>
++ * call [finished].
++ *
+ * <p class="Note">If you call [locate] from your own code, you
+ * must also call [finished] when you have finished using the
+ * servant, provided that [locate] returned a non-null servant;
+@@ -55,7 +64,7 @@
+ * @see finished
+ *
+ **/
+- Object locate(Current curr, out LocalObject cookie);
++ ["UserException"] Object locate(Current curr, out LocalObject cookie);
+
+ /**
+ *
+@@ -64,6 +73,15 @@
+ * prior to the request and returned a non-null servant. This
+ * operation can be used for cleanup purposes after a request.
+ *
++ * [finished] can throw any user exception. If it does, that exception
++ * is marshaled back to the client. If the Slice definition for the
++ * corresponding operation includes that user exception, the client
++ * receives that user exception; otherwise, the client receives
++ * [UnknownUserException].
++ *
++ * If both the operation and [finished] throw an exception, the
++ * exception thrown by [finished] is marshaled back to the client.
++ *
+ * @param curr Information about the current operation call for
+ * which a servant was located by [locate].
+ *
+@@ -76,7 +94,7 @@
+ * @see locate
+ *
+ **/
+- void finished(Current curr, Object servant, LocalObject cookie);
++ ["UserException"] void finished(Current curr, Object servant, LocalObject cookie);
+
+ /**
+ *
+diff -ru ../Ice-3.2.1.orig/src/Freeze/MapI.cpp ./src/Freeze/MapI.cpp
+--- ../Ice-3.2.1.orig/src/Freeze/MapI.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/Freeze/MapI.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1317,13 +1317,10 @@
+ }
+ _db = 0;
+
+- for(IndexMap::iterator p = _indices.begin(); p != _indices.end(); ++p)
+- {
+- MapIndexBasePtr& indexBase = p->second;
+-
+- indexBase->_impl = 0;
+- indexBase->_map = 0;
+- }
++ //
++ // We can't clear the indexBase as MapIndexI is using
++ // the first map's indexBase objects
++ //
+ _indices.clear();
+ }
+
+diff -ru ../Ice-3.2.1.orig/src/Ice/Incoming.cpp ./src/Ice/Incoming.cpp
+--- ../Ice-3.2.1.orig/src/Ice/Incoming.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/Ice/Incoming.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -387,6 +387,7 @@
+
+ try
+ {
++ bool finishedException = false;
+ try
+ {
+ if(servantManager)
+@@ -401,39 +402,83 @@
+ }
+ if(_locator)
+ {
+- _servant = _locator->locate(_current, _cookie);
++ try
++ {
++ _servant = _locator->locate(_current, _cookie);
++ }
++ catch(const UserException& ex)
++ {
++ _os.write(ex);
++ status = DispatchUserException;
++ }
+ }
+ }
+ }
+- if(!_servant)
++ if(status == DispatchOK)
+ {
+- if(servantManager && servantManager->hasServant(_current.id))
++ if(!_servant)
+ {
+- status = DispatchFacetNotExist;
++ if(servantManager && servantManager->hasServant(_current.id))
++ {
++ status = DispatchFacetNotExist;
++ }
++ else
++ {
++ status = DispatchObjectNotExist;
++ }
+ }
+ else
+ {
+- status = DispatchObjectNotExist;
++ status = _servant->__dispatch(*this, _current);
+ }
+ }
+- else
+- {
+- status = _servant->__dispatch(*this, _current);
+- }
+ }
+ catch(...)
+ {
+ if(_locator && _servant && status != DispatchAsync)
+ {
+- _locator->finished(_current, _servant, _cookie);
++ try
++ {
++ _locator->finished(_current, _servant, _cookie);
++ }
++ catch(const UserException& ex)
++ {
++ //
++ // The operation may ahve already marshaled a reply; we must overwrite that reply.
++ //
++ _os.endWriteEncaps();
++ _os.b.resize(headerSize + 5); // Byte following reply status.
++ _os.startWriteEncaps();
++ _os.write(ex);
++ status = DispatchUserException; // Code below inserts the reply status.
++ finishedException = true;
++ }
++ catch(...)
++ {
++ throw;
++ }
+ }
+
+ throw;
+ }
+
+- if(_locator && _servant && status != DispatchAsync)
++ if(!finishedException && _locator && _servant && status != DispatchAsync)
+ {
+- _locator->finished(_current, _servant, _cookie);
++ try
++ {
++ _locator->finished(_current, _servant, _cookie);
++ }
++ catch(const UserException& ex)
++ {
++ //
++ // The operation may ahve already marshaled a reply; we must overwrite that reply.
++ //
++ _os.endWriteEncaps();
++ _os.b.resize(headerSize + 5); // Byte following reply status.
++ _os.startWriteEncaps();
++ _os.write(ex);
++ status = DispatchUserException; // Code below inserts the reply status.
++ }
+ }
+ }
+ catch(const Exception& ex)
+diff -ru ../Ice-3.2.1.orig/src/Ice/IncomingAsync.cpp ./src/Ice/IncomingAsync.cpp
+--- ../Ice-3.2.1.orig/src/Ice/IncomingAsync.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/Ice/IncomingAsync.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -133,7 +133,31 @@
+ {
+ if(_locator && _servant)
+ {
+- _locator->finished(_current, _servant, _cookie);
++ try
++ {
++ _locator->finished(_current, _servant, _cookie);
++ }
++ catch(const UserException& ex)
++ {
++ //
++ // The operation may have already marshaled a reply; we must overwrite that reply.
++ //
++ if(_response)
++ {
++ _os.endWriteEncaps();
++ _os.b.resize(headerSize + 4); // Reply status position.
++ _os.write(static_cast<Byte>(DispatchUserException));
++ _os.startWriteEncaps();
++ _os.write(ex);
++ _os.endWriteEncaps();
++ _connection->sendResponse(&_os, _compress);
++ }
++ else
++ {
++ _connection->sendNoResponse();
++ }
++ return false;
++ }
+ }
+ return true;
+ }
+diff -ru ../Ice-3.2.1.orig/src/Ice/Outgoing.cpp ./src/Ice/Outgoing.cpp
+--- ../Ice-3.2.1.orig/src/Ice/Outgoing.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/Ice/Outgoing.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -32,6 +32,44 @@
+ _ex.reset(dynamic_cast<LocalException*>(ex.get()->ice_clone()));
+ }
+
++void
++IceInternal::LocalExceptionWrapper::throwUnknownWrapper(const std::exception& ex)
++{
++
++ const UserException* ue = dynamic_cast<const UserException*>(&ex);
++ if(ue)
++ {
++ stringstream s;
++ s << *ue;
++ throw LocalExceptionWrapper(UnknownUserException(__FILE__, __LINE__, s.str()), false);
++ }
++
++ const LocalException* le = dynamic_cast<const LocalException*>(&ex);
++ if(le)
++ {
++#if 0
++ //
++ // Commented-out code makes local exceptions fully location transparent,
++ // but the Freeze evictor relies on them not being transparent.
++ //
++ if(dynamic_cast<const UnknownException*>(le) ||
++ dynamic_cast<const ObjectNotExistException*>(le) ||
++ dynamic_cast<const OperationNotExistException*>(le) ||
++ dynamic_cast<const FacetNotExistException*>(le))
++ {
++ throw LocalExceptionWrapper(*le, false);
++ }
++ stringstream s;
++ s << *le;
++ throw LocalExceptionWrapper(UnknownLocalException(__FILE__, __LINE__, s.str()), false);
++#else
++ throw LocalExceptionWrapper(*le, false);
++#endif
++ }
++ string msg = "std::exception: ";
++ throw LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, msg + ex.what()), false);
++}
++
+ const LocalException*
+ IceInternal::LocalExceptionWrapper::get() const
+ {
+diff -ru ../Ice-3.2.1.orig/src/Ice/Proxy.cpp ./src/Ice/Proxy.cpp
+--- ../Ice-3.2.1.orig/src/Ice/Proxy.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/Ice/Proxy.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1329,21 +1329,40 @@
+ __initCurrent(__current, "ice_isA", ::Ice::Nonmutating, context);
+ while(true)
+ {
+- Direct __direct(__current);
+ bool __ret;
+ try
+ {
+- __ret = __direct.servant()->ice_isA(__id, __current);
++ Direct __direct(__current);
++ try
++ {
++ __ret = __direct.servant()->ice_isA(__id, __current);
++ }
++ catch(const ::std::exception& __ex)
++ {
++ __direct.destroy();
++ LocalExceptionWrapper::throwUnknownWrapper(__ex);
++ }
++ catch(...)
++ {
++ __direct.destroy();
++ throw;
++ }
++ __direct.destroy();
+ }
+- catch(...)
++ catch(const LocalExceptionWrapper&)
+ {
+- __direct.destroy();
+ throw;
+ }
+- __direct.destroy();
++ catch(const ::std::exception& __ex)
++ {
++ LocalExceptionWrapper::throwUnknownWrapper(__ex);
++ }
++ catch(...)
++ {
++ LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, "unknown c++ exception"), false);
++ }
+ return __ret;
+ }
+- return false; // To keep the Visual C++ compiler happy.
+ }
+
+ void
+@@ -1353,18 +1372,38 @@
+ __initCurrent(__current, "ice_ping", ::Ice::Nonmutating, context);
+ while(true)
+ {
+- Direct __direct(__current);
+ try
+ {
+- __direct.servant()->ice_ping(__current);
++ Direct __direct(__current);
++ try
++ {
++ __direct.servant()->ice_ping(__current);
++ }
++ catch(const ::std::exception& __ex)
++ {
++ __direct.destroy();
++ LocalExceptionWrapper::throwUnknownWrapper(__ex);
++ }
++ catch(...)
++ {
++ __direct.destroy();
++ throw;
++ }
++ __direct.destroy();
+ }
+- catch(...)
++ catch(const LocalExceptionWrapper&)
+ {
+- __direct.destroy();
+ throw;
+ }
+- __direct.destroy();
+- return;
++ catch(const ::std::exception& __ex)
++ {
++ LocalExceptionWrapper::throwUnknownWrapper(__ex);
++ }
++ catch(...)
++ {
++ LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, "unknown c++ exception"), false);
++ }
++ return;
+ }
+ }
+
+@@ -1373,23 +1412,42 @@
+ {
+ Current __current;
+ __initCurrent(__current, "ice_ids", ::Ice::Nonmutating, context);
++ vector<string> __ret;
+ while(true)
+ {
+- Direct __direct(__current);
+- vector<string> __ret;
+ try
+ {
+- __ret = __direct.servant()->ice_ids(__current);
++ Direct __direct(__current);
++ try
++ {
++ __ret = __direct.servant()->ice_ids(__current);
++ }
++ catch(const ::std::exception& __ex)
++ {
++ __direct.destroy();
++ LocalExceptionWrapper::throwUnknownWrapper(__ex);
++ }
++ catch(...)
++ {
++ __direct.destroy();
++ throw;
++ }
++ __direct.destroy();
+ }
+- catch(...)
++ catch(const LocalExceptionWrapper&)
+ {
+- __direct.destroy();
+ throw;
+ }
+- __direct.destroy();
++ catch(const ::std::exception& __ex)
++ {
++ LocalExceptionWrapper::throwUnknownWrapper(__ex);
++ }
++ catch(...)
++ {
++ LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, "unknown c++ exception"), false);
++ }
+ return __ret;
+ }
+- return vector<string>(); // To keep the Visual C++ compiler happy.
+ }
+
+ string
+@@ -1399,21 +1457,40 @@
+ __initCurrent(__current, "ice_id", ::Ice::Nonmutating, context);
+ while(true)
+ {
+- Direct __direct(__current);
+ string __ret;
+ try
+ {
+- __ret = __direct.servant()->ice_id(__current);
++ Direct __direct(__current);
++ try
++ {
++ __ret = __direct.servant()->ice_id(__current);
++ }
++ catch(const ::std::exception& __ex)
++ {
++ __direct.destroy();
++ LocalExceptionWrapper::throwUnknownWrapper(__ex);
++ }
++ catch(...)
++ {
++ __direct.destroy();
++ throw;
++ }
++ __direct.destroy();
+ }
+- catch(...)
++ catch(const LocalExceptionWrapper&)
+ {
+- __direct.destroy();
+ throw;
+ }
+- __direct.destroy();
++ catch(const ::std::exception& __ex)
++ {
++ LocalExceptionWrapper::throwUnknownWrapper(__ex);
++ }
++ catch(...)
++ {
++ LocalExceptionWrapper(UnknownException(__FILE__, __LINE__, "unknown c++ exception"), false);
++ }
+ return __ret;
+ }
+- return string(); // To keep the Visual C++ compiler happy.
+ }
+
+ bool
+diff -ru ../Ice-3.2.1.orig/src/Slice/CsUtil.cpp ./src/Slice/CsUtil.cpp
+--- ../Ice-3.2.1.orig/src/Slice/CsUtil.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/Slice/CsUtil.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -130,6 +130,21 @@
+ }
+
+ string
++Slice::CsGenerator::fixId(const ContainedPtr& cont, int baseTypes, bool mangleCasts)
++{
++ ContainerPtr container = cont->container();
++ ContainedPtr contained = ContainedPtr::dynamicCast(container);
++ if(contained && contained->hasMetaData("clr:property"))
++ {
++ return cont->name() + "_prop";
++ }
++ else
++ {
++ return fixId(cont->name(), baseTypes, mangleCasts);
++ }
++}
++
++string
+ Slice::CsGenerator::typeToString(const TypePtr& type)
+ {
+ if(!type)
+@@ -464,19 +479,41 @@
+ {
+ if(marshal)
+ {
+- if(streamingAPI)
++ if(!isValueType(st))
+ {
+- out << nl << param << ".ice_write(" << stream << ");";
++ out << nl << "if(" << param << " == null)";
++ out << sb;
++ string typeS = typeToString(st);
++ out << nl << typeS << " " << "tmp__ = new " << typeS << "();";
++ out << nl << "tmp__.";
++ out << (streamingAPI ? "ice_write" : "write__") << "(" << stream << ");";
++ out << eb;
++ out << nl << "else";
++ out << sb;
++ out << nl << param << "." << (streamingAPI ? "ice_write" : "write__") << "(" << stream << ");";
++ out << eb;
+ }
+ else
+ {
+- out << nl << param << ".write__(" << stream << ");";
++ if(streamingAPI)
++ {
++ out << nl << param << ".ice_write(" << stream << ");";
++ }
++ else
++ {
++ out << nl << param << ".write__(" << stream << ");";
++ }
+ }
+ }
+ else
+ {
+- string typeS = typeToString(type);
+- out << nl << param << " = new " << typeS << "();";
++ if(!isValueType(st))
++ {
++ out << nl << "if(" << param << " == null)";
++ out << sb;
++ out << nl << param << " = new " << typeToString(type) << "();";
++ out << eb;
++ }
+ if(streamingAPI)
+ {
+ out << nl << param << ".ice_read(" << stream << ");";
+diff -ru ../Ice-3.2.1.orig/src/Slice/JavaUtil.cpp ./src/Slice/JavaUtil.cpp
+--- ../Ice-3.2.1.orig/src/Slice/JavaUtil.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/Slice/JavaUtil.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -3442,6 +3442,17 @@
+ void
+ Slice::JavaGenerator::MetaDataVisitor::visitOperation(const OperationPtr& p)
+ {
++ if(p->hasMetaData("UserException"))
++ {
++ ClassDefPtr cl = ClassDefPtr::dynamicCast(p->container());
++ if(!cl->isLocal())
++ {
++ cout << p->definitionContext()->filename() << ":" << p->line()
++ << ": warning: metadata directive `UserException' applies only to local operations "
++ << "but enclosing " << (cl->isInterface() ? "interface" : "class") << "`" << cl->name()
++ << "' is not local" << endl;
++ }
++ }
+ StringList metaData = getMetaData(p);
+ TypePtr returnType = p->returnType();
+ if(!metaData.empty())
+diff -ru ../Ice-3.2.1.orig/src/slice2cpp/Gen.cpp ./src/slice2cpp/Gen.cpp
+--- ../Ice-3.2.1.orig/src/slice2cpp/Gen.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/slice2cpp/Gen.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -2527,6 +2527,15 @@
+ vector<string> paramsDecl;
+ vector<string> args;
+
++ ExceptionList throws = p->throws();
++ throws.sort();
++ throws.unique();
++#if defined(__SUNPRO_CC)
++ throws.sort(derivedToBaseCompare);
++#else
++ throws.sort(Slice::DerivedToBaseCompare());
++#endif
++
+ ParamDeclList paramList = p->parameters();
+ for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
+ {
+@@ -2586,23 +2595,18 @@
+ C << nl << "::Ice::Current __current;";
+ C << nl << "__initCurrent(__current, " << p->flattenedScope() + p->name() + "_name, "
+ << operationModeToString(p->sendMode()) << ", __context);";
+- C << nl << "while(true)";
+- C << sb;
+- C << nl << "::IceInternal::Direct __direct(__current);";
+ if(ret)
+ {
+ C << nl << retS << " __ret;";
+ }
+ C << nl << "try";
+ C << sb;
++ C << nl << "::IceInternal::Direct __direct(__current);";
+ C << nl << thisPointer << " __servant = dynamic_cast< " << thisPointer << ">(__direct.servant().get());";
+ C << nl << "if(!__servant)";
+ C << sb;
+- C << nl << "::Ice::OperationNotExistException __opEx(__FILE__, __LINE__);";
+- C << nl << "__opEx.id = __current.id;";
+- C << nl << "__opEx.facet = __current.facet;";
+- C << nl << "__opEx.operation = __current.operation;";
+- C << nl << "throw __opEx;";
++ C << nl << "__direct.destroy();";
++ C << nl << "throw ::Ice::OperationNotExistException(__FILE__, __LINE__, __current.id, __current.facet, __current.operation);";
+ C << eb;
+ C << nl << "try";
+ C << sb;
+@@ -2611,28 +2615,51 @@
+ {
+ C << "__ret = ";
+ }
+- C << "__servant->" << name << spar << args << epar << ';';
++ C << "__servant->" << name << spar << args << epar << ";";
+ C << eb;
+- C << nl << "catch(const ::Ice::LocalException& __ex)";
++ C << nl << "catch(const ::Ice::UserException&)";
+ C << sb;
+- C << nl << "throw ::IceInternal::LocalExceptionWrapper(__ex, false);";
++ C << nl << "__direct.destroy();";
++ C << nl << "throw;";
+ C << eb;
++ C << nl << "catch(const ::std::exception& __ex)";
++ C << sb;
++ C << nl << "__direct.destroy();";
++ C << nl << "::IceInternal::LocalExceptionWrapper::throwUnknownWrapper(__ex);";
+ C << eb;
+ C << nl << "catch(...)";
+ C << sb;
+ C << nl << "__direct.destroy();";
+- C << nl << "throw;";
++ C << nl << "throw ::Ice::UnknownException(__FILE__, __LINE__, \"unknown c++ exception\");";
+ C << eb;
+ C << nl << "__direct.destroy();";
+- if(ret)
++ C << eb;
++ for(ExceptionList::const_iterator i = throws.begin(); i != throws.end(); ++i)
+ {
+- C << nl << "return __ret;";
++ C << nl << "catch(const " << fixKwd((*i)->scoped()) << "&)";
++ C << sb;
++ C << nl << "throw;";
++ C << eb;
+ }
+- else
++ C << nl << "catch(const ::IceInternal::LocalExceptionWrapper&)";
++ C << sb;
++ C << nl << "throw;";
++ C << eb;
++ C << nl << "catch(const ::std::exception& __ex)";
++ C << sb;
++ C << nl << "::IceInternal::LocalExceptionWrapper::throwUnknownWrapper(__ex);";
++ C << eb;
++ C << nl << "catch(...)";
++ C << sb;
++ C << nl << "throw ::IceInternal::LocalExceptionWrapper("
++ << "::Ice::UnknownException(__FILE__, __LINE__, \"unknown c++ exception\"), false);";
++ C << eb;
++ C << nl << "return";
++ if(ret)
+ {
+- C << nl << "return;";
++ C << " __ret";
+ }
+- C << eb;
++ C << ";";
+ C << eb;
+ }
+ }
+@@ -5286,6 +5313,18 @@
+ {
+ ami = true;
+ }
++
++ if(p->hasMetaData("UserException"))
++ {
++ if(!cl->isLocal())
++ {
++ cout << p->definitionContext()->filename() << ":" << p->line()
++ << ": warning: metadata directive `UserException' applies only to local operations "
++ << "but enclosing " << (cl->isInterface() ? "interface" : "class") << "`" << cl->name()
++ << "' is not local" << endl;
++ }
++ }
++
+ StringList metaData = p->getMetaData();
+ metaData.remove("cpp:const");
+
+diff -ru ../Ice-3.2.1.orig/src/slice2cs/Gen.cpp ./src/slice2cs/Gen.cpp
+--- ../Ice-3.2.1.orig/src/slice2cs/Gen.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/slice2cs/Gen.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -386,6 +386,18 @@
+ if(!isClass)
+ {
+ _out << nl << typeS << ' ' << param << ';';
++ StructPtr st = StructPtr::dynamicCast(q->first);
++ if(st)
++ {
++ if(isValueType(q->first))
++ {
++ _out << nl << param << " = new " << typeS << "();";
++ }
++ else
++ {
++ _out << nl << param << " = null;";
++ }
++ }
+ }
+ writeMarshalUnmarshalCode(_out, q->first, param, false, false, true);
+ }
+@@ -501,12 +513,26 @@
+ //
+ for(q = inParams.begin(); q != inParams.end(); ++q)
+ {
++ string param = fixId(q->second);
++ string typeS = typeToString(q->first);
+ BuiltinPtr builtin = BuiltinPtr::dynamicCast(q->first);
+ bool isClass = (builtin && builtin->kind() == Builtin::KindObject)
+ || ClassDeclPtr::dynamicCast(q->first);
+ if(!isClass)
+ {
+- _out << nl << typeToString(q->first) << ' ' << fixId(q->second) << ';';
++ _out << nl << typeS << ' ' << param << ';';
++ StructPtr st = StructPtr::dynamicCast(q->first);
++ if(st)
++ {
++ if(isValueType(q->first))
++ {
++ _out << nl << param << " = new " << typeS << "();";
++ }
++ else
++ {
++ _out << nl << param << " = null;";
++ }
++ }
+ }
+ writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), false, false, true);
+ }
+@@ -728,8 +754,7 @@
+ _out << nl << "os__.startWriteSlice();";
+ for(d = members.begin(); d != members.end(); ++d)
+ {
+- writeMarshalUnmarshalCode(_out, (*d)->type(),
+- fixId((*d)->name(), DotNet::ICloneable, true),
++ writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
+ true, false, false);
+ }
+ _out << nl << "os__.endWriteSlice();";
+@@ -831,8 +856,7 @@
+ patchParams << ", " << classMemberCount++;
+ }
+ }
+- writeMarshalUnmarshalCode(_out, (*d)->type(),
+- fixId((*d)->name(), DotNet::ICloneable, true),
++ writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
+ false, false, false, patchParams.str());
+ }
+ _out << nl << "is__.endReadSlice();";
+@@ -850,8 +874,7 @@
+ _out << nl << "outS__.startSlice();";
+ for(d = members.begin(); d != members.end(); ++d)
+ {
+- writeMarshalUnmarshalCode(_out, (*d)->type(),
+- fixId((*d)->name(), DotNet::ICloneable, true),
++ writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
+ true, true, false);
+ }
+ _out << nl << "outS__.endSlice();";
+@@ -877,8 +900,7 @@
+ patchParams << ", " << classMemberCount++;
+ }
+ }
+- writeMarshalUnmarshalCode(_out, (*d)->type(),
+- fixId((*d)->name(), DotNet::ICloneable, true),
++ writeMarshalUnmarshalCode(_out, (*d)->type(), fixId(*d, DotNet::ICloneable, true),
+ false, true, false, patchParams.str());
+ }
+ _out << nl << "inS__.endSlice();";
+@@ -2054,7 +2076,8 @@
+ _out << sb;
+ for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ {
+- _out << nl << "this." << fixId((*q)->name()) << " = " << fixId((*q)->name()) << ';';
++ string name = fixId((*q)->name(), DotNet::ApplicationException, false);
++ _out << nl << "this." << name << " = " << fixId((*q)->name()) << ';';
+ }
+ _out << eb;
+ }
+@@ -2186,8 +2209,7 @@
+ _out << nl << "os__.startWriteSlice();";
+ for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ {
+- writeMarshalUnmarshalCode(_out, (*q)->type(),
+- fixId((*q)->name(), DotNet::ApplicationException),
++ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, DotNet::ApplicationException),
+ true, false, false);
+ }
+ _out << nl << "os__.endWriteSlice();";
+@@ -2294,8 +2316,7 @@
+ patchParams << ", " << classMemberCount++;
+ }
+ }
+- writeMarshalUnmarshalCode(_out, (*q)->type(),
+- fixId((*q)->name(), DotNet::ApplicationException),
++ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId((*q)->name(), DotNet::ApplicationException),
+ false, false, false, patchParams.str());
+ }
+ _out << nl << "is__.endReadSlice();";
+@@ -2313,8 +2334,7 @@
+ _out << nl << "outS__.startSlice();";
+ for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ {
+- writeMarshalUnmarshalCode(_out, (*q)->type(),
+- fixId((*q)->name(), DotNet::ApplicationException),
++ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId((*q)->name(), DotNet::ApplicationException),
+ true, true, false);
+ }
+ _out << nl << "outS__.endSlice();";
+@@ -2344,8 +2364,7 @@
+ patchParams << ", " << classMemberCount++;
+ }
+ }
+- writeMarshalUnmarshalCode(_out, (*q)->type(),
+- fixId((*q)->name(), DotNet::ApplicationException),
++ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId((*q)->name(), DotNet::ApplicationException),
+ false, true, false, patchParams.str());
+ }
+ _out << nl << "inS__.endSlice();";
+@@ -2443,6 +2462,8 @@
+ DataMemberList dataMembers = p->dataMembers();
+ DataMemberList::const_iterator q;
+
++ bool propertyMapping = p->hasMetaData("clr:property");
++
+ _out << sp << nl << "#endregion"; // Slice data members
+
+ bool isClass = !isValueType(p);
+@@ -2453,6 +2474,25 @@
+ _out << "s";
+ _out << sp << nl << "public " << name << "()";
+ _out << sb;
++ /*
++ if(!p->isLocal())
++ {
++ for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
++ {
++ if(!isValueType((*q)->type()))
++ {
++ string memberName = fixId((*q)->name(), isClass ? DotNet::ICloneable : 0);
++ string memberType = typeToString((*q)->type());
++ _out << nl << "this." << memberName;
++ if(propertyMapping)
++ {
++ _out << "_prop";
++ }
++ _out << " = new " << memberType << "();";
++ }
++ }
++ }
++ */
+ _out << eb;
+ }
+
+@@ -2461,7 +2501,7 @@
+ vector<string> paramNames;
+ for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ {
+- string memberName = fixId((*q)->name());
++ string memberName = fixId((*q)->name(), isClass ? DotNet::ICloneable : 0);
+ string memberType = typeToString((*q)->type());
+ paramDecl.push_back(memberType + " " + memberName);
+ paramNames.push_back(memberName);
+@@ -2470,7 +2510,12 @@
+ _out << sb;
+ for(vector<string>::const_iterator i = paramNames.begin(); i != paramNames.end(); ++i)
+ {
+- _out << nl << "this." << *i << " = " << *i << ';';
++ _out << nl << "this." << *i;
++ if(propertyMapping)
++ {
++ _out << "_prop";
++ }
++ _out << " = " << *i << ';';
+ }
+ _out << eb;
+
+@@ -2594,8 +2639,7 @@
+ _out << sb;
+ for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ {
+- writeMarshalUnmarshalCode(_out, (*q)->type(),
+- fixId((*q)->name(), isClass ? DotNet::ICloneable : 0),
++ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0),
+ true, false, false);
+ }
+ _out << eb;
+@@ -2687,8 +2731,7 @@
+ patchParams << ", " << classMemberCount++;
+ }
+ }
+- writeMarshalUnmarshalCode(_out, (*q)->type(),
+- fixId((*q)->name(), isClass ? DotNet::ICloneable : 0 ),
++ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0 ),
+ false, false, false, patchParams.str());
+ }
+ _out << eb;
+@@ -2699,8 +2742,7 @@
+ _out << sb;
+ for(q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ {
+- writeMarshalUnmarshalCode(_out, (*q)->type(),
+- fixId((*q)->name(), isClass ? DotNet::ICloneable : 0),
++ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0),
+ true, true, false);
+ }
+ _out << eb;
+@@ -2720,8 +2762,7 @@
+ patchParams << ", " << classMemberCount++;
+ }
+ }
+- writeMarshalUnmarshalCode(_out, (*q)->type(),
+- fixId((*q)->name(), isClass ? DotNet::ICloneable : 0 ),
++ writeMarshalUnmarshalCode(_out, (*q)->type(), fixId(*q, isClass ? DotNet::ICloneable : 0 ),
+ false, true, false, patchParams.str());
+ }
+ _out << eb;
+@@ -3920,10 +3961,35 @@
+ _out << nl << "for(int i__ = 0; i__ < sz__; ++i__)";
+ _out << sb;
+ _out << nl << keyS << " k__;";
++ StructPtr st = StructPtr::dynamicCast(key);
++ if(st)
++ {
++ if(isValueType(key))
++ {
++ _out << nl << "v__ = new " << typeToString(key) << "();";
++ }
++ else
++ {
++ _out << nl << "k__ = null;";
++ }
++ }
+ writeMarshalUnmarshalCode(_out, key, "k__", false, false, false);
+ if(!hasClassValue)
+ {
+ _out << nl << valueS << " v__;";
++
++ StructPtr st = StructPtr::dynamicCast(value);
++ if(st)
++ {
++ if(isValueType(value))
++ {
++ _out << nl << "v__ = new " << typeToString(value) << "();";
++ }
++ else
++ {
++ _out << nl << "v__ = null;";
++ }
++ }
+ }
+ writeMarshalUnmarshalCode(_out, value, "v__", false, false, false, "r__, k__");
+ if(!hasClassValue)
+@@ -3960,10 +4026,34 @@
+ _out << nl << "for(int i__ = 0; i__ < sz__; ++i__)";
+ _out << sb;
+ _out << nl << keyS << " k__;";
++ StructPtr st = StructPtr::dynamicCast(key);
++ if(st)
++ {
++ if(isValueType(key))
++ {
++ _out << nl << "v__ = new " << typeToString(key) << "();";
++ }
++ else
++ {
++ _out << nl << "k__ = null;";
++ }
++ }
+ writeMarshalUnmarshalCode(_out, key, "k__", false, true, false);
+ if(!hasClassValue)
+ {
+ _out << nl << valueS << " v__;";
++ StructPtr st = StructPtr::dynamicCast(value);
++ if(st)
++ {
++ if(isValueType(value))
++ {
++ _out << nl << "v__ = new " << typeToString(value) << "();";
++ }
++ else
++ {
++ _out << nl << "v__ = null;";
++ }
++ }
+ }
+ writeMarshalUnmarshalCode(_out, value, "v__", false, true, false, "r__, k__");
+ if(!hasClassValue)
+@@ -4196,7 +4286,20 @@
+ _out << eb;
+ for(q = outParams.begin(); q != outParams.end(); ++q)
+ {
+- writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), false, false, true, "");
++ string param = fixId(q->second);
++ StructPtr st = StructPtr::dynamicCast(q->first);
++ if(st)
++ {
++ if(isValueType(q->first))
++ {
++ _out << nl << param << " = new " << typeToString(q->first) << "();";
++ }
++ else
++ {
++ _out << nl << param << " = null;";
++ }
++ }
++ writeMarshalUnmarshalCode(_out, q->first, param, false, false, true, "");
+ }
+ if(ret)
+ {
+@@ -4212,6 +4315,18 @@
+ else
+ {
+ _out << nl << retS << " ret__;";
++ StructPtr st = StructPtr::dynamicCast(ret);
++ if(st)
++ {
++ if(isValueType(st))
++ {
++ _out << nl << "ret__ = new " << retS << "();";
++ }
++ else
++ {
++ _out << nl << "ret__ = null;";
++ }
++ }
+ writeMarshalUnmarshalCode(_out, ret, "ret__", false, false, true, "");
+ }
+ }
+@@ -4622,7 +4737,9 @@
+ _out << sb;
+ for(q = outParams.begin(); q != outParams.end(); ++q)
+ {
+- _out << nl << typeToString(q->first) << ' ' << fixId(q->second) << ';';
++ string param = fixId(q->second);
++ string typeS = typeToString(q->first);
++ _out << nl << typeS << ' ' << param << ';';
+ }
+ if(ret)
+ {
+@@ -4650,10 +4767,33 @@
+ _out << eb;
+ for(q = outParams.begin(); q != outParams.end(); ++q)
+ {
++ string param = fixId(q->second);
++ StructPtr st = StructPtr::dynamicCast(q->first);
++ if(st)
++ if(isValueType(st))
++ {
++ _out << nl << param << " = new " << typeToString(q->first) << "();";
++ }
++ else
++ {
++ _out << nl << param << " = null;";
++ }
+ writeMarshalUnmarshalCode(_out, q->first, fixId(q->second), false, false, true);
+ }
+ if(ret)
+ {
++ StructPtr st = StructPtr::dynamicCast(ret);
++ if(st)
++ {
++ if(isValueType(ret))
++ {
++ _out << nl << "ret__ = new " << retS << "();";
++ }
++ else
++ {
++ _out << nl << "ret__ = null;";
++ }
++ }
+ writeMarshalUnmarshalCode(_out, ret, "ret__", false, false, true);
+ }
+ if(p->returnsClasses())
+diff -ru ../Ice-3.2.1.orig/src/slice2java/Gen.cpp ./src/slice2java/Gen.cpp
+--- ../Ice-3.2.1.orig/src/slice2java/Gen.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./src/slice2java/Gen.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -368,7 +368,10 @@
+
+ ConstructedPtr constructed = ConstructedPtr::dynamicCast(type);
+ assert(constructed);
++ out << nl << "if(" << name << " != null)";
++ out << sb;
+ out << nl << "__h = 5 * __h + " << name << ".hashCode();";
++ out << eb;
+ }
+
+ void
+@@ -533,7 +536,16 @@
+ {
+ out << sp << nl << "public final " << typeToString(ret, TypeModeReturn, package, op->getMetaData())
+ << nl << opName << spar << params << epar;
+- writeThrowsClause(package, throws);
++ if(op->hasMetaData("UserException"))
++ {
++ out.inc();
++ out << nl << "throws Ice.UserException";
++ out.dec();
++ }
++ else
++ {
++ writeThrowsClause(package, throws);
++ }
+ out << sb << nl;
+ if(ret)
+ {
+@@ -1418,7 +1430,16 @@
+ out << "Ice.Current __current";
+ }
+ out << epar;
+- writeThrowsClause(package, throws);
++ if(op->hasMetaData("UserException"))
++ {
++ out.inc();
++ out << nl << "throws Ice.UserException";
++ out.dec();
++ }
++ else
++ {
++ writeThrowsClause(package, throws);
++ }
+ out << ';';
+ }
+
+@@ -1583,10 +1604,19 @@
+ }
+ out << epar;
+
+- ExceptionList throws = (*r)->throws();
+- throws.sort();
+- throws.unique();
+- writeThrowsClause(package, throws);
++ if((*r)->hasMetaData("UserException"))
++ {
++ out.inc();
++ out << nl << "throws Ice.UserException";
++ out.dec();
++ }
++ else
++ {
++ ExceptionList throws = (*r)->throws();
++ throws.sort();
++ throws.unique();
++ writeThrowsClause(package, throws);
++ }
+ out << sb;
+ out << nl;
+ if(ret && !hasAMD)
+@@ -4284,6 +4314,11 @@
+ ExceptionList throws = op->throws();
+ throws.sort();
+ throws.unique();
++#if defined(__SUNPRO_CC)
++ throws.sort(derivedToBaseCompare);
++#else
++ throws.sort(Slice::DerivedToBaseCompare());
++#endif
+
+ vector<string> params = getParams(op, package);
+ vector<string> args = getArgs(op);
+@@ -4303,15 +4338,26 @@
+ out << nl << "__initCurrent(__current, \"" << op->name() << "\", "
+ << sliceModeToIceMode(op->sendMode())
+ << ", __ctx);";
++ if(ret)
++ {
++ string resultTypeHolder = typeToString(ret, TypeModeOut, package, op->getMetaData());
++ out << nl << "final " << resultTypeHolder << " __ret = new " << resultTypeHolder << "();";
++ }
+ out << nl << "while(true)";
+ out << sb;
+- out << nl << "IceInternal.Direct __direct = new IceInternal.Direct(__current);";
+ out << nl << "try";
+ out << sb;
+- out << nl << fixKwd(name) << " __servant = null;";
++ out << nl << "IceInternal.Direct __direct = new IceInternal.Direct(__current);";
+ out << nl << "try";
+ out << sb;
++ out << nl << fixKwd(name) << " __servant = null;";
+ out << nl << "__servant = (" << fixKwd(name) << ")__direct.servant();";
++ out << nl;
++ if(ret)
++ {
++ out << "__ret.value = ";
++ }
++ out << "__servant." << opName << spar << args << "__current" << epar << ';';
+ out << eb;
+ out << nl << "catch(ClassCastException __ex)";
+ out << sb;
+@@ -4321,28 +4367,57 @@
+ out << nl << "__opEx.operation = __current.operation;";
+ out << nl << "throw __opEx;";
+ out << eb;
++ for(ExceptionList::const_iterator i = throws.begin(); i != throws.end(); ++i)
++ {
++ out << nl << "catch(" << getAbsolute(*i, package) << " __ex)";
++ out << sb;
++ out << nl << "throw __ex;";
++ out << eb;
++ }
++ out << nl << "catch(Throwable __ex)";
++ out << sb;
++ out << nl << "throw __ex;";
++ out << eb;
++ out << nl << "finally";
++ out << sb;
+ out << nl << "try";
+ out << sb;
+- out << nl;
+- if(ret)
++ out << nl << "__direct.destroy();";
++ out << eb;
++ for(ExceptionList::const_iterator i = throws.begin(); i != throws.end(); ++i)
+ {
+- out << "return ";
++ out << nl << "catch(" << getAbsolute(*i, package) << " __ex)";
++ out << sb;
++ out << nl << "throw __ex;";
++ out << eb;
+ }
+- out << "__servant." << opName << spar << args << "__current" << epar << ';';
+- if(!ret)
++ out << nl << "catch(Throwable __ex)";
++ out << sb;
++ out << nl << "throw __ex;";
++ out << eb;
++ out << eb;
++ out << eb;
++ for(ExceptionList::const_iterator i = throws.begin(); i != throws.end(); ++i)
+ {
+- out << nl << "return;";
++ out << nl << "catch(" << getAbsolute(*i, package) << " __ex)";
++ out << sb;
++ out << nl << "throw __ex;";
++ out << eb;
+ }
+- out << eb;
+- out << nl << "catch(Ice.LocalException __ex)";
++ out << nl << "catch(IceInternal.LocalExceptionWrapper __ex)";
+ out << sb;
+- out << nl << "throw new IceInternal.LocalExceptionWrapper(__ex, false);";
+- out << eb;
++ out << nl << "throw __ex;";
+ out << eb;
+- out << nl << "finally";
++ out << nl << "catch(Throwable __ex)";
+ out << sb;
+- out << nl << "__direct.destroy();";
++ out << nl << "IceInternal.LocalExceptionWrapper.throwUnknownWrapper(__ex);";
+ out << eb;
++ out << nl << "return";
++ if(ret)
++ {
++ out << " __ret.value";
++ }
++ out << ";";
+ out << eb;
+ }
+ out << eb;
+@@ -4620,11 +4695,19 @@
+ }
+ out << epar;
+
+- ExceptionList throws = op->throws();
+- throws.sort();
+- throws.unique();
+-
+- writeThrowsClause(package, throws);
++ if(op->hasMetaData("UserException"))
++ {
++ out.inc();
++ out << nl << "throws Ice.UserException";
++ out.dec();
++ }
++ else
++ {
++ ExceptionList throws = op->throws();
++ throws.sort();
++ throws.unique();
++ writeThrowsClause(package, throws);
++ }
+
+ out << sb;
+
+diff -ru ../Ice-3.2.1.orig/test/Ice/exceptions/AllTests.cpp ./test/Ice/exceptions/AllTests.cpp
+--- ../Ice-3.2.1.orig/test/Ice/exceptions/AllTests.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/exceptions/AllTests.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -914,22 +914,8 @@
+ thrower->throwUndeclaredA(1);
+ test(false);
+ }
+- catch(const A& ex)
+- {
+- //
+- // We get the original exception with collocation
+- // optimization.
+- //
+- test(collocated);
+- test(ex.aMem == 1);
+- }
+ catch(const Ice::UnknownUserException&)
+ {
+- //
+- // We get an unknown user exception without collocation
+- // optimization.
+- //
+- test(!collocated);
+ }
+ catch(...)
+ {
+@@ -941,23 +927,8 @@
+ thrower->throwUndeclaredB(1, 2);
+ test(false);
+ }
+- catch(const B& ex)
+- {
+- //
+- // We get the original exception with collocation
+- // optimization.
+- //
+- test(collocated);
+- test(ex.aMem == 1);
+- test(ex.bMem == 2);
+- }
+ catch(const Ice::UnknownUserException&)
+ {
+- //
+- // We get an unknown user exception without collocation
+- // optimization.
+- //
+- test(!collocated);
+ }
+ catch(...)
+ {
+@@ -969,24 +940,8 @@
+ thrower->throwUndeclaredC(1, 2, 3);
+ test(false);
+ }
+- catch(const C& ex)
+- {
+- //
+- // We get the original exception with collocation
+- // optimization.
+- //
+- test(collocated);
+- test(ex.aMem == 1);
+- test(ex.bMem == 2);
+- test(ex.cMem == 3);
+- }
+ catch(const Ice::UnknownUserException&)
+ {
+- //
+- // We get an unknown user exception without
+- // collocation optimization.
+- //
+- test(!collocated);
+ }
+ catch(...)
+ {
+@@ -1065,22 +1020,14 @@
+ thrower->throwLocalException();
+ test(false);
+ }
+- catch(const Ice::TimeoutException&)
+- {
+- //
+- // We get the original exception with collocation
+- // optimization.
+- //
+- test(collocated);
+- }
+ catch(const Ice::UnknownLocalException&)
+ {
+- //
+- // We get an unknown local exception without collocation
+- // optimization.
+- //
+ test(!collocated);
+ }
++ catch(const Ice::TimeoutException&)
++ {
++ test(collocated);
++ }
+ catch(...)
+ {
+ test(false);
+@@ -1097,19 +1044,10 @@
+ }
+ catch(const Ice::UnknownException&)
+ {
+- //
+- // We get an unknown exception without collocation
+- // optimization.
+- //
+- assert(!collocated);
+ }
+ catch(...)
+ {
+- //
+- // We get the original exception with collocation
+- // optimization.
+- //
+- assert(collocated);
++ test(false);
+ }
+
+ cout << "ok" << endl;
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/AllTests.cpp ./test/Ice/servantLocator/AllTests.cpp
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/AllTests.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/AllTests.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+@@ -33,6 +33,10 @@
+ test(ex.operation == "requestFailedException");
+ }
+ }
++ catch(...)
++ {
++ test(false);
++ }
+
+ try
+ {
+@@ -43,6 +47,10 @@
+ {
+ test(ex.unknown == "reason");
+ }
++ catch(...)
++ {
++ test(false);
++ }
+
+ try
+ {
+@@ -71,13 +79,11 @@
+ }
+ catch(const UnknownUserException& ex)
+ {
+- //cerr << ex.unknown << endl;
+- test(!collocated);
+ test(ex.unknown == "Test::TestIntfUserException");
+ }
+- catch(const TestIntfUserException&)
++ catch(...)
+ {
+- test(collocated);
++ test(false);
+ }
+
+ try
+@@ -87,7 +93,6 @@
+ }
+ catch(const UnknownLocalException& ex)
+ {
+- //cerr << ex.unknown << endl;
+ test(!collocated);
+ test(ex.unknown.find("Ice::SocketException:\nsocket exception: unknown error") != string::npos);
+ }
+@@ -95,6 +100,10 @@
+ {
+ test(collocated);
+ }
++ catch(...)
++ {
++ test(false);
++ }
+
+ try
+ {
+@@ -103,13 +112,11 @@
+ }
+ catch(const UnknownException& ex)
+ {
+- //cerr << ex.unknown << endl;
+- test(!collocated);
+ test(ex.unknown == "std::exception: Hello");
+ }
+- catch(const std::runtime_error&)
++ catch(...)
+ {
+- test(collocated);
++ test(false);
+ }
+
+ try
+@@ -119,13 +126,11 @@
+ }
+ catch(const UnknownException& ex)
+ {
+- //cerr << ex.unknown << endl;
+- test(!collocated);
+ test(ex.unknown == "unknown c++ exception");
+ }
+- catch(const int&)
++ catch(...)
+ {
+- test(collocated);
++ test(false);
+ }
+
+ try
+@@ -137,6 +142,66 @@
+ {
+ test(ex.unknown == "reason");
+ }
++ catch(...)
++ {
++ test(false);
++ }
++
++ try
++ {
++ obj->impossibleException(false);
++ test(false);
++ }
++ catch(const UnknownUserException&)
++ {
++ // Operation doesn't throw, but locate() and finshed() throw TestIntfUserException.
++ }
++ catch(...)
++ {
++ test(false);
++ }
++
++ try
++ {
++ obj->impossibleException(true);
++ test(false);
++ }
++ catch(const UnknownUserException&)
++ {
++ // Operation doesn't throw, but locate() and finshed() throw TestIntfUserException.
++ }
++ catch(...)
++ {
++ test(false);
++ }
++
++ try
++ {
++ obj->intfUserException(false);
++ test(false);
++ }
++ catch(const TestImpossibleException&)
++ {
++ // Operation doesn't throw, but locate() and finished() throw TestImpossibleException.
++ }
++ catch(...)
++ {
++ test(false);
++ }
++
++ try
++ {
++ obj->intfUserException(true);
++ test(false);
++ }
++ catch(const TestImpossibleException&)
++ {
++ // Operation throws TestIntfUserException, but locate() and finished() throw TestImpossibleException.
++ }
++ catch(...)
++ {
++ test(false);
++ }
+ }
+
+ TestIntfPrx
+@@ -151,6 +216,39 @@
+ TestIntfPrx obj = TestIntfPrx::checkedCast(base);
+ test(obj);
+ test(obj == base);
++
++ cout << "ok" << endl;
++
++ cout << "testing ice_ids... " << flush;
++ try
++ {
++ ObjectPrx obj = communicator->stringToProxy("category/locate:default -p 12010 -t 10000");
++ obj->ice_ids();
++ test(false);
++ }
++ catch(const UnknownUserException& ex)
++ {
++ test(ex.unknown == "Test::TestIntfUserException");
++ }
++ catch(...)
++ {
++ test(false);
++ }
++
++ try
++ {
++ ObjectPrx obj = communicator->stringToProxy("category/finished:default -p 12010 -t 10000");
++ obj->ice_ids();
++ test(false);
++ }
++ catch(const UnknownUserException& ex)
++ {
++ test(ex.unknown == "Test::TestIntfUserException");
++ }
++ catch(...)
++ {
++ test(false);
++ }
+ cout << "ok" << endl;
+
+ cout << "testing servant locator..." << flush;
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Client.cpp ./test/Ice/servantLocator/Client.cpp
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/Client.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/Client.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Collocated.cpp ./test/Ice/servantLocator/Collocated.cpp
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/Collocated.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/Collocated.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Makefile ./test/Ice/servantLocator/Makefile
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/Makefile 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/Makefile 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ # **********************************************************************
+ #
+-# Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ #
+ # This copy of Ice is licensed to you under the terms described in the
+ # ICE_LICENSE file included in this distribution.
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/ServantLocatorI.cpp ./test/Ice/servantLocator/ServantLocatorI.cpp
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/ServantLocatorI.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/ServantLocatorI.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+@@ -8,6 +8,7 @@
+ // **********************************************************************
+
+ #include <ServantLocatorI.h>
++#include <Test.h>
+ #include <TestCommon.h>
+
+ #include <stdexcept>
+@@ -74,7 +75,11 @@
+ void
+ ServantLocatorI::exception(const Ice::Current& current)
+ {
+- if(current.operation == "requestFailedException")
++ if(current.operation == "ice_ids")
++ {
++ throw TestIntfUserException();
++ }
++ else if(current.operation == "requestFailedException")
+ {
+ throw Ice::ObjectNotExistException(__FILE__, __LINE__);
+ }
+@@ -110,4 +115,12 @@
+ {
+ throw UnknownException(__FILE__, __LINE__, "reason");
+ }
++ else if(current.operation == "impossibleException")
++ {
++ throw TestIntfUserException(); // Yes, it really is meant to be TestIntfUserException.
++ }
++ else if(current.operation == "intfUserException")
++ {
++ throw TestImpossibleException(); // Yes, it really is meant to be TestImpossibleException.
++ }
+ }
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/ServantLocatorI.h ./test/Ice/servantLocator/ServantLocatorI.h
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/ServantLocatorI.h 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/ServantLocatorI.h 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Server.cpp ./test/Ice/servantLocator/Server.cpp
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/Server.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/Server.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/ServerAMD.cpp ./test/Ice/servantLocator/ServerAMD.cpp
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/ServerAMD.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/ServerAMD.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/Test.ice ./test/Ice/servantLocator/Test.ice
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/Test.ice 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/Test.ice 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+@@ -17,6 +17,10 @@
+ {
+ };
+
++exception TestImpossibleException
++{
++};
++
+ interface TestIntf
+ {
+ void requestFailedException();
+@@ -29,6 +33,9 @@
+ void cppException();
+
+ void unknownExceptionWithServantException();
++
++ string impossibleException(bool throw) throws TestImpossibleException;
++ string intfUserException(bool throw) throws TestIntfUserException, TestImpossibleException;
+
+ void shutdown();
+ };
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMD.ice ./test/Ice/servantLocator/TestAMD.ice
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMD.ice 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/TestAMD.ice 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+@@ -17,6 +17,10 @@
+ {
+ };
+
++exception TestImpossibleException
++{
++};
++
+ ["amd"] interface TestIntf
+ {
+ void requestFailedException();
+@@ -27,9 +31,12 @@
+ void userException();
+ void stdException();
+ void cppException();
+-
++
+ void unknownExceptionWithServantException();
+
++ string impossibleException(bool throw) throws TestImpossibleException;
++ string intfUserException(bool throw) throws TestIntfUserException, TestImpossibleException;
++
+ void shutdown();
+ };
+
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMDI.cpp ./test/Ice/servantLocator/TestAMDI.cpp
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMDI.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/TestAMDI.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+@@ -69,6 +69,41 @@
+ }
+
+ void
++TestAMDI::impossibleException_async(const Test::AMD_TestIntf_impossibleExceptionPtr& cb, bool _cpp_throw,
++ const Current&)
++{
++ if(_cpp_throw)
++ {
++ cb->ice_exception(Test::TestImpossibleException());
++ }
++ else
++ {
++ //
++ // Return a value so we can be sure that the stream position
++ // is reset correctly if finished() throws.
++ //
++ cb->ice_response("Hello");
++ }
++}
++
++void
++TestAMDI::intfUserException_async(const Test::AMD_TestIntf_intfUserExceptionPtr& cb, bool _cpp_throw, const Current&)
++{
++ if(_cpp_throw)
++ {
++ cb->ice_exception(Test::TestIntfUserException());
++ }
++ else
++ {
++ //
++ // Return a value so we can be sure that the stream position
++ // is reset correctly if finished() throws.
++ //
++ cb->ice_response("Hello");
++ }
++}
++
++void
+ TestAMDI::shutdown_async(const Test::AMD_TestIntf_shutdownPtr& cb, const Current& current)
+ {
+ current.adapter->deactivate();
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMDI.h ./test/Ice/servantLocator/TestAMDI.h
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestAMDI.h 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/TestAMDI.h 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+@@ -25,7 +25,11 @@
+ virtual void stdException_async(const Test::AMD_TestIntf_stdExceptionPtr&, const Ice::Current&);
+ virtual void cppException_async(const Test::AMD_TestIntf_cppExceptionPtr&, const Ice::Current&);
+
+- virtual void unknownExceptionWithServantException_async(const Test::AMD_TestIntf_unknownExceptionWithServantExceptionPtr&, const Ice::Current&);
++ virtual void unknownExceptionWithServantException_async(
++ const Test::AMD_TestIntf_unknownExceptionWithServantExceptionPtr&, const Ice::Current&);
++
++ virtual void impossibleException_async(const Test::AMD_TestIntf_impossibleExceptionPtr&, bool, const Ice::Current&);
++ virtual void intfUserException_async(const Test::AMD_TestIntf_intfUserExceptionPtr&, bool, const Ice::Current&);
+
+ virtual void shutdown_async(const Test::AMD_TestIntf_shutdownPtr&, const Ice::Current&);
+ };
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestI.cpp ./test/Ice/servantLocator/TestI.cpp
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestI.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/TestI.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+@@ -60,6 +60,34 @@
+ throw Ice::ObjectNotExistException(__FILE__, __LINE__);
+ }
+
++string
++TestI::impossibleException(bool _cpp_throw, const Current&)
++{
++ if(_cpp_throw)
++ {
++ throw Test::TestImpossibleException();
++ }
++ //
++ // Return a value so we can be sure that the stream position
++ // is reset correctly if finished() throws.
++ //
++ return "Hello";
++}
++
++string
++TestI::intfUserException(bool _cpp_throw, const Current&)
++{
++ if(_cpp_throw)
++ {
++ throw Test::TestIntfUserException();
++ }
++ //
++ // Return a value so we can be sure that the stream position
++ // is reset correctly if finished() throws.
++ //
++ return "Hello";
++}
++
+ void
+ TestI::shutdown(const Current& current)
+ {
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/TestI.h ./test/Ice/servantLocator/TestI.h
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/TestI.h 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/TestI.h 2007-12-20 12:16:29.000000000 -0800
+@@ -1,6 +1,6 @@
+ // **********************************************************************
+ //
+-// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ //
+ // This copy of Ice is licensed to you under the terms described in the
+ // ICE_LICENSE file included in this distribution.
+@@ -27,6 +27,9 @@
+
+ virtual void unknownExceptionWithServantException(const Ice::Current&);
+
++ virtual ::std::string impossibleException(bool, const Ice::Current&);
++ virtual ::std::string intfUserException(bool, const Ice::Current&);
++
+ virtual void shutdown(const Ice::Current&);
+ };
+
+diff -ru ../Ice-3.2.1.orig/test/Ice/servantLocator/run.py ./test/Ice/servantLocator/run.py
+--- ../Ice-3.2.1.orig/test/Ice/servantLocator/run.py 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/servantLocator/run.py 2007-12-20 12:16:29.000000000 -0800
+@@ -1,7 +1,7 @@
+ #!/usr/bin/env python
+ # **********************************************************************
+ #
+-# Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
++# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+ #
+ # This copy of Ice is licensed to you under the terms described in the
+ # ICE_LICENSE file included in this distribution.
+diff -ru ../Ice-3.2.1.orig/test/Ice/threads/TestI.cpp ./test/Ice/threads/TestI.cpp
+--- ../Ice-3.2.1.orig/test/Ice/threads/TestI.cpp 2007-08-08 12:00:54.000000000 -0700
++++ ./test/Ice/threads/TestI.cpp 2007-12-20 12:16:29.000000000 -0800
+@@ -167,6 +167,11 @@
+ {
+ // Expected.
+ }
++ catch(const Ice::Exception& ex)
++ {
++ cerr << ex << endl;
++ test(false);
++ }
+
+ Test::AdapterPrx proxy2 =
+ Test::AdapterPrx::uncheckedCast(proxy->ice_threadPerConnection(!proxy->ice_isThreadPerConnection()));
Deleted: trunk/dports/devel/ice-cpp/files/patch-config.Make.rules
===================================================================
--- trunk/dports/devel/ice-cpp/files/patch-config.Make.rules 2008-02-11 03:34:36 UTC (rev 34043)
+++ trunk/dports/devel/ice-cpp/files/patch-config.Make.rules 2008-02-11 03:49:47 UTC (rev 34044)
@@ -1,15 +0,0 @@
---- config/Make.rules.FCS 2007-03-08 15:16:54.000000000 -0800
-+++ config/Make.rules 2007-04-08 09:32:33.000000000 -0700
-@@ -180,9 +180,9 @@
- BZIP2_RPATH_LINK = $(if $(BZIP2_HOME),$(call rpathlink,$(BZIP2_HOME)/$(libsubdir)))
-
- ifneq ($(DB_HOME),)
-- DB_FLAGS = -I$(DB_HOME)/include
-- DB_LIBS = -L$(DB_HOME)/$(libsubdir) -ldb_cxx
-- DB_RPATH_LINK = $(call rpathlink,$(DB_HOME)/$(libsubdir))
-+ DB_FLAGS = -I$(DB_HOME)/include/db45
-+ DB_LIBS = -L$(DB_HOME)/$(libsubdir)/db45 -ldb_cxx
-+ DB_RPATH_LINK = $(call rpathlink,$(DB_HOME)/$(libsubdir)/db45)
- else
- ifeq ($(shell if [ -d /usr/include/db45 -a -d /usr/$(libsubdir)/db45 ] ; then echo yes; fi), yes)
- DB_FLAGS = -I/usr/include/db45
Deleted: trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin
===================================================================
--- trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin 2008-02-11 03:34:36 UTC (rev 34043)
+++ trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin 2008-02-11 03:49:47 UTC (rev 34044)
@@ -1,19 +0,0 @@
---- config/Make.rules.Darwin.FCS 2007-01-30 05:42:20.000000000 -0800
-+++ config/Make.rules.Darwin 2007-04-08 12:18:15.000000000 -0700
-@@ -11,7 +11,7 @@
- # This file is included by Make.rules when uname is Darwin.
- #
-
--CXX = c++
-+CXX ?= c++
-
- CXXFLAGS = -ftemplate-depth-128 -Wall -D_REENTRANT
-
-@@ -55,6 +55,6 @@
- ICEUTIL_OS_LIBS = -lpthread
- ICE_OS_LIBS = -ldl
-
--PLATFORM_HAS_READLINE := no
-+PLATFORM_HAS_READLINE := yes
-
- export DYLD_LIBRARY_PATH := $(libdir):$(DYLD_LIBRARY_PATH)
Copied: trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin.diff (from rev 34039, trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin)
===================================================================
--- trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin.diff (rev 0)
+++ trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.Darwin.diff 2008-02-11 03:49:47 UTC (rev 34044)
@@ -0,0 +1,19 @@
+--- config/Make.rules.Darwin.FCS 2007-01-30 05:42:20.000000000 -0800
++++ config/Make.rules.Darwin 2007-04-08 12:18:15.000000000 -0700
+@@ -11,7 +11,7 @@
+ # This file is included by Make.rules when uname is Darwin.
+ #
+
+-CXX = c++
++CXX ?= c++
+
+ CXXFLAGS = -ftemplate-depth-128 -Wall -D_REENTRANT
+
+@@ -55,6 +55,6 @@
+ ICEUTIL_OS_LIBS = -lpthread
+ ICE_OS_LIBS = -ldl
+
+-PLATFORM_HAS_READLINE := no
++PLATFORM_HAS_READLINE := yes
+
+ export DYLD_LIBRARY_PATH := $(libdir):$(DYLD_LIBRARY_PATH)
Copied: trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.diff (from rev 34039, trunk/dports/devel/ice-cpp/files/patch-config.Make.rules)
===================================================================
--- trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.diff (rev 0)
+++ trunk/dports/devel/ice-cpp/files/patch-config.Make.rules.diff 2008-02-11 03:49:47 UTC (rev 34044)
@@ -0,0 +1,15 @@
+--- config/Make.rules.FCS 2007-03-08 15:16:54.000000000 -0800
++++ config/Make.rules 2007-04-08 09:32:33.000000000 -0700
+@@ -180,9 +180,9 @@
+ BZIP2_RPATH_LINK = $(if $(BZIP2_HOME),$(call rpathlink,$(BZIP2_HOME)/$(libsubdir)))
+
+ ifneq ($(DB_HOME),)
+- DB_FLAGS = -I$(DB_HOME)/include
+- DB_LIBS = -L$(DB_HOME)/$(libsubdir) -ldb_cxx
+- DB_RPATH_LINK = $(call rpathlink,$(DB_HOME)/$(libsubdir))
++ DB_FLAGS = -I$(DB_HOME)/include/db45
++ DB_LIBS = -L$(DB_HOME)/$(libsubdir)/db45 -ldb_cxx
++ DB_RPATH_LINK = $(call rpathlink,$(DB_HOME)/$(libsubdir)/db45)
+ else
+ ifeq ($(shell if [ -d /usr/include/db45 -a -d /usr/$(libsubdir)/db45 ] ; then echo yes; fi), yes)
+ DB_FLAGS = -I/usr/include/db45
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20080210/c6e6a5ec/attachment-0001.html
More information about the macports-changes
mailing list