should postconditions be evaluated even if Exception is thrown?

Denis Koroskin 2korden at gmail.com
Fri Dec 4 05:52:09 PST 2009


On Fri, 04 Dec 2009 16:13:53 +0300, Michal Minich  
<michal.minich at gmail.com> wrote:

> Hello Michel,
>
>>> 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.
>
> Yes, you could provide more specific error message (or maybe throw more  
> specific exception), but I'm not sure how useful is this.
>
> I'm also not sure about how some specifics should work:
>
> currently, it is not allowed to throw Exception from postcondition, it  
> is only possible to throw Error (assert). Should it be possible to throw  
> Exception from error handling postcondition or not?
>

Yes (it's already allowed in DMD trunk).

> If exception handling postcondition is empty (or does not throw any  
> Error or Exception), should the exception throw in body be suppressed or  
> not? If you throw in postcondition, what to do with Exception throw in  
> body ?
>

I guess that's what exception chaining is for.



More information about the Digitalmars-d mailing list