Label doReturnFinally = new Label();
Label doRedoFinally = new Label();
Label catchReturnJump = new Label();
Label catchRedoJump = new Label();
if (framed || heapScoped) mv.trycatch(tryBegin, tryEnd, catchReturnJump, p(JumpException.ReturnJump.class));
if (framed) mv.trycatch(tryBegin, tryEnd, catchRedoJump, p(JumpException.RedoJump.class));
if (framed || heapScoped) mv.trycatch(tryBegin, tryEnd, doFinally, null);
if (framed || heapScoped) mv.trycatch(catchReturnJump, doReturnFinally, doFinally, null);
if (framed) mv.trycatch(catchRedoJump, doRedoFinally, doFinally, null);
if (framed || heapScoped) mv.label(tryBegin);