Shortcut evaluation for hierarchy of in contracts

Robert Jacques sandford at jhu.edu
Thu Jun 30 20:58:00 PDT 2011


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.


More information about the Digitalmars-d mailing list