Communicating between in and out contracts
Kagamin
spam at here.lot
Thu Oct 15 01:28:09 PDT 2009
Chris Nicholson-Sauls Wrote:
> How hard would it be to do something like this: collect any local variables declared in
> the precondition into a structure, and make that structure transparently available to the
> postcondition. So your push case above gets rewritten to something like this:
>
> __magic_tmp = {
> typeof( length() ) oldLength;
> }
> in {
> __magic_tmp.oldLength = length();
> }
> out {
> assert(value == top());
> assert(length == __magic_tmp.oldLength + 1);
> }
We have so many nifty keywords in D, I can't stand against abusing them (contracts already do it).
void push(T value);
shared {
typeof(length()) oldLength;
}
in {
oldLength = length();
}
out {
assert(value == top());
assert(length == oldLength + 1);
}
More information about the Digitalmars-d
mailing list