finally return の話

某所をみて思い出した finally return の問題。まずは finally return から。

kz> try
  >     throw 123;
  > finally
  >     return 456;
  > end
  >

--> 456

例外が食われた。次は finally break を。

kz> try
  >     throw 123;
  > finally
  >     break TRY;
  > end:TRY
  >
Exception in thread "main" java.lang.VerifyError: (class: code,
method: exec signature: (Lkuzha/KuzhaContext;)Lkuzha/KuzhaObject;)
Inconsistent stack height 0 != 1

VerifyError が出てくる。なぜかというと finally の時点でスタックに例外が積まれているが、例外を積んだまま break しているのでスタックの高さが一致しませんでしたよエラーが出てきてしまっている。finally continue でも同じ現象が起きる。