diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-08-29 22:58:07 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-08-29 22:58:07 +0900 |
| commit | f08f3c34be5dc669bb298084e0bb284d2c10789b (patch) | |
| tree | 1921d00ceab81571faaa58ca21f61572b5bc311f /src | |
| parent | 564372d7b920049d5bcd0c120a3689402915fb7b (diff) | |
| download | mruby-f08f3c34be5dc669bb298084e0bb284d2c10789b.tar.gz mruby-f08f3c34be5dc669bb298084e0bb284d2c10789b.zip | |
Fix a bug introduced by the last commit.
Should have handled the case `to_a` returns `nil`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/kernel.c | 11 |
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++) { |
