diff --git vm_args.c vm_args.c index e4ade6b..cd52227 100644 --- vm_args.c +++ vm_args.c @@ -562,10 +562,14 @@ setup_parameters_complex(rb_thread_t * const th, const rb_iseq_t * const iseq, r break; case arg_setup_lambda: if (given_argc == 1 && - given_argc != iseq->param.lead_num && + given_argc != min_argc && + (min_argc > 0 || iseq->param.flags.has_block) && !iseq->param.flags.has_rest && args_check_block_arg0(args, th, msl)) { - given_argc = RARRAY_LENINT(args->rest); + int len = RARRAY_LENINT(args->rest); + if (len >= min_argc && len <= max_argc) { + given_argc = len; + } } }