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);
// main body
{
mv.aload(0);
// FIXME we want to eliminate these type casts when possible