From c75bfc93a3d8460a7355906ae080870aa152e32a Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Sat, 8 Jun 2013 10:43:34 -0400 Subject: Raise a NameError when symbol isn't found. --- src/class.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index 7e3402b79..eaf25916c 100644 --- a/src/class.c +++ b/src/class.c @@ -1414,14 +1414,20 @@ mrb_mod_alias(mrb_state *mrb, mrb_value mod) return mrb_nil_value(); } - static void undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a) { - mrb_value m; + mrb_value m, val; - MRB_SET_VALUE(m, MRB_TT_PROC, value.p, 0); - mrb_define_method_vm(mrb, c, a, m); + if (!mrb_obj_respond_to(c, a)) { + val = mrb_iv_remove(mrb, mrb_obj_value(c), a); + if (mrb_undef_p(val)) { + mrb_name_error(mrb, a, "undefined method '%S' for class '%S'", mrb_sym2str(mrb, a), mrb_obj_value(c)); + } + } else { + MRB_SET_VALUE(m, MRB_TT_PROC, value.p, 0); + mrb_define_method_vm(mrb, c, a, m); + } } void -- cgit v1.2.3