On 06/06/2012 11:04 PM, Lars T. Kyllingstad wrote:
On Wednesday, 6 June 2012 at 19:27:31 UTC, Timon Gehr wrote:
On 06/06/2012 07:18 PM, Lars T. Kyllingstad wrote:
Besides OutOfMemoryError, I can only think of two other Errors that
would make this a hassle: AssertError and RangeError. However, both of
these signify problems with the program logic, and unwinding the stack
is probably a bad idea anyway, so why not simply make these abort()?

-Lars


In the current implementation, in contract checking may catch
AssertErrors and resume the program normally.

I'm not sure I understand what you mean. Are you suggesting catching
AssertErrors thrown by in contracts, thereby using contracts as a means
of checking input? If so, I would say you are using contracts in the
wrong way.

-Lars


I was not describing an usage pattern. This is built-in behaviour.

int throwAssertError(){
    writeln("now throwing an AssertError");
    throw new AssertError("!");
}

class C{
    void foo()in{throwAssertError();}body{}
}
class D: C{
    override void foo()in{}body{}
}

void main(){
    C c = new D;
    c.foo(); // assert error thrown and caught
}

Reply via email to