From ab4ecac07b01c85342d477986d074279dad55021 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Sat, 8 Jun 2013 10:42:18 -0400 Subject: bob doesn't have new so don't undef --- src/class.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index 4264129b6..7e3402b79 100644 --- a/src/class.c +++ b/src/class.c @@ -1873,7 +1873,6 @@ mrb_init_class(mrb_state *mrb) mrb_name_class(mrb, mod, mrb_intern(mrb, "Module")); mrb_name_class(mrb, cls, mrb_intern(mrb, "Class")); - mrb_undef_method(mrb, mod, "new"); MRB_SET_INSTANCE_TT(cls, MRB_TT_CLASS); mrb_define_method(mrb, bob, "initialize", mrb_bob_init, MRB_ARGS_NONE()); mrb_define_method(mrb, bob, "!", mrb_bob_not, MRB_ARGS_NONE()); -- cgit v1.2.3 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 From cf0fbcd0ee3772b97d93b4e20118b611a21564ab Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Sun, 9 Jun 2013 07:50:07 -0400 Subject: Remove incorrect removal of iv --- src/class.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index eaf25916c..f446c56bc 100644 --- a/src/class.c +++ b/src/class.c @@ -1417,13 +1417,10 @@ mrb_mod_alias(mrb_state *mrb, mrb_value mod) static void undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a) { - mrb_value m, val; + mrb_value 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)); - } + 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); -- cgit v1.2.3