The following two snippets are, as far as I am aware, equivalent:
I'm not completely sure this is intentional, but it has some quirks that make it useful in some very specific cases, and (other than some weird stuff with execution order) doesn't seem to cause any problems. However, this also compiles:
In this exact case, it's functionally equivalent to the above examples, but has a number of problems with things I didn't include. It does not work with goto, but does work with call(), and can also be called like a normal proc, but only when absolutely pathed, for some reason. Also it just utterly ruins variable scope. (Attempting to use a variable from the "parent" proc causes a runtime, and declaring a new variable with the same name as one in the "parent" causes it to not compile.)
The above nonsense
Did the problem NOT occur in any earlier versions? If so, what was the last version that worked? (Visit http://www.byond.com/download/build to download old versions for testing.)
Not tested, but I haven't seen any recent relevant changes.