summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/eval.c b/eval.c
index 7b480990c8..fc5e88befd 100644
--- a/eval.c
+++ b/eval.c
@@ -4254,11 +4254,20 @@ VALUE
rb_yield_splat(values)
VALUE values;
{
- values = svalue_to_avalue(values);
- if (RARRAY(values)->len == 0) {
- return rb_yield_0(Qundef, 0, 0, Qfalse, Qfalse);
+ VALUE tmp;
+ int avalue = Qfalse;
+
+ tmp = rb_check_array_type(values);
+ if (!NIL_P(tmp)) {
+ if (RARRAY(tmp)->len == 0) {
+ values = Qundef;
+ }
+ else {
+ values = tmp;
+ avalue = Qtrue;
+ }
}
- return rb_yield_0(values, 0, 0, Qfalse, Qtrue);
+ return rb_yield_0(values, 0, 0, Qfalse, avalue);
}
static VALUE