Output contract's arguements

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Sep 19 10:25:37 PDT 2013


On 9/19/13 7:31 AM, Peter Alexander wrote:
> On Thursday, 19 September 2013 at 13:55:54 UTC, monarch_dodra wrote:
>> I want to calculate the msb, and in the out contract, I want to
>> validate it is correct, by comparing it with what the input was.
>>
>> In this case, this doesn't really work, since the input was "consumed".
>
> Ok, so you need this v.old that I believe other languages have. I don't
> think re-using v to mean the previous value of it would be a good idea.
> It's useful sometimes to check the final value of v on function exit too.

Well I have bad news. Consider:

interface A
{
     void fun(int x) out { assert(x == 42); }
}

class B : A
{
     void fun(int x) { x = 42; }
}

void main()
{
     A a = new B;
     a.fun(0);
}

This fails at run time, meaning in this particular case x will have the 
value before the call.


Andrei


More information about the Digitalmars-d mailing list