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