summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-08-23 04:05:42 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-08-23 04:05:42 +0000
commit46e1454dea07eeb4396a85f41dc5753055a17b06 (patch)
treee44b364903181a7f769eb1def459e817a82be00b /eval.c
parentfc63eb3a7763d460a451af88dc34403a7977749a (diff)
* eval.c (rb_yield_splat): should check if "values" is array.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4428 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
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