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