评论由:hiredman 制作
0002-async-220-generate-two-finally-blocks.patch
基于 ASYNC-198 的补丁
finally块可以正常执行顺序进入,也可以
在处理异常时。因此,finally X 的行为有点像
(try (let [link: r (code)] (X) r) (catch Throwable t (X) (throw t)))
之前,:try 代码生成一个单独的 finally 块,它
试图确定是否需要重新抛出异常,但这在
某些嵌套 try/catch 的情况下没有正确工作
。
因此,现在 :try 代码生成两个 finally 块,一个用于重新抛出
,另一个不重新抛出。重新抛出块位于异常帧
堆栈上,而不重新抛出块则在体和每个异常处理程序的末尾跳转。
。
该补丁还完全删除了 CURRENT-EXCEPTION,因为它仅用于 finally 确定是否需要抛出