评论由:hiredman发表
0002-async-220-generate-two-finally-blocks.patch
基于ASYNC-198补丁
finally块可以正常执行或
当处理异常时。因此,finally X 的行为有点像
(let ([link: r (code)]) (try (X) r) (catch Throwable t (X) (throw t)))
之前,:try 代码生成一个单独的 finally 块,它会
尝试通过查看 CURRENT-EXCEPTION 的值来确定是否需要重新抛出异常
但这种情况在嵌套的 try/catch 中没有正确工作
的。
因此,现在 :try 代码生成两个 finally 块,一个用于重新抛出异常,一个不抛出
异常。重新抛出异常的块在异常帧栈中,不抛出异常的块将在 try 块体
的末尾以及每个异常处理器处跳跃。
该补丁还完全删除了 CURRENT-EXCEPTION,因为它仅用于让 finally 确定是否需要抛出或不需要。
异常