summaryrefslogtreecommitdiffhomepage
path: root/src
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 /src
parent41b46ca1ed160a014b004223bdceb45d107fecf9 (diff)
downloadmruby-49cf477688c56704a68a6c500c129f6e660aba37.tar.gz
mruby-49cf477688c56704a68a6c500c129f6e660aba37.zip
Fix #2259 .
Diffstat (limited to 'src')
-rw-r--r--src/kernel.c18
1 files changed, 7 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);