Shortcut evaluation for hierarchy of in contracts
Jens Mueller
jens.k.mueller at gmx.de
Thu Jun 30 23:39:29 PDT 2011
Robert Jacques wrote:
> On Thu, 30 Jun 2011 06:42:57 -0400, Jens Mueller
> <jens.k.mueller at gmx.de> wrote:
>
> >bearophile wrote:
> >>Jens Mueller:
> >>
> >>> unittest {
> >>> class Base {
> >>> void foo(uint i)
> >>> in { assert(i <= 10); }
> >>> body { }
> >>> }
> >>>
> >>> class Sub : Base {
> >>> override void foo(uint i)
> >>> in { assert(i <= 5); } // fails to require less
> >>but I won't know
> >>> body
> >>> {
> >>> assert(i <= 5); // fails here because in contract
> >>wasn't checked
> >>> }
> >>> }
> >>>
> >>> auto s = new Sub;
> >>> //s.foo(10); // fails as expected
> >>> s.foo(7); // due to shortcut evaluation of in contracts
> >>this call passes all contracts
> >>> }
> >>
> >>I think it's a DMD bug, fit for Bugzilla if not already present.
> >
> >The shortcut evaluation is specified in TDPL. That's why I assume the
> >behavior is intended.
> >
> >Jens
>
> A subclass must be able to handle all the inputs the base class
> accepts, otherwise it isn't true polymorphism anymore. Not being
> able to use Sub where Base is expected, and maybe only Base was
> tested, can lead to major bugs.
So you agree that the current behavior is error-prone?
Jens
More information about the Digitalmars-d
mailing list