This currently says "one, two", but it should say "one, two, four"
We would have to treat explicit rings differently from the implicit rings made by C-slots. Our STOP design is based on the case
(leaving out the unnecessary details), all inside a custom block. It's clear in this case, I think, that the user's intent is to stop their custom block, not to stop one iteration of the FOR. (This was back when FOR was a custom block rather than a primitive. But we want to stop the innermost custom block for which the STOP is part of its definition.)
There are many things STOP THIS BLOCK could mean, but we picked the one most likely for a naive user, who by definition isn't using explicit rings. The non-naive user can use CATCH and THROW to get precisely the effect they want.
You would need to make rings different from C-mouths if you change it, but I think that that is better than making rings different from custom blocks. In either case, however, report should be the same as stop block, and it isn't.
No, I don't think that's right. It sounds in the abstract like a good principle, but in fact REPORT has to find the innermost reporter context to report from.
I mean, maybe it's time for us to revisit this topic, but we struggled long and hard to come up with an algorithm that would do what the user means in the common cases.