try {
// first resume, dive into the block
result = block.yieldArray(context, result, null, null);
} catch (JumpException.RetryJump rtry) {
// FIXME: technically this should happen before the block is executed
parent.raise(new IRubyObject[]{runtime.newSyntaxError("Invalid retry").getException()}, Block.NULL_BLOCK);
} catch (JumpException.BreakJump brk) {
parent.raise(new IRubyObject[]{runtime.newLocalJumpError(Reason.BREAK, runtime.getNil(), "break from proc-closure").getException()}, Block.NULL_BLOCK);
} catch (JumpException.ReturnJump ret) {
parent.raise(new IRubyObject[]{runtime.newLocalJumpError(Reason.RETURN, runtime.getNil(), "unexpected return").getException()}, Block.NULL_BLOCK);
} catch (RaiseException re) {