summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-05-24 08:31:06 +0900
committerGitHub <[email protected]>2020-05-24 08:31:06 +0900
commit93e78fcde1d4b9b7e9e7d86eeace95df0907aa0e (patch)
tree588252a0fdbd163af58a85b85b43804fd17a1935 /src
parent47ea60814b61d6f52a71b4799b4143f59191ff82 (diff)
parent6f4c585bd73fc43fb9e34a70d74b5a50852600ea (diff)
downloadmruby-93e78fcde1d4b9b7e9e7d86eeace95df0907aa0e.tar.gz
mruby-93e78fcde1d4b9b7e9e7d86eeace95df0907aa0e.zip
Merge pull request #5006 from mame/fix-send-with-splat-args
Do not destruct rest arguments for __send__
Diffstat (limited to 'src')
-rw-r--r--src/array.c7
-rw-r--r--src/vm.c2
2 files changed, 8 insertions, 1 deletions
diff --git a/src/array.c b/src/array.c
index 6e73bcd8e..ad0d5b8db 100644
--- a/src/array.c
+++ b/src/array.c
@@ -808,6 +808,13 @@ ary_subseq(mrb_state *mrb, struct RArray *a, mrb_int beg, mrb_int len)
return mrb_obj_value(b);
}
+mrb_value
+mrb_ary_subseq(mrb_state *mrb, mrb_value ary, mrb_int beg, mrb_int len)
+{
+ struct RArray *a = mrb_ary_ptr(ary);
+ return ary_subseq(mrb, a, beg, len);
+}
+
static mrb_int
aget_index(mrb_state *mrb, mrb_value index)
{
diff --git a/src/vm.c b/src/vm.c
index 7bb153910..bd54f3f00 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -625,7 +625,7 @@ mrb_f_send(mrb_state *mrb, mrb_value self)
ci->argc--;
}
else { /* variable length arguments */
- mrb_ary_shift(mrb, regs[0]);
+ regs[0] = mrb_ary_subseq(mrb, regs[0], 1, RARRAY_LEN(regs[0]) - 1);
}
if (MRB_METHOD_CFUNC_P(m)) {