diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-06-09 06:14:23 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-06-09 06:14:23 -0700 |
| commit | b9b24822b4277092f67a565b1326d8c21c533ff6 (patch) | |
| tree | 0da76237d0ded8ce5e683a8467ae1b3065831016 | |
| parent | e4c9af6e953d98bb6a52681b3fa861548e9e70a5 (diff) | |
| parent | cf0fbcd0ee3772b97d93b4e20118b611a21564ab (diff) | |
| download | mruby-b9b24822b4277092f67a565b1326d8c21c533ff6.tar.gz mruby-b9b24822b4277092f67a565b1326d8c21c533ff6.zip | |
Merge pull request #1275 from carsonmcdonald/undeffix
Fix for 1274
| -rw-r--r-- | src/class.c | 10 | ||||
| -rw-r--r-- | src/numeric.c | 1 | ||||
| -rw-r--r-- | test/t/class.rb | 7 |
3 files changed, 13 insertions, 5 deletions
diff --git a/src/class.c b/src/class.c index 4264129b6..f446c56bc 100644 --- a/src/class.c +++ b/src/class.c @@ -1414,14 +1414,17 @@ 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_SET_VALUE(m, MRB_TT_PROC, value.p, 0); - mrb_define_method_vm(mrb, c, a, m); + if (!mrb_obj_respond_to(c, a)) { + 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 @@ -1873,7 +1876,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()); diff --git a/src/numeric.c b/src/numeric.c index 6b118dfb4..6cd82d8b6 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -1374,7 +1374,6 @@ mrb_init_numeric(mrb_state *mrb) mrb_define_method(mrb, integer, "to_int", int_to_i, MRB_ARGS_NONE()); fixnum = mrb->fixnum_class = mrb_define_class(mrb, "Fixnum", integer); - mrb_undef_class_method(mrb, fixnum, "new"); mrb_define_method(mrb, fixnum, "+", fix_plus, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */ mrb_define_method(mrb, fixnum, "-", fix_minus, MRB_ARGS_REQ(1)); /* 15.2.8.3.2 */ mrb_define_method(mrb, fixnum, "-@", fix_uminus, MRB_ARGS_REQ(1)); /* 15.2.7.4.2 */ diff --git a/test/t/class.rb b/test/t/class.rb index 72214a2fc..13845a49f 100644 --- a/test/t/class.rb +++ b/test/t/class.rb @@ -304,3 +304,10 @@ assert('Class Undef 2') do result1 == true and result2 == true end +assert('Var undef') do + assert_raise(NameError) do + a=1 + undef a + end +end + |
