// incdec.oad - test increment/decrement operators // Of note - the following fragment: // // x++ // // is actually treated like this for overloaded ++/--: // // var $tmp = x; // x = $tmp.operator ++(); // // Therefore, in general, the ++/-- operators should return a new object // derived from the current object, appropriately incremented or decremented // This is just a guideline, though. Programs can have side effects if // they desire. One interesting side effect might be to have a semaphore // class where ++ locks the semaphore and -- unlocks it. For this kind // of implementation, the operator should return self class incdec { var v; public proc create(n) {v = n;} operator ++ () {var vv = v; vv++; return new incdec(vv);} operator -- () {var vv = v; vv--; return new incdec(vv);} operator => (typ) {assert typ == String; return v=>String;} } proc main() { var a = new incdec(3 .iterate()); "a: ", String(a), '\n'; a++; "a: ", String(a), '\n'; a--; "a: ", String(a), '\n'; // Showing the equivalency of the shortcut syntax and the call syntax a = a.operator --(a); "a: ", String(a), '\n'; }