> On Mon, 6 Jun 2005 17:54:43 +0100 > Phil Thompson <[EMAIL PROTECTED]> wrote: > >> SIP's exception support was added by a user - I've never used it myself. >> Suggestions for improvements always welcome. > > I see the following scenario. User creates exception class and expose > it in module namespace (Please correct me if there is a better way): > > %ModuleCode > static PyObject *MyException_object; > %End > > %PostInitialisationCode > MyException_object = PyErr_NewException("MyModule.MyException", 0, 0); > if (!MyException_object) return; > PyDict_SetItemString(sip_mdict, "MyException", MyException_object); > %End > > Then he has to define one way mapping for it (assuming MyException has > the same interface as std::exception): > > %MappedType MyException > { > > %ConvertFromTypeCode > return PyObject_CallFunction(MyException_object, "S", sipCpp->what()); > %End > > %ConvertToTypeCode > // We don't need backward convertion, but SIP requires it. > *sipIsErr = 1; > return 0; > %End > > };
So if I introduce something like... %ExceptionType MyException %TypeHeaderCode #include <whatever> %End %ConvertFromTypeCode // C++ code to return a PyObject instance of the exception. // sipCpp (the C++ poiter) and sipException_MyException (the // PyObject exception type) will be available, eg... return PyObject_CallFunction(sipException_MyException, "S", sipCpp->what()); %End %End ...that has the same effect as your code above. > That's all. Now generated code for method with signature > "void error() throw (MyException);" should be equivalent to > something like the following: > > try > { > sipCpp -> Test::error(); > } > catch (MyException &e) > { > PyObject *MyException_instance = ... // %ConvertFromTypeCode > PyObject *MyException_object = > PyObject_Type(MyException_instance); > PyErr_SetObject(MyException_object, MyException_instance); > return NULL; > } ...and generate the above code automatically, then that gives you what you want? If MyException isn't defined then it reverts to the current behaviour. Phil _______________________________________________ PyKDE mailing list PyKDE@mats.imk.fraunhofer.de http://mats.imk.fraunhofer.de/mailman/listinfo/pykde