From c74d6f437105168fdccff179db48ef10e1a62f4d Mon Sep 17 00:00:00 2001 From: matz Date: Sat, 18 Oct 2008 10:39:41 +0000 Subject: * numeric.c (num_sadded): remove newly defined singleton method that should not exist after exception handling. [ruby-dev:36569] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19835 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ numeric.c | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index bbfc75eb3..e6e2190bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Oct 18 14:40:32 2008 Yukihiro Matsumoto + + * numeric.c (num_sadded): remove newly defined singleton method + that should not exist after exception handling. [ruby-dev:36569] + Sat Oct 18 13:30:53 2008 Yukihiro Matsumoto * string.c (rb_external_str_new): a new function to convert from diff --git a/numeric.c b/numeric.c index 06351eca3..042e0c306 100644 --- a/numeric.c +++ b/numeric.c @@ -202,11 +202,13 @@ rb_num_coerce_relop(VALUE x, VALUE y, ID func) static VALUE num_sadded(VALUE x, VALUE name) { + const char *nstr = rb_id2name(rb_to_id(name)); /* ruby_frame = ruby_frame->prev; */ /* pop frame for "singleton_method_added" */ /* Numerics should be values; singleton_methods should not be added to them */ + rb_remove_method(rb_singleton_class(x), nstr); rb_raise(rb_eTypeError, "can't define singleton method \"%s\" for %s", - rb_id2name(rb_to_id(name)), + nstr, rb_obj_classname(x)); return Qnil; /* not reached */ } -- cgit