diff options
Diffstat (limited to 'vm_method.c')
-rw-r--r-- | vm_method.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/vm_method.c b/vm_method.c index 218d51f431..cea26cdc31 100644 --- a/vm_method.c +++ b/vm_method.c @@ -713,7 +713,8 @@ rb_mod_undef_method(int argc, VALUE *argv, VALUE mod) static VALUE rb_mod_method_defined(VALUE mod, VALUE mid) { - if (!rb_method_boundp(mod, rb_to_id(mid), 1)) { + ID id = rb_check_id(mid); + if (!id || !rb_method_boundp(mod, id, 1)) { return Qfalse; } return Qtrue; @@ -763,7 +764,9 @@ check_definition(VALUE mod, ID mid, rb_method_flag_t noex) static VALUE rb_mod_public_method_defined(VALUE mod, VALUE mid) { - return check_definition(mod, rb_to_id(mid), NOEX_PUBLIC); + ID id = rb_check_id(mid); + if (!id) return Qfalse; + return check_definition(mod, id, NOEX_PUBLIC); } /* @@ -795,7 +798,9 @@ rb_mod_public_method_defined(VALUE mod, VALUE mid) static VALUE rb_mod_private_method_defined(VALUE mod, VALUE mid) { - return check_definition(mod, rb_to_id(mid), NOEX_PRIVATE); + ID id = rb_check_id(mid); + if (!id) return Qfalse; + return check_definition(mod, id, NOEX_PRIVATE); } /* @@ -827,7 +832,9 @@ rb_mod_private_method_defined(VALUE mod, VALUE mid) static VALUE rb_mod_protected_method_defined(VALUE mod, VALUE mid) { - return check_definition(mod, rb_to_id(mid), NOEX_PROTECTED); + ID id = rb_check_id(mid); + if (!id) return Qfalse; + return check_definition(mod, id, NOEX_PROTECTED); } int @@ -1238,7 +1245,8 @@ obj_respond_to(int argc, VALUE *argv, VALUE obj) ID id; rb_scan_args(argc, argv, "11", &mid, &priv); - id = rb_to_id(mid); + if (!(id = rb_check_id(mid))) + return Qfalse; if (basic_obj_respond_to(obj, id, !RTEST(priv))) return Qtrue; return Qfalse; |