Shortcut evaluation for hierarchy of in contracts

David Nadlinger see at klickverbot.at
Sat Jul 2 17:27:32 PDT 2011


On 7/3/11 1:16 AM, Timon Gehr wrote:
> Andrei Alexandrescu wrote:
>> On 7/1/11 6:32 PM, Robert Jacques wrote:
>>> No. I think the current behavior is correct. In fact, if anything, D
>>> shouldn't allow you to define an in contract on any override method. A
>>> Sub is a Base and therefore must be able to handle all inputs that are
>>> valid for a Base.
>>
>> That is a sensible enhancement.
>>
>> Andrei
>
> How so? The child class should still be able to take more general inputs than the
> parent: by specifying an in contract on an override method.
> How would you reach that goal otherwise?
>
> Timon

In any case, I consider the current implementation buggy, as having no 
in contract in the superclass is different from having an empty in 
contract there:

---
class Foo {
   void baz(int i) {}
}

class Bar : Foo {
   override void baz(int i) in {
     assert(i < 5, "I am triggered, but should not be.");
   } body {
     assert(i < 5, "I should be triggered instead of the contract.");
   }
}

void main() {
   auto bar = new Bar;
   bar.baz(6);
}
---

David


More information about the Digitalmars-d mailing list