summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-08-29 22:58:07 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-08-29 22:58:07 +0900
commitf08f3c34be5dc669bb298084e0bb284d2c10789b (patch)
tree1921d00ceab81571faaa58ca21f61572b5bc311f
parent564372d7b920049d5bcd0c120a3689402915fb7b (diff)
downloadmruby-f08f3c34be5dc669bb298084e0bb284d2c10789b.tar.gz
mruby-f08f3c34be5dc669bb298084e0bb284d2c10789b.zip
Fix a bug introduced by the last commit.
Should have handled the case `to_a` returns `nil`.
-rw-r--r--src/kernel.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/kernel.c b/src/kernel.c
index 34f9fd9ef..10ed9f88e 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -772,13 +772,20 @@ mrb_obj_ceqq(mrb_state *mrb, mrb_value self)
if (mrb_array_p(self)) {
ary = self;
}
- else if (!mrb_respond_to(mrb, v, mrb_intern_lit(mrb, "to_a"))) {
+ else if (mrb_nil_p(self)) {
+ return mrb_false_value();
+ }
+ else if (!mrb_respond_to(mrb, self, mrb_intern_lit(mrb, "to_a"))) {
mrb_value c = mrb_funcall_argv(mrb, self, eqq, 1, &v);
if (mrb_test(c)) return mrb_true_value();
return mrb_false_value();
}
else {
- ary = mrb_ary_splat(mrb, self);
+ ary = mrb_funcall(mrb, self, "to_a", 0);
+ if (mrb_nil_p(ary)) {
+ return mrb_funcall_argv(mrb, self, eqq, 1, &v);
+ }
+ mrb_ensure_array_type(mrb, ary);
}
len = RARRAY_LEN(ary);
for (i=0; i<len; i++) {