summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authortake_cheeze <[email protected]>2014-05-16 19:58:36 +0900
committertake_cheeze <[email protected]>2014-05-16 19:58:36 +0900
commit49cf477688c56704a68a6c500c129f6e660aba37 (patch)
treee003a37dbd1c95bb1ff4297e6b71c26f43c6b9a3
parent41b46ca1ed160a014b004223bdceb45d107fecf9 (diff)
downloadmruby-49cf477688c56704a68a6c500c129f6e660aba37.tar.gz
mruby-49cf477688c56704a68a6c500c129f6e660aba37.zip
Fix #2259 .
-rw-r--r--src/kernel.c18
-rw-r--r--test/t/kernel.rb8
2 files changed, 15 insertions, 11 deletions
diff --git a/src/kernel.c b/src/kernel.c
index 7bcbd6518..0a608bcb0 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -984,16 +984,11 @@ basic_obj_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym id, int pub)
static mrb_value
obj_respond_to(mrb_state *mrb, mrb_value self)
{
- mrb_value *argv;
- mrb_int argc;
- mrb_value mid, priv;
+ mrb_value mid;
mrb_sym id, rtm_id;
- mrb_bool respond_to_p = TRUE;
+ mrb_bool priv = FALSE, respond_to_p = TRUE;
- mrb_get_args(mrb, "*", &argv, &argc);
- mid = argv[0];
- if (argc > 1) priv = argv[1];
- else priv = mrb_nil_value();
+ mrb_get_args(mrb, "o|b", &mid, &priv);
if (mrb_symbol_p(mid)) {
id = mrb_symbol(mid);
@@ -1017,13 +1012,14 @@ obj_respond_to(mrb_state *mrb, mrb_value self)
}
if (respond_to_p) {
- respond_to_p = basic_obj_respond_to(mrb, self, id, !mrb_test(priv));
+ respond_to_p = basic_obj_respond_to(mrb, self, id, !priv);
}
if (!respond_to_p) {
rtm_id = mrb_intern_lit(mrb, "respond_to_missing?");
- if (basic_obj_respond_to(mrb, self, rtm_id, !mrb_test(priv))) {
- return mrb_funcall_argv(mrb, self, rtm_id, argc, argv);
+ if (basic_obj_respond_to(mrb, self, rtm_id, !priv)) {
+ mrb_value args[] = { mid, mrb_bool_value(priv) };
+ return mrb_funcall_argv(mrb, self, rtm_id, 2, args);
}
}
return mrb_bool_value(respond_to_p);
diff --git a/test/t/kernel.rb b/test/t/kernel.rb
index 17f776683..ebcc37129 100644
--- a/test/t/kernel.rb
+++ b/test/t/kernel.rb
@@ -451,6 +451,14 @@ assert('Kernel#respond_to?', '15.3.1.3.43') do
Test4RespondTo.new.respond_to?(1)
end
+ assert_raise ArgumentError do
+ Test4RespondTo.new.respond_to?
+ end
+
+ assert_raise ArgumentError do
+ Test4RespondTo.new.respond_to? :a, true, :aa
+ end
+
assert_true respond_to?(:nil?)
assert_true Test4RespondTo.new.respond_to?(:valid_method)
assert_true Test4RespondTo.new.respond_to?('valid_method')