On 5/25/13 8:38 PM, Peter Williams wrote:
For some class methods, to express comprehensive out{} contracts it is
necessary to be able to refer to the state of the class object before
the operation as well as after it e.g. if the method adds something to a
container you need to be able to specify that nothing was accidentally
deleted from the container during the method. I've scoured the language
specification and Andrei's book for advice on how to do this without any
luck.
Can it be done and, if so, how?
Thanks
Peter
Unfortunately we don't have a solution to that. A while ago I proposed
that the "in" and "out" contracts share the same scope. That would allow
us to do:
class A {
void fun()
in { auto oldLen = this.length; }
out { assert(this.length == oldLen + 1); }
body { ... }
}
That was technically difficult to do back then, and fell by the wayside.
Today it would break too much code to introduce even if feasible.
Andrei