On 2009-12-04 04:11:22 -0500, Michal Minich <[email protected]> said:

Hello Andrei,

The way I was thinking of it is:

int f()
out(result) { }
out(Exception e) { }
body { }
So you have a chance to assert what the world looks like in case you
plan on returning a result, and what the world looks like if an
exception is emerging from the function.

So checked exceptions - this is not.

Andrei


if the function which throws exception is pure, then there is no world invariant to hold on after function exits (only return value is to be checked on success). Is there reason to have out(Exception ex) {} postcondition for pure function, or it should be compile time error to specify one?

Well you could still assert something about the exception:

        out (LoginException ex) { assert(ex.errorDescription != ""); }

So, although I can't really find an example that looks useful, someone might and I don't think it should be disallowed.


Similarly, when function is nothrow or when is not marked pure but does not make any side effect either.

In a nothrow function it certainly does not make sense have contracts for exceptions since none can be thrown. The only reasonable thing you could do in one is this:

        out (Exception e) { assert(false); }

But since the compiler can statically check that no exception can be thrown it's dead code anyway... unless someone cast a function that throws as nothrow.


--
Michel Fortin
[email protected]
http://michelf.com/

Reply via email to