Skip to content

Commit 7f41c3e

Browse files
committed
Add rb_eval_cmd_call_kw to shortcut
1 parent f8231da commit 7f41c3e

File tree

4 files changed

+15
-4
lines changed

4 files changed

+15
-4
lines changed

internal/vm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ void rb_check_stack_overflow(void);
7878
VALUE rb_block_call2(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t bl_proc, VALUE data2, long flags);
7979
struct vm_ifunc *rb_current_ifunc(void);
8080
VALUE rb_gccct_clear_table(VALUE);
81+
VALUE rb_eval_cmd_call_kw(VALUE cmd, int argc, const VALUE *argv, int kw_splat);
8182

8283
#if USE_YJIT || USE_ZJIT
8384
/* vm_exec.c */

signal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1066,7 +1066,7 @@ signal_exec(VALUE cmd, int sig)
10661066
EC_PUSH_TAG(ec);
10671067
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
10681068
VALUE signum = INT2NUM(sig);
1069-
rb_eval_cmd_kw(cmd, rb_ary_new3(1, signum), RB_NO_KEYWORDS);
1069+
rb_eval_cmd_call_kw(cmd, 1, &signum, RB_NO_KEYWORDS);
10701070
}
10711071
EC_POP_TAG();
10721072
ec = GET_EC();

variable.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -862,7 +862,7 @@ rb_define_virtual_variable(
862862
static void
863863
rb_trace_eval(VALUE cmd, VALUE val)
864864
{
865-
rb_eval_cmd_kw(cmd, rb_ary_new3(1, val), RB_NO_KEYWORDS);
865+
rb_eval_cmd_call_kw(cmd, 1, &val, RB_NO_KEYWORDS);
866866
}
867867

868868
VALUE

vm_eval.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,6 +2147,17 @@ rb_eval_string_wrap(const char *str, int *pstate)
21472147

21482148
VALUE
21492149
rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat)
2150+
{
2151+
Check_Type(arg, T_ARRAY);
2152+
int argc = RARRAY_LENINT(arg);
2153+
const VALUE *argv = RARRAY_CONST_PTR(arg);
2154+
VALUE val = rb_eval_cmd_call_kw(cmd, argc, argv, kw_splat);
2155+
RB_GC_GUARD(arg);
2156+
return val;
2157+
}
2158+
2159+
VALUE
2160+
rb_eval_cmd_call_kw(VALUE cmd, int argc, const VALUE *argv, int kw_splat)
21502161
{
21512162
enum ruby_tag_type state;
21522163
volatile VALUE val = Qnil; /* OK */
@@ -2155,8 +2166,7 @@ rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat)
21552166
EC_PUSH_TAG(ec);
21562167
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
21572168
if (!RB_TYPE_P(cmd, T_STRING)) {
2158-
val = rb_funcallv_kw(cmd, idCall, RARRAY_LENINT(arg),
2159-
RARRAY_CONST_PTR(arg), kw_splat);
2169+
val = rb_funcallv_kw(cmd, idCall, argc, argv, kw_splat);
21602170
}
21612171
else {
21622172
val = eval_string_with_cref(rb_vm_top_self(), cmd, NULL, 0, 0);

0 commit comments

Comments
 (0)