[Mono-list] exceptions and ECMA issues
Carl R. Witty
cwitty@newtonlabs.com
23 Aug 2001 16:22:37 -0700
Paolo Molaro <lupus@debian.org> writes:
...
> Basically it says that if an exception id thrown, control is transfered to the
> matching catch block [1] and only later to the finally block [2].
> Partition I, instead, claims that a matching catch block is searched, but
> before executing it, control is transfered to the finally block
> (section 11.4.2.2.):
>
> --snip snip--
> If a match is not found in the current method, the calling method is searched, and so on. If no match is found
> the CLI will dump a stack trace and abort the program. If a match is found, the CLI walks the stack back to the
> point just located, but this time calling the finally and fault handlers. It then starts the corresponding exception
> handler. Stack frames are discarded either as this second walk occurs or after the handler completes, depending
> on information in the exception handler array entry associated with the handling block.
> --snip snip--
I think you're misreading the specification here.
Let me give an example. (Warning: I don't know C#; this is almost
certainly not the correct C# exception handling syntax.)
try {
...
try {
throw ...;
} finally {
// finally handler A
}
} catch {
// catch handler B
} finally {
// finally handler C
}
My reading of the paragraph you quoted above is that you must execute
"finally handler A" before executing "catch handler B". The other
paragraph you quoted (that I cut from my reply) says you must execute
"catch handler B" before "finally handler C".
Carl Witty