On Tue, Aug 10, 2010 at 2:51 PM, Chouser <chou...@gmail.com> wrote:
>
> That patch seems to essentially reverse this one:
>
> http://github.com/clojure/clojure/commit/5e9f2b293b307aa7953cd390360d24549e542b92
>
> ...which suggests to me there must be a better solution, though I
> don't see yet what it would be.

Ok, it looks to me like the above commit was an insufficient
solution for the problem it was trying to solve.  Since the
content of the finally block is emitted after the main try
block as well as after each catch block, a single finally handler
for all them together (which is what the above commit does)
cannot avoid potentially re-running some parts of the finally
clause.

To see what javac emits in similar circumstances, I wrote
a foo.java and disassmbled it here: http://gist.github.com/517865

It looks like javac protects the try block and each catch block
individually with separate entries in the exception table, all of
them pointing to the final finally block.

The patch at the top of that gist attempts to do the same thing,
and also fully reverses the earlier "endTryCatch" commit.  This
passes all tests, including new ones Joe Gallo wrote based on
reports in this thread: http://gist.github.com/517871

--Chouser
http://joyofclojure.com/

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to