aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vm_insnhelper.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 2d9b96b5e7..baf682ba85 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -3472,18 +3472,18 @@ vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
struct rb_calling_info *calling, const struct rb_callinfo *ci,
bool is_lambda, VALUE block_handler)
{
+ auto VALUE (*func)(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
+ struct rb_calling_info *calling, const struct rb_callinfo *ci,
+ bool is_lambda, VALUE block_handler);
+
switch (vm_block_handler_type(block_handler)) {
- case block_handler_type_iseq:
- return vm_invoke_iseq_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
- case block_handler_type_ifunc:
- return vm_invoke_ifunc_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
- case block_handler_type_proc:
- return vm_invoke_proc_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
- case block_handler_type_symbol:
- return vm_invoke_symbol_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
- }
- VM_UNREACHABLE(vm_invoke_block: unreachable);
- return Qnil;
+ case block_handler_type_iseq: func = vm_invoke_iseq_block; break;
+ case block_handler_type_ifunc: func = vm_invoke_ifunc_block; break;
+ case block_handler_type_proc: func = vm_invoke_proc_block; break;
+ case block_handler_type_symbol: func = vm_invoke_symbol_block; break;
+ }
+
+ return func(ec, reg_cfp, calling, ci, is_lambda, block_handler);
}
static VALUE