diff options
| author | Carson McDonald <[email protected]> | 2013-06-08 10:43:34 -0400 |
|---|---|---|
| committer | Carson McDonald <[email protected]> | 2013-06-08 10:43:34 -0400 |
| commit | c75bfc93a3d8460a7355906ae080870aa152e32a (patch) | |
| tree | dbe744576f14c7433ae14c97dea0c1464c3bca4c /src | |
| parent | ab4ecac07b01c85342d477986d074279dad55021 (diff) | |
| download | mruby-c75bfc93a3d8460a7355906ae080870aa152e32a.tar.gz mruby-c75bfc93a3d8460a7355906ae080870aa152e32a.zip | |
Raise a NameError when symbol isn't found.
Diffstat (limited to 'src')
| -rw-r--r-- | src/class.c | 14 |
1 files changed, 10 insertions, 4 deletions
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 |
