diff options
-rw-r--r-- | compile.c | 2 | ||||
-rw-r--r-- | vm_core.h | 1 | ||||
-rw-r--r-- | vm_insnhelper.c | 11 |
3 files changed, 13 insertions, 1 deletions
@@ -12311,7 +12311,7 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) verify_call_cache(iseq); RB_GC_GUARD(dummy_frame); - rb_vm_pop_frame(ec); + rb_vm_pop_frame_no_int(ec); } struct ibf_dump_iseq_list_arg @@ -1747,6 +1747,7 @@ const VALUE *rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dync void rb_vm_inc_const_missing_count(void); VALUE rb_vm_call_kw(rb_execution_context_t *ec, VALUE recv, VALUE id, int argc, const VALUE *argv, const rb_callable_method_entry_t *me, int kw_splat); +void rb_vm_pop_frame_no_int(rb_execution_context_t *ec); MJIT_STATIC void rb_vm_pop_frame(rb_execution_context_t *ec); void rb_thread_start_timer_thread(void); diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 29753f1800..0ce7fb6cc7 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -405,6 +405,17 @@ vm_push_frame(rb_execution_context_t *ec, vm_push_frame_debug_counter_inc(ec, cfp, type); } +void +rb_vm_pop_frame_no_int(rb_execution_context_t *ec) +{ + rb_control_frame_t *cfp = ec->cfp; + + if (VM_CHECK_MODE >= 4) rb_gc_verify_internal_consistency(); + if (VMDEBUG == 2) SDR(); + + ec->cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp); +} + /* return TRUE if the frame is finished */ static inline int vm_pop_frame(rb_execution_context_t *ec, rb_control_frame_t *cfp, const VALUE *ep) |