diff --git a/vm.c b/vm.c index d945fba..dbbdd70 100644 --- a/vm.c +++ b/vm.c @@ -854,6 +854,10 @@ rb_vm_cref(void) { rb_thread_t *th = GET_THREAD(); rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(th, th->cfp); + + if (cfp == 0) { + rb_raise(rb_eRuntimeError, "Can't call on top of Fiber or Thread"); + } return vm_get_cref(cfp->iseq, cfp->lfp, cfp->dfp); } @@ -875,6 +879,9 @@ rb_vm_cbase(void) rb_thread_t *th = GET_THREAD(); rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(th, th->cfp); + if (cfp == 0) { + rb_raise(rb_eRuntimeError, "Can't call on top of Fiber or Thread"); + } return vm_get_cbase(cfp->iseq, cfp->lfp, cfp->dfp); } @@ -1968,6 +1975,10 @@ m_core_set_postexe(VALUE self, VALUE iseqval) rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(th, th->cfp); VALUE proc; + if (cfp == 0) { + rb_bug("m_core_set_postexe: unreachable"); + } + GetISeqPtr(iseqval, blockiseq); blockptr = RUBY_VM_GET_BLOCK_PTR_IN_CFP(cfp);