On Wed, 29 Jun 2005 15:59:08 +0100
Phil Thompson <[EMAIL PROTECTED]> wrote:

> > sip command passes without error, but I have an error when linking:
> > $OFILES in Makefile contains sipMyModuleMyException.o, while there is no
> > corresponding .cpp file generated.
> >
> > BTW, when I use throw specifier in method signature without
> > corresponding %Exception directive, sip exits with non-zero code, but
> > reports no error message.
> >
> > All tests were done with sip-snapshot-20050626.
> 
> Should be fixed in tonight's snapshot.

Simple examples work like a charm with sip-snapshot-20050629, thanks!
There are some points to discuss: 

1) If sipExceptionRef is not used in RaiseCode we'll get a warning. 

2) Exceptions that were not specified in throw are not caught and I see
no way to add "catch(...)" to generated code.

3) throw specifier has no effect on generated code when %MethodCode is
used, shouldn't it?

4) There are several standard exceptions which I always have to catch. 
Now I have a macro for them:

#define CATCH_STD_EXCEPTIONS \
    catch (std::bad_alloc&) {\
        PyErr_NoMemory(); \
        sipIsErr = 1; \
    } catch (std::exception &exc) {\
        PyErr_SetString(PyExc_RuntimeError, exc.what()); \
        sipIsErr = 1; \
    } catch (...) {\
        PyErr_SetString(PyExc_RuntimeError, "unknown"); \
        sipIsErr = 1; \
    }

used in %MethodCode:

%MethodCode
    try {
        sipRes = someMethod(...);
    } CATCH_STD_EXCEPTIONS // sipIsErr - this comment is important hint to SIP!
%End

-- 
Denis S. Otkidach
http://www.python.ru/      [ru]

_______________________________________________
PyKDE mailing list    PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to