Iain Buclaw wrote:
When it comes to using goto in D, the behaviour seems to be that you cannot 
enter a try block, and neither can you enter or exit from a
finally block.

What about catch blocks? It seems that there is no restrictions imposed on 
them, meaning that the following is legal.


void main()
{
    goto in_catch;
    try
    {
        throw new Exception("msg");
    }
    catch (Exception e)
    {
  in_catch:
         throw e;
    }
}


As strongly as I feel that goto into catch blocks shouldn't be allowed, is this 
the intended behaviour of the language? If so, why?

Obviously that code should be rejected -- what would be thrown?
I think there's no intrinisic problem with a goto into a catch block, but in practice, it might as well be rejected, because it almost always involves bypassing a variable declaration. The spec says
"It is illegal for a GotoStatement to be used to skip initializations. "
though at present the compiler doesn't enforce this.

I would have thought that a finally block would be OK, but the spec says:
"A FinallyStatement may not exit with a goto, break, continue, or return; nor may it be entered with a goto."
So presumably going into a catch block is also supposed to be illegal.

Reply via email to