[Mono-list] exceptions and ECMA issues
James Perry
jeperry@uwaterloo.ca
Wed, 22 Aug 2001 00:38:54 +0000 (GMT)
On Tue, 21 Aug 2001, Paolo Molaro wrote:
> 2) rethrow opcode. It is not clear where the search for an handler
> should begin after a rethrow: should it start from the beginning,
> from the last handler found or from the parent method?
> Consider:
>
>>>SNIP<<<
>
> Restarting from the beginning will result in an infinite loop,
> so, what other option should I choose?
>
The sensible solution, IMHO, is to go to the next enclosing try block, not
the next catch handler.
First, the specs:
Part III, 3.23, lines 7-9:
... It throws the same exception that was caught by this handler.
My interpretation is that this should be treated exactly like a
traditional throw - catch blocks aren't within protected try blocks so the
exception should go to the next highest-level try{} block.
Secondly, the principle of least astonishment:
If rethrow goes up to the previous method then it will always go to the
next method - you can get around this behaviour if you want by writing
type-smart catch handlers, but that's really got to be intended behaviour.
If rethrow goes to the next catch block for the same try{}, and one of
your catch handlers wants an interface, you really have no clue where it's
going to go unless you do a lot of work trying to figure that out.
rethrowing to the parent method is the least astonishing, so it should be
the behaviour implemented.
- James