This code will compile
var/atom/A = new(loc) A++
Byond will happily compile this, and then when you run it, your A will silently be replaced by a 1, and everything after that tries to treat this A as an atom will runtime.
To add insult to injury, we tried the following
//HERES A LITTLE LESSON IN TRICKERY /datum/proc/operator+() stack_trace("With this operators's use, the thread of prophecy is severed. Restore a saved code to restore the weave of fate, or persist in the doomed world you have created.") del(world) /datum/proc/operator-() stack_trace("With this operators's use, the thread of prophecy is severed. Restore a saved code to restore the weave of fate, or persist in the doomed world you have created.") del(world)
And it didn't even appear to affect what the ++ operator does at all
This is wildly confusing behavior, and it's all too easy to accidentally have a brain jam and do ++ on the wrong var and causes all sorts of hard to trace runtimes
At the very least, let us override the ++ and -- operators for datums so we can do what we want above.
http://www.byond.com/docs/notes/512.html Additionally, the ++ and -- operator overloads were not properly documented.
Assuming these work like I expect I believe we can close this